diff options
author | Chet Ramey <chet.ramey@case.edu> | 2011-12-03 13:33:39 -0500 |
---|---|---|
committer | Chet Ramey <chet.ramey@case.edu> | 2011-12-03 13:33:39 -0500 |
commit | e6e3b4442080b63cf18d1428138434900a8ea128 (patch) | |
tree | f3c37305586cf00a287cec228e94a108503c9649 | |
parent | 0e5ad4671a0f319a6b1046e452a15078fcfc56b5 (diff) | |
download | bash-e6e3b4442080b63cf18d1428138434900a8ea128.tar.gz |
commit bash-20040728 snapshot
81 files changed, 53820 insertions, 30782 deletions
diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index f6ce0b92..3268ef26 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -9638,3 +9638,40 @@ flags.c error messages [bash-3.0 frozen] + + 7/27 + ---- +doc/Makefile.in + - small fixes + +[bash-3.0-released] + + 7/28 + ---- +array.c + - in array_insert(), make sure the value to be added is non-NULL before + calling savestring() on it + +builtins/reserved.def + - fix description of `CDPATH' + +lib/readline/display.c + - when expanding a prompt that spans multiple lines with embedded + newlines, set prompt_physical_chars from the portion after the + final newline, not the preceding portion. Bug reported by + "Ralf S. Engelschall" <rse@engelschall.com> + +make_cmd.c + - explicitly declare `lineno' in function prologue for make_case_command + +builtins/evalfile.c + - include `trap.h' for declaration for run_return_trap + +bashline.c + - fix a `return' without a value in enable_hostname_completion + +general.c + - include test.h for extern declaration for test_eaccess + +externs.h + - add declaration for zcatfd diff --git a/CWRU/changelog b/CWRU/changelog index f6ce0b92..d2d81b30 100644..120000 --- a/CWRU/changelog +++ b/CWRU/changelog @@ -1,9640 +1 @@ - 4/9/2001 - -------- -[bash-2.05 released] - - 4/10 - ---- -redir.c - - check return value of fclose() in write_here_document() for error - returns; don't just rely on fwrite() failing - -support/bashbug.sh - - set TMPDIR to /tmp if it's null or unset - - use $TMPDIR in the TEMP tempfile name template - - fixed the call to `mktemp', if it exists, to make it more portable - -jobs.c - - if WCONTINUED is not defined, define it to 0 and add a define for - WIFCONTINUED(wstatus) which expands to 0 - - add WCONTINUED to the flags passed to waitpid(2) in waitchld() - - don't increment children_exited if waitpid's status is WIFCONTINUED, - since we don't want to call a SIGCHLD trap handler in this case - - in waitchld(), we set child->running to 1 if WIFCONTINUED(status) - is non-zero - - make sure pretty_print_job doesn't check for the core dump bit if - the process has been continued; it's only valid if the job is dead - - in set_job_status_and_cleanup, set the job to JRUNNING if job_state - is non-zero and the job was previously marked as JSTOPPED - -configure.in - - add -DBROKEN_DIRENT_D_INO to interix LOCAL_CFLAGS - -lib/glob/glob.c - - if BROKEN_DIRENT_D_INO is defined, define REAL_DIR_ENTRY to 1 - -jobs.c - - in kill_pid, we only need to block and unblock SIGCHLD if the - `group' argument is non-zero, since otherwise we just call `kill' - on the pid argument - -version.c - - update copyright date to 2001 - -bashline.c - - prog_complete_return needs to take a `const char *' as its first - argument - - history_completion_generator needs to take a `const char *' as - its first argument, and `text' needs to be a `const char *' - - 4/11 - ---- -redir.c - - fixed a weird typo in redir_special_open, case RF_DEVFD, added - call to all_digits before call to legal_number - - fixed do_redirection_internal to call legal_number instead of atol(3) - when translating r_duplicating_{in,out}put_word, so it handles - overflow better - - produce an error message in redirection_error for out-of-range - file descriptors - - change allocation strategy in redirection_error so we don't have to - malloc scratch memory if redirection_expand() fails - -jobs.h - - added defines for `running' member of a struct process - -general.c - - fix legal_number to return 0 when strtol(3) reports overflow or - underflow - -parse.y - - changed read_token_word to call legal_number instead of atoi(3) - -input.c - - return -1/EBADF from close_buffered_fd if fd is < 0 - -command.h - - fixed bogus comment about IS_DESCRIPTOR in description of the - REDIRECTEE struct - -print_cmd.c - - change cprintf's 'd' modifier code to display negative numbers as - an out-of-range value. We can do this only because the only use - of %d is to output file descriptor numbers in redirections - -support/mksignames.c - - need to include config.h to get a possible value for - UNUSABLE_RT_SIGNALS - - 4/16 - ---- -lib/readline/doc/rluser.texinfo - - corrected a small error in one description of M-DEL - - 4/17 - ---- -stringlib.c - - need to initialize `ind' before calls to RESIZE_MALLOCED_BUFFER - in strcreplace() - -support/bashversion.c - - new file, prints bash version information - -Makefile.in - - rules for building bashversion and linking it to version.o - - 4/24 - ---- -conftypes.h - - new file with HOSTTYPE, OSTYPE, MACHTYPE, etc. defines from - variables.h - -variables.h, version.c - - include conftypes.h - -patchlevel.h - - new file, contains define for PATCHLEVEL. Doing away with the old - scheme of having the information in configure.in - -version.c - - include patchlevel.h - -Makefile.in - - run bashversion -p to find patch level rather than have configure - substitute in a value - - pass -S ${top_srcdir} to support/mkversion.sh - -support/mkversion.sh - - don't put PATCHLEVEL define into version.h, but accept and ignore - a -p option - - take a new -S srcdir option - - find the patch level by parsing it out of patchlevel.h - -configure.in - - hard-code BASHVERS assignment instead of reading it from a file - - remove BASHPATCH; don't substitute it - -_distribution,_patchlevel - - removed - - 4/26 - ---- -shell.c - - call init_noninteractive() in open_shell_script if forced_interactive - is non-zero (the shell was started with -i) and fd_is_tty is 0 - (the script file is a real file, not something like /dev/stdin), - since it wasn't done earlier - -builtins/printf.def - - change for POSIX.2 compliance when conversion errors are encountered - when processing %d, %u, and floating point conversion operators - (print a warning message, return the value accumulated at the time - of the error -- which is always 0 -- and exit with a non-zero status) - -command.h - - added CMD_COMMAND_BUILTIN for use by the `command' builtin and the - code in execute_cmd.c - -builtins/command.def - - add CMD_COMMAND_BUILTIN to the created command's flags - - 5/1 - --- -configure.in - - add call to AC_C_CONST to test `const' compiler behavior - - add call to AC_C_INLINE to test `inline' compiler behavior - - add call to AC_C_STRINGIZE to test cpp #x stringizing operator - -config.h.in - - add `#undef const' for configure to substitute - - add `#undef inline' for configure to substitute - - add `#undef HAVE_STRINGIZE' for configure to substitute - -include/stdc.h - - remove code that defines or undefines `const' and `inline' - - change the __STRING macro to be defined depending on the value - of HAVE_STRINGIZE - -lib/malloc/malloc.c - - change the __STRING macro to be defined depending on the value - of HAVE_STRINGIZE - -lib/readline/{readline,rlprivate}.h - - moved rl_get_termcap to readline.h, making it a public function - -lib/readline/readline.h - - new #define, RL_READLINE_VERSION, hex-encoded library version - number, currently set to 0x0402 - - new public int variable, rl_readline_version - -lib/readline/readline.c - - #define RL_READLINE_VERSION if it is not already defined (which it - should be in readline.h) - - initialize rl_readline_version to RL_READLINE_VERSION - -lib/readline/doc/rltech.texinfo - - documented rl_get_termcap - - documented rl_readline_version - -jobs.c - - job_exit_status should return an int, not a WAIT (undetected - before because on most POSIX-like systems a WAIT is really an int) - -builtins/evalfile.c - - added FEVAL_REGFILE (file must be a regular file) to accepted - _evalfile flags - - fc_execute_file() adds FEVAL_REGFILE to _evalfile flags. This - means that startup files and files read with `.' no longer need - to be regular files - - 5/2 - --- - -lib/termcap/Makefile.in - - fix target for installed termcap library (normally unused) - -lib/tilde/Makefile.in - - fix install target to install in $(libdir) (normally unused) - -Makefile.in - - don't make $(man3dir) since there's nothing installed there - -Makefile.in,doc/Makefile.in - - change `man1ext' to `.1', `man3ext' to `.3' - - change appropriate install targets to use new values of man[13]ext - - use `test ...' instead of `[...]' - - add support for DESTDIR root installation prefix, for package - building (installdirs, install, install-strip, uninstall targets) - -builtins/common.c - - new function int get_exitstat(WORD_LIST *list) returns an eight-bit - exit status value for use in return, exit, logout builtins - -builtins/common.h - - extern declaration for get_exitstat() - -builtins/{exit,return}.def - - call get_exitstat where appropriate - -builtins/printf.def - - add support for "'" flag character as posix 1003.2-200x d6 says - - fix core dump when user-supplied field width or precision is 0 - - fix to printstr() to handle zero-length precision with `%b' format - specifier (printf '%.0b-%.0s\n' foo bar) - - fix to printstr() to treat a negative field width as a positive - field width with left-justification - - fix to mklong to avoid static buffers, which can always be overrun - by someone sufficiently motivated - -bashline.c - - change var in add_host_name to type `size_t' for passing to xrealloc - - 5/3 - --- -execute_cmd.c - - change restore_signal_mask to accept a sigset_t *, since a sigset_t - may not fit into a pointer, change call - -unwind_prot.c - - use a union UWP in restore_variable when restoring a variable whose - size is the same as sizeof(int), the reverse of the method used to - store it in unwind_protect_int - -builtins/printf.def - - use a #define LENMODS containing the length modifiers instead of - testing against each possible modifier character, save any mod - character found - - add support for ISO C99 length specifiers `j', `t', and `z' - - if `L' modifier is supplied with a floating point conversion char, - pass a `long double' to printf if HAVE_LONG_DOUBLE is defined - -configure.in,config.h.in - - call AC_C_LONG_DOUBLE to check for `long double'; define - HAVE_LONG_DOUBLE if supported - -bashline.c - - fix an inadvertantly-unclosed comment in attempt_shell_completion - - make set_saved_history return a value - - make dynamic_complete_history return a useful value - -{make_cmd,execute_cmd,shell,subst,trap,variables,input,unwind_prot,test, -pcomplete}.c - - removed some declared-but-unused variables - -builtins/{cd,enable,fc,set,setattr,type,umask,printf,complete}.def - - removed some declared-but-unused variables - -lib/sh/{zread,netopen}.c - - removed some declared-but-unused variables - -execute_cmd.c - - in execute_arith_command, use a long variable to hold the result - of evalexp(), since that's what it returns - -builtins/evalstring.c - - make cat_file return -1 on a read or write error - -lib/sh/stringlib.c - - make merge_stringlists() return the right value - - 5/7 - --- -pcomplete.c - - remove typo that caused empty declaration (;;) - -parse.y - - fix yyerror() to accept a single string argument; fix callers - -trap.c - - cast pointer to long instead of int when printing message with - internal_warning() in run_pending_traps() - -subst.c - - fix process_substitute to handle stdin being closed - -test.c - - change `while' to `if' in and() and or(), since the loop isn't - actually performed -- there's an unconditional `return' in the - loop body - - check for integer overflow of arguments to `-t' - -lib/sh/netopen.c - - change _getserv() to reject negative port/service numbers - -expr.c - - fix strlong() to not convert the base specification from long to - int before checking for overflow, since truncation on machines - where sizeof(int) != sizeof(long) may mask errors - -builtins/{jobs,kill,wait}.def - - use legal_number instead of atoi when converting strings to pid_t; - check for numeric overflow - -input.c - - fix for cygwin in b_fill_buffer -- off-by-one error when checking - buffer for \r\n termination - -general.h - - new #define INT_STRLEN_BOUND(t), computes max length of string - representing integer value of type T, possibly including a sign - character - - include <limits.h> if it's present - -{execute_cmd,findcmd,test}.c - - don't include <limits.h>, since general.h does it now - -{execute_cmd,lib/sh/itos,pcomplete,print_cmd,subst,variables}.c - - use INT_STRLEN_BOUND instead of static array sizes when converting - various strings to integer values - -shell.h - - struct fd_bitmap now uses an `int' size, since it's bounded by - the number of file descriptors, which must fit into an `int' - -execute_cmd.c - - FD_BITMAP_DEFAULT_SIZE is now 32, not 32L - - new_fd_bitmap takes an `int' size parameter, not a `long' - -execute_cmd.h - - change prototype for new_fd_bitmap() - -test.c - - fix test_stat to check for overflow when parsing the integer file - descriptor number; return ENOENT instead of EBADF for files that - are not open - -hashlib.c - - don't discard the upper 32 bits of the random value, if present - -lib/readline/shell.c - - use the same INT_STRLEN_BOUND mechanism to decide how much space to - allocated in sh_set_lines_and_columns - - 5/8 - --- -aclocal.m4 - - add check for libtinfo (termcap-specific portion of ncurses-5.2) to - BASH_CHECK_LIB_TERMCAP - - new macro, RL_LIB_READLINE_VERSION, checks version of installed - readline library and (optionally) writes version #defines to - config.h. Bash doesn't use the version defines - -configure.in - - call RL_LIB_READLINE_VERSION instead of support/rlvers.sh - -execute_cmd.c - - fix execute_shell_script and the WHITECHAR and STRINGCHAR macros - to check array bounds before indexing into the sample string - -unwind_prot.[ch] - - import new versions submitted by Paul Eggert <eggert@twinsun.com> - with a couple of changes for backwards compatibility, so the rest - of the source doesn't need to be changed yet - -jobs.c - - use unwind_protect_var on last_made_pid in run_sigchld_trap - -builtins/bind.def - - use unwind_protect_var on rl_outstream - -general.c - - rework print_rlimtype to use INT_STRLEN_BOUND and handle the - most negative number correctly - -expr.c - - `tokval' should have been a `long', since all arithmetic is done - as longs - -builtins/history.def - - consolidate tests for valid history position in one block to - avoid duplicate code and strings - -builtins/ulimit.def - - fix check for overflow when setting limit to work when int is 32 - bits and RLIMTYPE is 64 - -lib/sh/tmpfile.c - - don't truncate the result of time(3) to int; just use time_t, - since it's being assigned to an `unsigned long' - -mailcheck.c - - use legal_number instead of atoi in time_to_check_mail() to catch - more numeric errors; consolidate error checking in one block - - last_time_mail_checked should be a time_t - - 5/9 - --- -builtins/set.def - - recognize `set [-+]o nolog' if HISTORY is defined - -bashline.c - - new variable `dont_save_function_defs', set by `set -o nolog'; - currently ignored - -command.h - - the `dest' member of a REDIRECTEE is now an `int' - -parse.y,redir.c - - changed uses of `redir.test' (where redir is a REDIRECTEE) since - it's now an int - -lib/readline/rlstdc.h - - don't mess around with `const', rely on configure to supply a - proper definition if the compiler doesn't support it - -lib/tilde/tilde.h - - include <config.h> if HAVE_CONFIG_H is defined - - don't mess around with `const', rely on configure - -builtins/shopt.def - - new read-only `shopt' option, login_shell, non-zero if shell is a - login shell (as decided by shell.c) - - new function set_login_shell(), sets shopt private value of - login_shell - -builtins/common.h - - new extern declaration for set_login_shell - -shell.c - - call set_login_shell after setting value of login_shell (in - main() and set_shell_name()) - -parse.y - - added new `\A' prompt string escape sequence: time in 24-hour - HH:MM format - -configure.in, config.h.in - - check for <grp.h>, define HAVE_GRP_H if found - -builtins/complete.def - - add new `-A group/-g' option to complete group names - -pcomplete.h - - new define for CA_GROUP, used with group name completion - -pcomplete.c - - add code to support CA_GROUP group name completion - -bashline.c - - new function, bash_groupname_completion_function(), supports - programmable completion of group names - -bashline.h - - extern declaration for bash_groupname_completion_function - -lib/readline/bind.c - - new inputrc variable, `match-hidden-files', controls completion - matching files beginning with a `.' (on Unix) - -lib/readline/complete.c - - new variable, _rl_match_hidden_files, mirrors `match-hidden-files' - inputrc variable - -lib/readline/rlprivate.h - - extern declaration for _rl_match_hidden_files - -builtins/hash.def - - new `-t' option to list hash values for each filename argument - -builtins/read.def - - alarm(3) takes an `unsigned int' argument, not int - - check for arithmetic overflow with -t and -n options - -input.c - - check for read error before doing \r\n translation on cygwin in - b_fill_buffer - - reset bp->b_used to 0 instead of leaving it at -1 on read error - in b_fill_buffer - -builtins/shopt.def - - new functions, shopt_setopt(name, mode) and - shopt_listopt(name, mode) to give the rest of the shell an easy - interface - -builtins/common.h - - extern declarations for shopt_setopt and shopt_listopt - -shell.c - - new invocation options -O and +O, to list or set/unset shopt - options like +o/-o sets and unsets `set -o' options - -doc/{bash.1,bashref.texi} - - document `set -o nolog' - - document `login_shell' shopt option - - document new `\A' prompt string escape sequence - - document new `-t' option to `hash' - - document new `[+-]O' invocation option - -doc/bashref.texi - - add text to `Invoking Bash' section defining a login shell; text - taken from man page - -doc/bash.1, lib/readline/doc/rluser.texinfo - - documented new complete/compgen `-A group/-g' option - -lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1 - - documented new `match-hidden-files' inputrc variable - - 5/10 - ---- -configure.in - - fix AC_CHECK_PROG(ar, ...) - - add AC_CHECK_TYPE for ssize_t - -config.h.in - - new #undef for ssize_t - -lib/sh/zread.c - - int -> ssize_t fixes to mirror modern declarations of read and write - - the `off' variable in zsyncfd should be an off_t since it computes - a file offset - - the local buffer `lbuf' is now char, since it's not nice to pass - unsigned char * to read(2), and the values from it are assigned to - a char anyway - - lind and lused are now size_t, since they index into a buffer - - set lused to 0 on read error - -lib/sh/zwrite.c - - change second argument to type `char *', since ISO C says you have - to pass a `char *' to `write' - -externs.h - - fix extern declarations of zread, zread1, zreadc, and zwrite - - prototype extern declaration of qsort_string_compare - - add extern declaration for history_delimiting_chars() from parse.y - -input.h - - b_used and b_inputp members ofr struct BSTREAM are now size_t - -builtins/evalstring.c - - the number of chars read with zread in cat_file should be assigned - to a variable of type ssize_t - -input.c - - the number of chars read with zread in b_fill_buffer should be - assigned to a variable of type ssize_t - - `localbuf' is now type char[], since POSIX says you shouldn't pass - unsigned char * to read(2) - - in getc_with_restart(), use a variable of type unsigned char to - get a value from the local buffer and return it - - in ungetc_with_restart, explicitly return the character arg passed - to avoid relying on localbuf being unsigned char - -subst.c - - the number of chars read with zread in read_comsub should be - assigned to a variable of type ssize_t - -mksyntax.c - - instead of casting to unsigned char * in addcstr, use a variable - of type unsigned char and let the compiler do the work - -parse.y - - instead of casting to unsigned char * in yy_readline_get, use a - variable of type unsigned char and let the compiler do the work - - ditto for yy_string_get and shell_getc (cast to unsigned char) - -subst.c - - instead of casting to unsigned char when assigning to ifscmap in - expand_word_internal, use a variable of type unsigned char and - let the compiler do the work - -lib/sh/strtrans.c - - instead of casting to unsigned char in ansic_quote, use a variable - of type unsigned char and let the compiler do the work - -builtins/evalstring.c - - remove extern declarations for zwrite and run_trap_cleanup; they're - in externs.h - - prototype cat_file forward declaration - -Makefile.in - - remove -I$(includedir) from INCLUDES and SUBDIR_INCLUDES - -aclocal.m4 - - change RL_LIB_READLINE_VERSION to set RL_PREFIX, RL_LIBDIR, - and RL_INCLUDEDIR to what it used to test the installed readline - library version for use by the caller - - change RL_LIB_READLINE_VERSION to not compute ac_cv_rl_prefix if - the caller has already assigned it a value - - rename _rl_prefix -> ac_cv_rl_prefix, _rl_libdir -> ac_cv_rl_libdir, - _rl_includedir -> ac_cv_rl_includedir - -configure.in - - change testing of whether to use the value of - $opt_with_installed_readline to be != no, to allow the user to - specify a prefix where the installed readline library may be found - - if --with-installed-readline=PREFIX is supplied, set ac_cv_rl_prefix - to PREFIX before calling RL_LIB_READLINE_VERSION - - if --with-installed-readline[=PREFIX] is supplied, don't set - RL_LIBDIR and RL_INCLUDEDIR; let RL_LIB_READLINE_VERSION take care - of it, set RL_INCLUDE=-I${RL_INCLUDEDIR} - - if --with-installed-readline[=PREFIX] is supplied, and we're - linking with the history library, assign $RL_LIBDIR to HIST_LIBDIR - so we use the same version of the installed readline and history - libraries - -Makefile.in, builtins/Makefile.in - - have configure substitute RL_INCLUDEDIR, set RL_INCLUDEDIR variable - -doc/bashref.texi - - updated description of --with-installed-readline configure option - -general.c - - moved QSFUNC typedef here from builtins/common.c - -{alias,bashline,variables,lib/sh/stringvec}.c - - cast fourth argument to qsort to (QSFUNC *) - -alias.c - - prototype forward declaration of qsort_alias_compare - -bashhist.c - - include <glob/glob.h> for extern declaration of glob_pattern_p - - remove extern declaration of history_delimiting_chars; it's now - in externs.h - - prototype forward declarations of histignore_item_func, - maybe_add_history, and bash_add_history - -bracecomp.c - - remove extern declaration for sh_backslash_quote; it's in externs.h - -braces.c - - remove extern declaration for extract_command_subst; it's in subst.h - - prototype forward declarations for expand_amble, array_concat, and - brace_gobbler - -error.c - - prototype extern declaration of give_terminal_to, fix bad call - -{execute_cmd,expr,findcmd,jobs,mailcheck,nojobs,pcomplete,print_cmd,redir, -shell}.c - - prototype all static forward function declarations - -pcomplete.c - - changed some function parameters to `const char *' to avoid discarding - const qualifier - -make_cmd.c - - make_bare_word, make_word_flags, and make_word now take a - `const char *' string argument - -make_cmd.h - - changed extern declarations for make_bare_word and make_word - -print_cmd.c - - cprintf now takes a `const char *' as its first argument, like - xprintf and printf - - the conditional define for xprintf should have been HAVE_VPRINTF, - not HAVE_VFPRINTF - -shell.c - - in isnetconn(), the return value of sizeof() is size_t - -aclocal.m4 - - add inclusion of stddef.h if STDC_HEADERS is defined to 1 in - BASH_CHECK_TYPE - -configure.in - - add a call to BASH_CHECK_TYPE for socklen_t (type of third argument - to getpeername(2)) - - 5/11 - ---- -lib/readline/bind.c - - make `useq' a char array to pass to rl_macro_bind in - rl_parse_and_bind - -lib/readline/{{bind,isearch}.c,rlprivate.h} - - _rl_isearch_terminators is now a char *, not unsigned char * - -{subst,variables,lib/sh/tmpfile}.c - - dollar_dollar_pid is now a `pid_t' instead of `int' - -variables.c - - sbrand() now takes an `unsigned long' to set the seed value - - changed last_random_value to type int, since it's always between - 0 and 32767 - - use strtoul to convert the value in assign_random instead of atoi - - take out casts in any arguments to sbrand() - - take out cast to int in call to inttostr in set_ppid() - -subst.c - - don't cast last_asynchronous_pid when passing to itos() - -{sig,subst}.c - - prototype all static forward function declarations - - 5/14 - ---- -{test,trap,variables}.c - - prototype all static forward function declarations - -variables.c - - free_variable_hash_data() now takes a PTR_T, a `generic pointer' - -builtins/{alias,bind,break,cd,complete,declare,enable,exit,fc,fg_bg,help, -history,jobs,pushd,read,set,trap,umask, - - prototype all static forward function declarations - -builtins/read.def - - reset_eol_delim now takes a `char *' arg, since that's what the - unwind_protect functions pass it, and it ignores its arguments - anyway - -lib/readline/{histsearch,input,kill,rltty,search,vi_mode}.c - - prototype all static forward function declarations - -lib/tilde/tilde.c - - prototype all static forward function declarations - - tilde_find_prefix, tilde_find_suffix, isolate_tilde_prefix, and - glue_prefix_and_suffix now take `const char *' arguments where - appropriate - -configure.in,config.h.in - - check for vsnprintf, define HAVE_VSNPRINTF if found - -lib/readline/display.c - - use vsnprintf() in rl_message if it's available; if we don't, at - least set the last character in msg_buf to 0 to avoid overrun -- - we really can't do anything about overflow at this point. if it's - available, this fixes buffer overflow problems in rl_message - - 5/15 - ---- -lib/readline/histexpand.c - - in get_history_word_specifier, allow any character to terminate - a `:first-' modifier, not just `:' and null. This is what csh - appears to do. This allows things like `!:0- xyzzy' to replace the - last argument with xyzzy - - 5/18 - ---- -configure.in, config.h.in - - check for <stdint.h>, define HAVE_STDINT_H if found - - check for intmax_t in <stdint.h>, define intmax_t as long if not - found - - 5/21 - ---- -builtins/kill.def - - change to use strerror() for error message when kill(2) fails - -aclocal.m4 - - new macro, BASH_C_LONG_LONG, check for `long long' - -configure.in, config.h.in - - call BASH_C_LONG_LONG, define HAVE_LONG_LONG if found - -lib/sh/snprintf.c - - new file, with implementations of snprintf, vsnprintf, asprintf, - and vasprintf, derived from inetutils version - -Makefile.in, lib/sh/Makefile.in - - add snprintf.c/snprintf.o - -configure.in, config.h.in - - add checks for snprintf, asprintf, vasprintf, with appropriate - cpp defines - -lib/readline/{rldefs,xmalloc}.h, lib/readline/xmalloc.c - - xmalloc and xrealloc now take `size_t' arguments, like their bash - counterparts - -externs.h,lib/sh/itos.c - - inttostr and itos now take `long' arguments - - inttostr takes a `size_t' argument for the buffer size - -{expr,lib/malloc/malloc,variables,general}.c - - fixed calls to itos() by removing casts, etc. - -subst.[ch] - - get_dollar_var_value now takes a long, not an int - - sub_append_number now takes a long, not an int - -subst.c - - in parameter_brace_expand_word, use a long and legal_number to - translate ${N}, to avoid overflow - - in parameter_brace_expand_length, use a long and legal_number to - translate ${#N}, to avoid overflow - - in do_array_element_assignment, array_expand_index, - array_value_internal, use arrayind_t instead of int - - let verify_substring_values take long * arguments for the return - value of evalexp() - - pass long * arguments to verify_substring_values in - parameter_brace_substring - - parameter_brace_expand_length now returns `long' - - parameter_brace_expand now uses a long variable for the return - value of parameter_brace_expand_length - - param_expand now uses a long variable for the return value from - evalexp - - array_length reference now returns an `arrayind_t', since it can - return the num_elements member of an array, which is of type - arrayind_t - -subst.h - - array_expand_index now returns an `arrayind_t' - -array.[ch] - - array_subrange now takes arrayind_t arguments, not `int' - - dup_array_subrange now uses arrayind_t local variable to do - array indexing - - use long to print array indices in print_element - -variables.c - - null_array_assign, assign_dirstack, bind_array_variable - now take arrayind_t arguments as array indices - - assign_array_var_from_word_list, assign_array_var_from_string, - unbind_array_element now use arrayind_t local variables for - array indexing - -variables.h - - change extern declaration of bind_array_variable - -builtins/common.[ch] - - get_numeric_arg now returns a `long', since it usually returns - the value of legal_number() - -builtins/{shift,break}.def - - use long variables for the return value of get_numeric_arg - -builtins/history.def - - convert string argument to int only if it's in range - -builtins/pushd.def - - set_dirstack_element and get_dirstack_element now take `long' - index arguments - - get_dirstack_index now takes a `long' index argument, since it's - passed the converted value from legal_number - -lib/sh/timeval.c - - in print_timeval, don't assume that the number of minutes fits into - an int, since it's just seconds/60. - -lib/sh/clock.c - - ditto for print_clock_t - - 5/22 - ---- -shell.c - - since the -O option settings may possibly be overridden by the - normal shell initialization or posix initialization, save the - invocation options on an alist (with add_shopt_to_alist) and - process them after basic initialization (with run_shopt_alist) - - 5/23 - ---- -trap.h - - new define, BASH_NSIG, all system signals plus special bash traps - -trap.c, builtins/trap.def - - use BASH_NSIG for array bounds and loops where appropriate - -trap.c - - change decode_signal to disallow numeric signal numbers above - NSIG -- this means you can only reference special traps like - DEBUG by name - - new SPECIAL_TRAP(s) macro to test whether s is one of the special - bash traps (currently DEBUG and EXIT) - - change reset_or_restore_signal_handlers so command substitution - doesn't inherit the debug trap (like ksh93), and child processes - don't have to rely on initialize_traps being run to get rid of - any debug trap - -support/mksignames.c - - add extra "ERR" signal name, value NSIG+1, allocate space for it - and write it out in signal_names[] - -trap.h - - new define: ERROR_TRAP == NSIG+1, change BASH_NSIG to NSIG+2 - - extern declarations for set_error_trap, run_error_trap - - new define: TRAP_STRING(s), expands to trap_list[s] if signal S - is trapped and not ignored, NULL otherwise - -trap.c - - add ERROR_TRAP to SPECIAL_TRAPS define - - initialize ERROR_TRAP stuff in initialize_traps - - new function: set_error_trap(command), sets the ERR trap string - - new function: run_error_trap(command), runs the ERR trap string - - set trap string for ERROR_TRAP to NULL in free_trap_strings - - change reset_or_restore_signal_handlers so child processes don't - inherit the ERR trap - - add case to call run_error_trap in maybe_call_trap_handler - -execute_cmd.c - - in execute_command_internal, keep track of ERR trap and call it if - necessary - - use TRAP_STRING to get the value of debug and error traps - - in execute_function, arrange things so the ERR trap is not inherited - by shell functions, and is saved and restored like the DEBUG trap - -doc/{bash.1,bashref.texi} - - documented new ERR trap - -tests/{trap.{tests,right},trap2.sub,trap2a.sub} - - added ERR trap tests - -subst.c - - on machines without /dev/fd, change the named pipe fifo list to a - list of structs containing pathname and proc information - - change unlink_fifo_list to kill the proc in the fifo list with - signal 0 and not remove the fifo if the proc is still alive. This - should fix the problem on those backward systems without /dev/fd - where fifos were removed when a job using process substitution was - suspended - - 5/24 - ---- -examples/loadables/getconf.h - - new file, with basic defines needed to make getconf work minimally - on POSIX systems without the necessary definitions - -examples/loadables/getconf.c - - replacement functions for confstr, sysconf, pathconf for systems - that lack them, providing a minimal posix interface - - heavily augmented getconf, now supports all POSIX.1-200x, - POSIX.2-200x, Solaris 7, AIX 4.2 getconf variables - - 5/29 - ---- -builtins/setattr.def - - make `readonly', `export', and `declare' print `invisible' variables - as just a command and variable name, without a value, when listing - all variables (as POSIX.2-200x d6 requires) - - 5/30 - ---- - -configure.in - - upgraded to autoconf-2.50 on main development machine, so require - autoconf-2.50 in preparation for using some if its new features - - call AC_C_PROTOTYPES - - remove call to AC_EXEEXT, which now does the wrong thing - - changed AC_INIT to new flavor - - added call to AC_CONFIG_SRCDIR - - AC_CONFIG_HEADER -> AC_CONFIG_HEADERS - - AC_RETSIGTYPE -> AC_TYPE_SIGNAL - -configure.in, aclocal.m4, config.h.in - - removed call to BASH_LARGE_FILE_SUPPORT, use AC_SYS_LARGEFILE - standard support, with new macros _FILE_OFFSET_BITS and - _LARGE_FILES - - removed definition of BASH_LARGE_FILE_SUPPORT - -doc/bashref.texi - - document new `--enable-largefile' configure option - -lib/readline/readline.c - - change rl_set_prompt to call rl_expand_prompt unconditionally, so - local_prompt and local_prompt_prefix get set correctly - - 6/6 - --- -lib/readline/complete.c - - don't append `/' or ` ' to a match when completing a symlink that - resolves to a directory, unless the match doesn't add anything - to the word. This means that a tab will complete the word up to - the full name, but not add anything, and a subsequent tab will add - a slash. Change to append_to_match; callers changed - -hashlib.c - - new function, hash_table_nentries (table), returns the number of - items in TABLE - -hashlib.h - - extern declaration for hash_table_nentries - -configure.in - - configure without bash malloc on openbsd; they claim it needs - eight-bit alignment (which the bash malloc provides, but...) - - 7/2 - --- -stringlib.c - - only call RESIZE_MALLOCED_BUFFER from strsub() if the replacement - string length is > 0, avoid possible hangs if replacement is null - -subst.c - - don't include input.h; no longer needed - -configure.in - - remove calls to AC_SYS_RESTARTABLE_SYSCALLS and - BASH_SYS_RESTARTABLE_SYSCALLS; the results are no longer used - -config.h.in - - remove define for HAVE_RESTARTABLE_SYSCALLS - -aclocal.m4 - - removed definition of BASH_SYS_RESTARTABLE_SYSCALLS; no longer used - -execute_cmd.c - - changed select command so `return' no longer terminates the select - command, so it can be used to return from an enclosing function. - This is as ksh (88 and 93) does it - -lib/readline/vi_mode.c - - fix trivial typo in declaration of vi_motion; `t' appears twice; - the second instance should be `T' - - 7/3 - --- -configure.in - - don't add -static to LDFLAGS on Solaris 2.x. This means that the - auxiliary programs will be built as dynamic executables, but that - should do no harm - - 7/5 - --- -lib/glob/fnmatch.c - - fix the code that processes **(pattern) to short-circuit if the - pattern is ill-formed or lacks a trailing `)' -- this fixes the - segfault on **(/*) - -Makefile.in, builtins/Makefile.in - - split CCFLAGS into CCFLAGS_FOR_BUILD and CFLAGS, to aid in - cross-compilation - - build programs that use $(CC_FOR_BUILD) using $(CCFLAGS_FOR_BUILD) - -configure.in, config.h.in - - check for getaddrinfo(3), define HAVE_GETADDRINFO if found - -lib/sh/netopen.c - - implemented a version of _netopen (_netopen6) that uses - getaddrinfo(3) if available, use if HAVE_GETADDRINFO is defined. - old _netopen is _netopen4; _netopen now calls either _netopen6 - or _netopen4 as appropriate - - 7/9 - --- -builtins/exit.def - - don't source ~/.bash_logout if subshell_environment is non-zero - -execute_command.c - - in execute_until_or_while, handle the case where `breaking' is - set in the loop test (e.g., by the job control code when a job - is stopped with SIGTSTP), but the return value from the test is - something that would cause the loop to break. Need to decrement - `breaking' in this case - - 7/10 - ---- -execute_cmd.c - - in execute_in_subshell, make sure a command of type cm_subshell - inherits its `enclosing' command's CMD_IGNORE_RETURN flag - -variables.c - - in maybe_make_export_env, don't allow restricted shells to put - exported functions in the export environment - - 7/11 - ---- -lib/glob/strmatch.h - - renamed old fnmatch.h - - changed guard #ifdef to _STRMATCH_H - - include system <fnmatch.h> if HAVE_LIBC_FNM_EXTMATCH is defined - -lib/glob/strmatch.c - - renamed old fnmatch.c - - include "strmatch.h" - - if HAVE_LIBC_FNM_EXTMATCH is defined, define a dummy version of - strmatch() that just calls fnmatch(3) - -lib/glob/glob.c - - include "strmatch.h" - - fnmatch -> strmatch - -Makefile.in, lib/glob/Makefile.in - - fnmatch -> strmatch - -{bashhist,execute_cmd,pathexp,pcomplete,shell,stringlib,subst,test}.c, -pathexp.h,builtins/help.def - - include <glob/strmatch.h> - - fnmatch -> strmatch - -execute_cmd.c - - broke the code that parses the interpreter name from a #! line - out from execute_shell_script to a new function, getinterp() - - call getinterp from execute_shell_script - - use return value from getinterp in error message about bad - #! interpreter in shell_execve - - 7/12 - ---- -lib/readline/isearch.c - - the last isearch string is now remembered in a new static variable, - last_isearch_string - - if ^R^R is typed, readline now searches for the remembered isearch - string, if one exists - - 7/24 - ---- -pcomplete.h - - extern declaration for completions_to_stringlist() - - 7/25 - ---- -builtins/complete.def - - make compgen handle -o default option - - make compgen return success only if sl->list_len is non-zero, - indicating that there are items on the list - - 7/31 - ---- -execute_cmd.c - - in execute_connection, force stdin to /dev/null for asynchronous - commands if job control is not active, not just if the shell is - running a shell script (since you can run `set -m' in a script) - -lib/readline/rltty.c - - make sure _rl_tty_restore_signals resets `tty_sigs_disabled' on - successful restoration of the terminal modes - - make sure _rl_tty_disable_signals turns off IXON so that ^S and - ^Q can be read by rl_quoted_insert - - 8/1 - --- -aclocal.m4 - - new check for FNM_EXTMATCH being defined in <fnmatch.h>, as Ullrich - Drepper intends to do for new versions of GNU libc - -config.h.in - - new definition for HAVE_LIBC_FNM_EXTMATCH - -configure.in - - check for fnmatch, but don't define anything in config.h - - call BASH_FUNC_FNMATCH_EXTMATCH to check for FNM_EXTMATCH - - 8/2 - --- -alias.h - - remove bogus extern declaration for xmalloc() - - include "stdc.h" - - add prototype declarations for all extern function declarations - -xmalloc.c,lib/readline/xmalloc.c - - fix xmalloc to return a PTR_T - - fix xrealloc to return a PTR_T and take a PTR_T as first argument - -include/ansi_stdlib.h - - extern declarations for malloc and realloc have them return PTR_T - -xmalloc.h - - new file, with extern declarations for functions in xmalloc.c - -general.h - - removed extern declarations for functions in xmalloc.c - - include xmalloc.h - -Makefile.in,builtins/Makefile.in - - update dependencies to include xmalloc.h - -parse.y,{alias,array,bashline,bracecomp,execute_cmd,findcmd,flags,general, -hashcmd,locale,mailcheck,make_cmd,pathexp,pcomplete,print_cmd,stringlib, -subst,unwind_prot,variables}.c -builtins/{common,evalfile}.c -builtins/{cd,command,enable,exec,printf,read,set}.def -lib/sh/{makepath,netopen,pathphys,setlinebuf,shquote,snprintf,stringlist, -strtrans,tmpfile}.c -lib/readline/{util,terminal,shell,readline,macro,kill,isearch,input, -histfile,histexpand,display,complete,bind}.c - - make sure all calls to xmalloc are cast to the right return value - -siglist.c - - include xmalloc.h - -parse.y,{alias,bashline,bracecomp,expr,make_cmd,nojobs,print_cmd,subst}.c -builtins/{fc,printf,read}.def -lib/sh/snprintf.c, lib/tilde/tilde.c -lib/readline/{bind,display,histexpand,isearch,macro,util,vi_mode}.c - - make sure all calls to xrealloc are cast to the right return value - -lib/sh/{netopen,setlinebuf,shquote,snprintf}.c, lib/tilde/tilde.c - - include xmalloc.h, remove extern declaration of xmalloc - -lib/readline/xmalloc.h - - xmalloc and xrealloc should return PTR_T - -lib/readline/rldefs.h - - don't include an extern declaration for xmalloc - - 8/7 - --- -support/shobj-conf - - fixed up commented-out stanzas for HP's unbundled C compiler on - HP/UX - -support/bashbug.sh - - force the subject to be changed from the default - -lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1 - - document that transpose-words swaps the last two words on the line - if point is at the end of the line - - 8/9 - --- -stringlib.c - - fix possible infinite recursion problem with null pattern in - strsub() - -hashlib.c - - new function copy_hash_table to copy a hash table using a caller- - supplied function to copy item data (defaults to savestring()) - -hashlib.h - - new extern declaration for copy_hash_table - -builtins/declare.def - - changes so that declare [-a] var=value assigns `value' to element 0 - of array variable `var' like ksh93 - - change so that declare [-a] var[N]=value assigns `value' to element - N of array variable `var' like ksh93 - - 8/13 - ---- -arrayfunc.c - - new file, for miscellaneous array functions - -arrayfunc.h - - new file, extern declarations for functions in arrayfunc.c - -variables.c - - move convert_var_to_array, bind_array_variable, - assign_array_from_string, assign_array_var_from_word_list, - assign_array_var_from_string, quote_array_assignment_chars, - skipsubscript, unbind_array_element, print_array_assignment - to arrayfunc.c - -shell.h - - include arrayfunc.h after variables.h - -variables.h - - remove above extern function declarations moved to arrayfunc.h - - add extern declaration for var_lookup - -Makefile.in - - add arrayfunc.c, arrayfunc.h in appropriate places - - add arrayfunc.h to dependencies - -subst.c - - move valid_array_reference, array_expand_index, array_variable_part, - array_value_internal, array_value (now global), get_array_value, - do_array_element_assignment to arrayfunc.c - -subst.h - - extern declarations for functions above moved to arrayfunc.h - -arrayfunc.h - - extern declarations for above functions from subst.c - -subst.[ch] - - string_list_dollar_star and string_list_dollar_at are now global - functions - - quote_escapes is now a global function - -subst.c - - maybe_expand_string -> expand_string_if_necessary - - expand_string_to_string -> expand_string_to_string_internal - - new functions: expand_string_to_string and - expand_string_unsplit_to_string, which call - expand_string_to_string_internal with expand_string and - expand_string_unsplit as the FUNC arguments, respectively - -arrayfunc.c - - change array_expand_index to call expand_string_to_string instead - of maybe_expand_string - - 8/14 - ---- -shell.c - - in execute_env_file, call expand_string_unsplit_to_string - -mailcheck.c - - in check_mail, call expand_string_to_string - -variables.c - - in assign_in_env, call expand_string_unsplit_to_string - -arrayfunc.c - - new function, array_variable_name, splits an array reference into - a name (which is returned as a new string) and subscript - - change array_variable_part to just call array_variable_name and - look up the string returned with find_variable - - new function, find_or_make_array_variable (name, flags) which will - look up an array variable and convert a string variable to an - array if necessary. The FLAGS argument, if non-zero, says to - check the readonly and noassign attributes and fail if either is set - -builtins/read.def - - make `read -a aname' honor any readonly status of `aname' - - read -a now calls find_or_make_array_variable with FLAGS value 1 - -arrayfunc.[ch], subst.c, builtins/{declare,read}.def - - do_array_element_assignment -> assign_array_element - - 8/20 - ---- -parse.y - - changed `for' command grammar to allow missing word list after `IN' - token, like latest POSIX drafts require - -lib/sh/tmpfile.c - - in sh_mktmpname(), check for filenum == 0 and init to non-zero number - in this case. it can happen on arithmetic overflow - -support/mkversion.sh - - added `[0-9].[0-9][0-9][a-z]' as an acceptable value for a - distribution to allow for intermediate versions, like 2.05a - -support/config.guess - - removed the addition of the output of `/usr/bin/objformat' when - creating the canonical name on FreeBSD machines, so the canonical - name is once again `freebsd4.2' instead of `freebsdelf4.2' - - 8/22 - ---- -lib/readline/{rlstdc,history,keymaps,readline,rldefs,rlprivate,rlshell, -rltypedefs,xmalloc}.h -lib/readline/{bind,compat,complete,display,funmap,histexpand,histsearch, -input,isearch,kill,nls,parens,readline,rltty,search,shell,signals,vi_mode - - changed __P to PARAMS - -lib/tilde/tilde.[ch] - - changed __P to PARAMS - -{Makefile,configure}.in - - changed the version number to 2.05a - - changed the release status to `alpha1' - - 8/23 - ---- -support/shobj-conf - - support for building shared libraries on Darwin/MacOS X - -siglist.h - - extern declaration for strsignal() to compensate for lack of - a definition in some system include files - -jobs.c - - remove casts from strsignal() calls - -[bash-2.05a-alpha1 frozen] - - 8/27 - ---- -[bash-2.05a-alpha1 released] - - 8/27 - ---- -execute_cmd.c - - fix eval_arith_for_expr to handle the case where the expanded - word list is NULL, returning 0 in this case - -print_cmd.c - - in print_function_def, make sure that func_redirects is assigned - a value before being used - - 8/28 - ---- -alias.c - - include <ctype.h> for definition of isalpha() - -bashhist.h - - add prototypes for extern function declarations - -flags.c - - include bashhist.h for extern function declarations - -mksyntax.c - - include <unistd.h> if HAVE_UNISTD_H is defined in config.h - -parse.y - - include test.h for extern function declarations - -externs.h - - change extern declaration for setlinebuf to sh_setlinebuf - -stringlib.c - - include <glob/glob.h> for extern function declarations - -variables.h - - add function prototypes for all of the sv_* functions - -builtins/common.h - - add extern declarations for set_shellopts() and parse_shellopts() - from builtins/set.def - -variables.c - - include "hashcmd.h" for extern declaration for flush_hashed_filenames - - include "pathexp.h" for extern declaration for setup_glob_ignore - -lib/malloc/malloc.c - - cast to `long' instead of `int' in memalign for 64-bit machines - -{pcomplete,trap}.c - - changed printf escape sequences used to print pointers to %p - -lib/readline/undo.c - - include "xmalloc.h" for extern function declaration - -input.h - - add function prototypes to extern declarations for getc_with_restart - and ungetc_with_restart - -variables.[ch] - - changed type of `function' member of `struct name_and_function' to - `sv_func_t', which is defined and prototyped in variables.h - - map_over now takes an `sh_var_map_func_t *' - -shell.h - - start of a set of function pointer typedefs like those in - lib/readline/rltypedefs.h - -hashlib.[ch] - - second paramter to flush_hash_table is now an `sh_free_func_t *' - -trap.c - - parameter to reset_or_restore_signal_handlers is now an - `sh_resetsig_func_t *' - -pcomplete.h, pcomplib.c - - function pointer argument to print_all_compspecs is now an - `sh_csprint_func_t *' - - function pointer `list_getter' element of an `ITEMLIST' is now - prototyped with __P((...)) instead of using `Function *' - -jobs.[ch] - - `j_cleanup' member of a JOB is now an `sh_vptrfunc_t *' - -alias.c - - map_over_aliases now takes an `sh_alias_map_func_t *' - - free_alias_data now takes a `PTR_T' - -pathexp.c - - function pointer argument to ignore_globbed_names is now an - `sh_ignore_func_t *' - -bashline.c - - function pointer argument to _ignore_completion_names is now an - `sh_ignore_func_t *' - -pathexp.h,{bashhist,bashline.c - - `item_func' member of a `struct ignorevar' is now an - `sh_iv_item_func_t *' - -builtins/evalfile.c - - `errfunc' is now an `sh_vmsg_func_t *' - -jobs.c - - map_over_job now takes an `sh_job_map_func_t *' as its first argument - -array.[ch] - - function pointer argument to array_walk is now an - `sh_ae_map_func_t *' - -general.c - - tilde_expansion_preexpansion_hook has type `tilde_hook_func_t *', - and so the assignment in tilde_initialize doesn't need a cast - -list.c - - map_over_words now takes an `sh_icpfunc_t *' as its second argument - -input.h - - the `getter' and `ungetter' function pointer members of a - BASH_INPUT are now of types `sh_cget_func_t *' and - `sh_cunget_func_t *' respectively - - init_yy_io now takes an `sh_cget_func_t *' as its first argument and - an `sh_cunget_func_t *' as its second - -parse.y - - init_yy_io now takes an `sh_cget_func_t *' as its first argument and - an `sh_cunget_func_t *' as its second - - initialize_bash_input casts bash_input.getter and bash_input.ungetter - appropriately - -builtins/mkbuiltins.c - - make the extern function definitions written to builtext.h have - prototypes with __P((...)) - - include "stdc.h" - - change Function to mk_handler_func_t - - fixed comment_handler to take the right number of args - - prototyped all the handler functions with __P((...)) - -builtins.h - - the `function' member of a struct builtin is now of type - `sh_builtin_func_t *' - -builtins/common.[ch] - - last_shell_builtin, this_shell_builtin are now of type - `sh_builtin_func_t *' - - find_shell_builtin, builtin_address, find_special_builtin now return - `sh_builtin_func_t *' - -builtins/exit.def, {execute_cmd,jobs,nojobs,variables}.c, parse.y - - changed all declarations of last_shell_builtin and this_shell_builtin - -execute_cmd.c - - execute_builtin, execute_builtin_or_function, - execute_subshell_builtin_or_function now take an - `sh_builtin_func_t *' instead of a `Function *' for argument - - changed appropriate variables from `Function *' to - `sh_builtin_func_t *' - -builtins/{bind,builtin,enable,read,setattr}.def - - replaced uses of `Function *' in variable declarations with - appropriate types (sh_builtin_func_t * or rl_command_func_t *) - -builtins/set.def - - set_func and get_func members of binary_o_options are now of types - `setopt_set_func_t *' and `setopt_get_func_t *', which are - prototyped - -builtins/shopt.def - - set_func member of shopt_vars is now of type `shopt_set_func_t *' - -bashline.c - - enable_hostname_completion now returns `int' (the old value of - perform_hostname_completion) - -[The only use of Function and VFunction now is for unwind-protects] - - 9/4 - --- -lib/sh/getcwd.c - - use const define from config.h rather than `CONST' - - use PTR_T define from xmalloc.h rather than `PTR' - - include xmalloc.h for PTR_T - - remove PATH_MAX define, rely on value from maxpath.h - -{general,mailcheck}.c, lib/sh/{pathcanon,pathphys}.c - - don't include maxpath.h directly; it's already included by shell.h - -lib/sh/mailstat.c - - new `mailstat()' implementation, to stat a mailbox file for - mail checking. handles maildir-style mail directories with one - file per message and creates a dummy stat struct from them - -lib/sh/Makefile.in - - add mailstat.c and mailstat.o in the appropriate places - -lib/malloc/malloc.c - - augmented implementation with wrapper functions that pass in file - and line number information from cpp. currently unused, but a - placeholder for future debugging and use tracking - -lib/malloc/shmalloc.h - - new file, extern declarations for allocation wrapper functions for - use by the shell (and others, I guess) - -xmalloc.[ch] - - wrapper functions for xmalloc, xfree, xrealloc (sh_ prefixed) that - pass cpp line number information through to the malloc functions, - if USING_BASH_MALLOC is defined - - 9/5 - --- -lib/malloc/gmalloc.c - - removed; no longer part of distribution - -lib/malloc/Makefile.in - - removed references to gmalloc.[co] - -configure.in, doc/bashref.texi - - removed references to `--with-glibc-malloc' configure option - -{configure,Makefile}.in - - changed the way bash malloc is configured into the Makefile, making - it more like how readline is configured. If the bash malloc is - not configured in, nothing in lib/malloc will be built - - 9/6 - --- -lib/malloc/imalloc.h - - new file, some internal malloc definitions - -lib/malloc/mstats.h - - new file, definitions for malloc statistics structs and functions - -lib/malloc/trace.c - - new file, malloc tracing functions (currently just print messages - to stderr), code is #ifdef MALLOC_TRACE - -lib/malloc/stats.c - - new file, moved malloc stats code from malloc.c to here - -lib/malloc/malloc.c - - moved some definitions to imalloc.h - - moved stats code to stats.c - - malloc tracing calls added to internal_{malloc,realloc,free}, all - #ifdef MALLOC_TRACE - -lib/malloc/Makefile.in, Makefile.in - - added {imalloc,mstats}.h, {trace,stats}.c - -parse.y - - changed decode_prompt_string to save and restore $? - (last_command_exit_value) around calls to expand_prompt_string(), - so command substitutions in PS1, etc. don't change $? - -{array,subst}.c - - a couple more arrayind_t fixes from Paul Eggert - -configure.in - - remove redundant check for wait3(2) - -redir.h - - fixed a typo (stdin_redirs -> stdin_redirects) - - 9/10 - ---- -execute_cmd.c - - remove check for \n and \r from WHITESPACE macro, since those - chars are not whitespace as returned by the whitespace(c) macro - - getinterp now takes a `char *' as first arg, not unsigned char * - - execute_shell_script now takes a `char *' as first arg, not - unsigned char * - - fix typo in forward declaration for `initialize_subshell' - -general.[ch] - - check_binary_file now takes a (char *) argument, not unsigned char * - - pass unsigned char to isspace and isprint because of ISO C fuckup - - bash_tilde_expand now takes a `const char *' as its argument - -builtins/evalfile.c, shell.c - - buffer passed to check_binary_file is char, not unsigned char - -parse.y - - fix extern declaration for yyerror() - - yyerror now takes a `const char *' as first arg - -{error,jobs}.c - - fixes to printf-style functions to handle pids wider than an int - -lib/readline/{isearch,vi_mode}.c - - fix call to rl_message in rl_display_search (remove extra arg) - -variables.c - - fix missing argument to builtin_error in make_local_variable - -builtins/getopts.def - - since getopts takes no options, change while loop calling - internal_getopts to a simple `if' check - -builtins/printf.def - - since printf takes no options, change while loop calling - internal_getopts to a simple `if' check - -lib/readline/bind.c - - remove _SET_BELL macro, expand code inline - -lib/readline/input.c - - change _rl_input_available to use either select or FIONREAD, - but not both - -lib/readline/readline.c - - fix rl_digit_loop to remove unreachable code at end of loop - -{bashhist,bashline,expr,jobs,redir,shell}.c, builtins/fc.def, lib/sh/snprintf.c - - bracket unused functions with #ifdef INCLUDE_UNUSED/#endif - - remove some unused variables - -execute_cmd.c - - remove #ifdef'd code that allowed `return' to terminate a select - statement - -expr.c - - remove some extraneous tests from strlong() - -array.h - - arrayind_t is now a long, since shell arithmetic is performed as - longs - - remove second declaration of new_array_element - -builtins/printf.def - - in mklong, xrealloc cannot return NULL, so don't check for it - - remove some #if 0 code - - fix core dump triggered by a format specification with more than - one `*' - - remove `foundmod', since its value mirrors `modchar != 0' - - include "common.h" for builtin_{error,usage} declarations - -Makefile.in,builtins/Makefile.in - - updated some dependencies due to new include files - -pcomplete.c - - include "execute_cmd.h" for declaration of execute_shell_function - -arrayfunc.c - - include <stdio.h> for printf - - include "builtins/common.h" for builtin_error declaration - -builtins/evalstring.c - - include "../trap.h" for run_trap_cleanup declaration - -builtins/help.def - - include "common.h" instead of locally declaring builtin_error - and builtin_usage - -error.h - - add extern declaration for itrace() - - add prototype to extern declaration of get_name_for_error - - file_error now takes a `const char *' as first argument - -externs.h - - added prototype for sh_setlinebuf declaration, bracketed with - NEED_SH_SETLINEBUF_DECL so we don't need stdio.h everywhere - - add extern declaration for parse.y:return_EOF() - -shell.c - - add NEED_SH_SETLINEBUF_DECL before including shell.h - -lib/readline/callback.c - - include <stdlib.h> or "ansi_stdlib.h" for abort declaration - -quit.h - - remove declaration of throw_to_top_level - -subst.c - - remove unused extern declaration for getopts_reset - -lib/sh/netopen.c - - include <shell.h> for legal_number, etc. - - add prototype for inet_aton extern declaration - -lib/sh/clock.c - - include <stdc.h> for __P declaration - - add extern declaration for get_clk_tck - -support/mkversion.sh - - changed so that extern function declarations for functions in - version.c (moved from externs.h) are in the generated version.h - -shell.h - - include version.h - -version.c - - various `char *' version variables are now `const char *' - -general.h - - add prototype for same_file, bracketed with _POSIXSTAT_H - #ifdef, since that's what include/posixstat.h defines - -builtins/common.[ch] - - _evalfile, maybe_execute_file, source_file, and fc_execute_file - now take a `const char *' as their first argument - -eval.c - - removed extern declaration of yyparse; it's in externs.h - -parse.y - - added prototypes to static forward function declarations - - changed local `all_digits' variable in read_token_word () to - all_digit_token to avoid clash with all_digits() function in - general.c - -{bashhist,copy_cmd,make_cmd,hashlib,mailcheck}.c - - added prototypes for static function declarations - -shell.h - - add extern declarations for interactive, interactive_shell, - changed c files with extern declarations - -pcomplete.c - - changed it_init_aliases to avoid shadowing global variable - `aliases' - -bashline.c,pathexp.c,general.h - - sh_ignore_func_t is now a pointer to a function taking a - `const char *'; users changed - -configure.in - - test for <strings.h> - -config.h.in - - add #undef HAVE_STRINGS_H - -bashansi.h - - change like recommended in autoconf manual - - 9/11 - ---- -[a date which will live in infamy. prayers for the victims.] - -execute_cmd.c - - don't use an absolute index into abuf in mkfmt, use - sizeof(abuf) to compute last index - -builtins/common.c - - fix read_octal to do a better job of detecting overflow while - iterating through the string - -builtins/umask.def - - change octal-print mode to print 4 digits, like other shells - - cast umask to unsigned long to avoid problems on systems where - it's wider than an int (POSIX doesn't guarantee that mode_t is - no wider than an int, but real-world systems use int) - -builtins/printf.def - - mklong can never return NULL (it uses xrealloc), so the mainline - doesn't need to check for NULL returns - - new function, getldouble (long double *), to get long doubles - - mklong now takes a `char *' as its second argument, the modifier(s) - to use - - changed use of `modchar' to handle more than a single modifier - character - - changed to handle `long double' and `L' formats better, rather - than discarding long double information - - since printf now follows the POSIX.2 rules for conversion errors, - we can dispense with the status returns from the get* functions - - make the get* functions as similar in structure as possible, - removing type casts, etc. - -lib/sh/timeval.c,execute_cmd.c - - change some instances of `long' to `time_t', for systems where - a time_t is bigger than a long - -jobs.c - - include "posixtime.h" instead of <sys/time.h> - -config.h.in - - add defines for HAVE_DECL_CONFSTR, HAVE_DECL_STRTOLD, - HAVE_DECL_SBRK, HAVE_DECL_PRINTF - - remove defines for SBRK_DECLARED and PRINTF_DECLARED - - add _GNU_SOURCE define - -configure.in - - add AC_CHECK_DECLS for strtold, confstr, sbrk, printf - - remove call to BASH_FUNC_SBRK_DECLARED - - remove call to BASH_FUNC_PRINTF - -xmalloc.c, lib/malloc/malloc.c - - change check of SBRK_DECLARED to HAVE_SBRK_DECL - -print_cmd.c - - change PRINTF_DECLARED to HAVE_DECL_PRINTF - -builtins/evalstring.c, builtins/common.h - - parse_and_execute now takes a `const char *' as its second argument - -input.h,parse.y - - with_input_from_* functions now take a `const char *' as their - second argument - - init_yy_io now takes a `const char *' as its fourth argument - -parse.y,externs.h - - parse_string_to_word_list now takes a `const char *' as its second - argument - -tests/builtins.right - - change output to account for extra digit in umask output - -pcomplib.c - - free_progcomp now takes a PTR_T argument - -builtins/bashgetopt.h - - include <stdc.h> - - add prototypes to extern declarations - -builtins/shopt.def - - add prototypes to static function declarations - -builtins/{fc,umask,wait}.def, builtins/{bashgetopt,common}.c - - include <ctype.h> for isdigit macro (referenced by `digit(x)') - -lib/readline/complete.c - - added more static function declarations with prototypes - - 9/12 - ---- -lib/sh/tmpfile.c - - use `^' instead of `*' in sh_mktmpname to make filenames a bit - more random - -include/stdc.h,lib/readline/rldstdc.h - - add __attribute__ definition - -builtins/common.h - - add printf __attribute__ to declaration of builtin_error - -error.h - - add printf __attribute__ to declaration of programming_error, - report_error, parser_error, fatal_error, sys_error, internal_error, - internal_warning - -lib/readline/readline.h - - add printf __attribute__ to declaration of rl_message - -pcomplete.c - - add printf __attribute__ to declaration of debug_printf - -print_cmd.c - - add printf __attribute__ to declarations of cprintf, xprintf - -include/chartypes.h - - new file, includes <ctype.h> and defines macros that check for - safe (ascii) arguments before calling the regular ctype macros - -{alias,bashline,execute_cmd,expr,findcmd,general,locale,mksyntax,stringlib,subst,variables}.c -parse.y -builtins/{bashgetopt,common}.c -builtins/{fc,printf,umask,wait}.def -lib/glob/strmatch.c -lib/sh/{oslib,pathcanon,pathphys,snprintf,strcasecmp,strindex,stringvec,strtod,strtol,strtrans}.c -examples/loadables/{head,sleep}.c - - include "chartypes.h" or <chartypes.h> instead of <ctype.h> - -Makefile.in,{builtins,lib/{glob,sh}}/Makefile.in - - update dependencies to include chartypes.h - -lib/sh/inet_aton.c - - use `unsigned char' instead of `char' to pass to ctype.h functions - -lib/sh/netopen.c - - check for '0' <= host[0] <= '9' in _getaddr instead of using - isdigit - -subst.c,lib/sh/shquote.c - - change array subscripts into sh_syntaxtab from `char' to - `unsigned char' - -{alias,bashline,execute_cmd,expr,general,subst}.c, parse.y -builtins/{fc,printf,umask,wait}.def builtins/{bashgetopt,common}.c -lib/sh/{pathcanon,pathphys,snprintf,strcasecmp,strindex,strtod,strtol,strtrans}.c -examples/loadables/{head,sleep}.c - - change to use some of the new macros in chartypes.h - - remove old local macro definitions now provided by chartypes.h - -general.h - - remove definition of isletter, ISOCTAL, digit, digit_value - - change legal_variable_starter and legal_variable_char to use - chartypes.h macros - - change ABSPATH to use chartypes.h macros - -lib/readline/util.c - - change to use Paul Eggert's FUNCTION_FOR_MACRO define to define - function replacements for macros in chardefs.h - -lib/readline/chardefs.h - - added some of the same macros as in chartypes.h - - change _rl_lowercase_p, _rl_uppercase_p, _rl_digit_p, - _rl_to_upper, _rl_to_lower to use new IS* macros - - added _rl_isident macro from vi_mode.c:isident - -lib/readline/{bind,complete,nls}.c - - change to use some of the new macros from chardefs.h - -lib/readline/vi_mode.c - - isident -> _rl_isident - - remove local defines of macros in chardefs.h - -lib/sh/strtol.c - - updated to new version, modified from glibc 2.2.4 and sh-utils-2.0. - This one can do strtoll and strtoull, if necessary - - 9/13 - ---- -builtins/ulimit.def - - changed get_limit so it retrieves both hard and soft limits - instead of one or the other - - changed callers of get_limit - - changed getmaxvm to take soft limit, hard limit as arguments - - changed getmaxuprc to just take a single argument, the value - - changed calls to printone() to pass soft limit or hard limit - depending on `mode' instead of using old current_limit variable - - moved check for out-of-range limits in ulimit_internal into the - block that converts a string argument to a value of type rlim_t - - changed RESOURCE_LIMITS struct to break the description into a - description string and separate scale factor string - - changed print_all_limits to print a single error message if - get_limit fails, including limits[i].description now that the - scale factor has been removed from the description string - - removed DESCFMT define, since it's now used only in printone() - - changed printone to print the option character associated with a - particular limit if we're printing multiple limits - - changed calls to builtin_error to print the description associated - with a limit if setting or getting the limit fails - - added support for new POSIX 1003.1-200x rlim_t values: - RLIM_SAVED_CUR and RLIM_SAVED_MAX, which expand to the current - soft and hard limits, whatever they are - - changed printone to print `hard' or `soft' if the current limit is - RLIM_SAVED_MAX or RLIM_SAVED_CUR, respectively - - changed ulimit_internal to handle new `hard' and `soft' arguments - - changed help text do describe the special limit arguments `hard', - `soft', and `unlimited' - -doc/{bash.1,bashref.texi} - - documented new `hard' and `soft' limit arguments to `ulimit' - -hashlib.[ch] - - find_hash_item now takes a `const char *' is its first argument - - hash_string now takes a `const char *' is its first argument - - remove_hash_item now takes a `const char *' as its first argument - -pcomplib.c - - removed cast from first argument to find_hash_item in find_compspec - -general.[ch] - - absolute_program now takes a `const char *' as its argument - - absolute_pathname now takes a `const char *' as its argument - -lib/glob/glob.[ch] - - glob_pattern_p now takes a `const char *' as its argument - -bashline.c - - removed cast from first argument to absolute_program in - command_word_completion_function - - removed cast from first argument to glob_pattern_p in - attempt_shell_completion - -findcmd.[ch] - - find_absolute_program, find_user_command, find_path_file, - search_for_command, user_command_matches now take a - `const char *' as their first argument - - file_status, executable_file, is_directory, executable_or_directory - now take a `const char *' as their argument - - _find_user_command_internal, find_user_command_internal, - find_user_command_in_path - -lib/sh/makepath.c, externs.h - - changed sh_makepath so it takes `const char *' for its first - two arguments - -hashcmd.[ch] - - find_hashed_filename now takes a `const char *' as its first arg - - remove_hashed_filename now takes a `const char *' as its first arg - -variables.[ch] - - new_shell_variable, var_lookup, shell_var_from_env_string, - find_name_in_env_array, bind_function, makunbound, - bind_name_in_env_array, bind_tempenv_variable, bind_variable - now take a `const char *' as their first arg - - find_function, make_new_variable, find_tempenv_variable, - find_variable_internal, find_variable, set_func_read_only, - set_func_auto_export, all_variables_matching_prefix, assign_in_env, - assignment, kill_local_variable, make_local_variable, unbind_variable - now take a `const char *' as their arg - - mk_env_string now takes `const char *' arguments - -arrayfunc.[ch] - - skipsubscript now takes a `const char *' as its argument - - 9/17 - ---- -lib/readline/complete.c - - attempt to preserve case of what the user typed in - compute_lcd_of_matches if we're ignoring case in completion - -builtins/{let,pushd}.def,{execute_cmd,expr}.c - - change some 0L constants to 0 and let the compiler sort it out - - 9/18 - ---- -lib/malloc/alloca.c - - alloca now takes a `size_t' argument - -include/memalloc.h - - if we're providing an extern function declaration for alloca, - use `void *' and prototype if __STDC__ is defined - - if HAVE_ALLOCA_H is defined, but C_ALLOCA is defined, don't - define HAVE_ALLOCA - - 9/19 - ---- -subst.c - - do_assignment_internal, do_assignment, and do_assignment_no_expand - now take a `const char *' as their first argument - -general.h - - a `sh_assign_func_t' is now a function taking a `const char *' and - returning int - -hashcmd.c - - free_filename_data now takes a `PTR_T' argument to agree with the - typedef for `sh_free_func_t' - -lib/sh/snprintf.c - - use TYPE_MAXIMUM define like strtol.c instead of huge constants - - 9/20 - ---- -lib/sh/snprintf.c - - don't bother to compile the bulk of the body unless HAVE_SNPRINTF - or HAVE_ASPRINTF is not defined - - 9/24 - ---- -flags.c - - ignore `set -n' if the shell was started interactively - -lib/readline/readline.c - - initialize readline_echoing_p to 0; let the terminal-specific code - in rltty.c set it appropriately - -lib/malloc/malloc.c - - changed internal_memalign() slightly to avoid compiler warnings about - negating an unsigned variable (-alignment -> (~alignment + 1)) - - 9/27 - ---- -lib/readline/readline.c - - changed rl_newline to set _rl_history_saved_point appropriately - for the {previous,next}_history code - -lib/readline/rlprivate.h - - extern declaration for _rl_history_preserve_point - -lib/readline/bind.c - - new bindable variable, `history-preserve-point', sets value of - _rl_history_preserve_point - - 10/1 - ---- -lib/malloc/table.c - - new file, with a map of allocated (and freed) memory for debugging - multiple frees, etc. Indexed by hash on values returned by - malloc(); holds size, file and line number info for last alloc or - free and a couple of statistics pointers - -lib/malloc/malloc.c - - a few cleanups; added calls for registering allocations and frees - if MALLOC_REGISTER is defined - - replaced MALLOC_RETURN with explicit MALLOC_NOTRACE define - - reordered fields in `struct...minfo' in `union mhead' to restore - eight-byte alignment - - added explicit checks for underflow in free and realloc since - checking mh_magic2 is not sufficient to detect everything (it's - no longer the last field in the struct, and thus not the bytes - immediately preceding what's returned to the user) - - new function, xbotch, for printing file and line number info for - the failed assertion before calling botch() (programming_error()) - -configure.in - - replaced call to BASH_C_LONG_LONG with call to - AC_CHECK_TYPES([long long]) - - moved the C compiler tests before the tests for various - system types, so we can know whether we have `long long' - before testing for 64-bit types - - if we have `long long', check for sizeof(long long) and save value - -aclocal.m4 - - changed BASH_TYPE_BITS64_T to check `long long' before `long', but - after `double' - - 10/2 - ---- -lib/malloc/malloc.c - - made malloc and realloc both agree on the rounding for a request of - size N (round up to nearest multiple of 8 after adjusting for - malloc overhead); uses new ALLOCATED_BYTES macro - - realloc and free now use new IN_BUCKET macro for underflow checks - -execute_cmd.c - - fixed time_command() to use `time_t' instead of `long' to hold - time stamps - -lib/sh/clock.c - - clock_t_to_secs now takes a `time_t *' second argument - - fixed print_clock_t to call clock_t_to_secs with right arguments - -lib/sh/timeval.c - - fixed print_timeval to make `minutes' a `long' and make its - structure identical to print_clock_t - -redir.c - - changed redirection_error to check for EBADF and use the file - descriptor being redirected from in the error message if it - is >= 0 - -Makefile.in - - changed release status to `beta1' - -lib/glob/collsyms.h - - added a few ASCII symbols to the posix_collsyms array - - 10/3 - ---- -aclocal.m4 - - fixed typo in BASH_TYPE_BITS64_T - -configure.in - - added check for unsigned chars with AC_C_CHAR_UNSIGNED - -config.h.in - - added PROTOTYPES and __CHAR_UNSIGNED__ #defines - -general.h - - if CHAR_MAX is not define by <limits.h>, provide a definition - -builtins/printf.def - - change tescape() to mask \0 and \x escape sequences with 0xFF - - change tescape() to process at most two hex digits after a `\x' - -lib/sh/strtrans.c - - change strtrans() to mask \0 and \x escape sequences with 0xFF - - change strtrans() to process at most two hex digits after a `\x'. - This affects `echo -e' and $'...' processing - -lib/readline/bind.c - - changed rl_translate_keyseq() to process at most two hex digits - after a `\x' - -lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1 - - changed documentation for key binding escape sequences to specify - that at most two hex digits after \x are translated - - changed documentation for key binding to specify that the result - of \nnn or \xhh escapes is an eight-bit value, not just ASCII - -doc/{bash.1,bashref.texi} - - changed documentation of $'...' to specify that at most two hex - digits after \x are translated - - changed `echo' documentation to specify that at most two hex - digits after \x are translated - - changed documentation for `echo' and $'...' to specify that the - result of \nnn or \xhh escapes is an eight-bit value, not just ASCII - - 10/4 - ---- -lib/malloc/malloc.c - - changed interface for xbotch to pass memory address and error code - as two additional arguments - - call mregister_describe_mem from xbotch to get the last allocation - or free before the botch - -configure.in - - call AC_CHECK_DECLS([strsignal]) - -config.h.in - - add HAVE_DECL_STRSIGNAL - -siglist.h - - make declaration of strsignal() dependent on !HAVE_DECL_STRSIGNAL - - 10/5 - ---- -support/texi2html - - upgraded to version 1.64 - - 10/9 - ---- -aclocal.m4 - - added check for `long long' to BASH_TYPE_PTRDIFF_T - -configure.in - - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ - -aclocal.m4 - - replaced body of BASH_STRUCT_TERMIOS_LDISC with call to - AC_CHECK_MEMBER(struct termios.c_line, ...) - - replaced body of BASH_STRUCT_TERMIO_LDISC with call to - AC_CHECK_MEMBER(struct termios.c_line, ...) - -[bash-2.05a-beta1 frozen] - - 10/10 - ----- -lib/sh/snprintf.c - - fixed exponent() to not smash the trailing zeros in the fraction - when using %g or %G with an `alternate form' - - fixed exponent() to handle the optional precision with %g and %G - correctly (number of significant digits before the exponent) - - 10/11 - ----- -expr.c - - fixed strlong() to correct the values of `@' and `_' when - translating base-64 constants (64#@ == 62 and 64#_ == 64), for - compatibility with ksh - -lib/sh/itos.c - - added a slightly more flexible fmtlong() function that takes a - base argument and flags (for future use) - - rewrote itos and inttostr in terms of fmtlong - -lib/sh/fmtulong.c - - new file, converts unsigned long to string. hooks for `unsigned - long long' in the future. unused as yet - - 10/15 - ----- -lib/readline/rltty.c - - change the SET_SPECIAL macro to avoid possible (but highly - unlikely) negative array subscripts - -error.h - - add __attribute__ to extern declaration of itrace (even though the - function isn't defined in released versions of bash) - -bashansi.h - - include <strings.h> if HAVE_STRINGS_H is defined, to get any extra - function declarations provided therein - -copy_cmd.c - - fix typo in forward declaration for copy_arith_for_command - -lib/malloc/stats.c - - make the accumulators in _print_malloc_stats be `unsigned long' - instead of `int' - -externs.h, sig.h - - add `__noreturn__' gcc attribute to exit_shell and jump_to_top_level - declarations - -lib/sh/mailstat.c, support/bashversion.c - - include <bashansi.h> for some string function declarations - -lib/malloc/shmalloc.h - - added extern declarations of functions that do malloc debugging - -lib/readline/{isearch,readline,vi_mode}.c - - make sure we index into _rl_keymap with a non-negative index - -parse.y - - make sure we index into sh_syntaxtab with a non-negative index - -lib/readline/vi_mode.c - - bound the vi_mark_chars array with the number of characters between - 'a' and 'z' rather than using a fixed amount - - don't use _rl_lowercase_p when deciding whether the char read by - rl_vi_set_mark is a valid mark; just use 'a' <= char <= 'z' - -lib/readline/chardefs.h - - conditionally include memory.h and strings.h as in general.h - - replace ISASCII with IN_CTYPE_DOMAIN like other GNU software - - add defines for ISPRINT(c), ISLOWER(c) and ISUPPER(c) - - fix defines for _rl_lowercase_p, _rl_uppercase_p, _rl_digit_p, - _rl_pure_alphabetic, ALPHABETIC, _rl_to_upper, _rl_to_lower, - and _rl_isident to work on systems with signed chars - -include/chartypes.h - - replace ISASCII with IN_CTYPE_DOMAIN like other GNU software - -lib/sh/{strcasecmp,strtod,strtol}.c - - don't pass possibly-negative characters to tolower() or toupper() - -lib/glob/strmatch.c - - don't bother testing for isupper in FOLD; rely on TOLOWER macro - from <chartypes.h> to do it - - don't use local definitions of isblank, et al.; rely on macros - from <chartypes.h> - -lib/readline/{display,readline}.c, mksyntax.c - - use new ISPRINT macro instead of isprint() - -builtins/{kill.def,mkbuiltins.c},{error,execute_cmd,jobs,nojobs,subst}.c - - don't assume that a pid_t fits into an int for printing and other - uses - -variables.[ch] - - the unused put_gnu_argv_flags_into_env now takes a `long' pid - argument - -configure.in, config.h.in - - call AC_STRUCT_ST_BLOCKS, define HAVE_STRUCT_STAT_ST_BLOCKS if found - - check for strtoull(), define HAVE_STRTOULL if found - - check for uintmax_t, define to `unsigned long' if not found - -lib/sh/mailstat.c - - don't use st_blocks member of struct stat unless - HAVE_STRUCT_STAT_ST_BLOCKS is defined; otherwise use the st_nlink - field to return the total number of messages in a maildir-style - mail directory - -general.h,{alias,expr,general,subst,variables}.c -builtins/{printf,read}.def -lib/readline/{bind,complete,nls}.c -lib/sh/{pathcanon,pathphys,shquote,snprintf,strindex,strtod,strtol,strtrans}.c - - cast args to ctype macros to unsigned char for systems with signed - chars; other fixes for signed chars - -lib/sh/{fmtullong,strtoull.c} - - new files, more support for `long long' - -Makefile.in, lib/sh/Makefile.in - - make fmtullong.o and strtoull.o part of libsh - -lib/sh/itos.c - - remove local copy of fmtlong; use fmtulong instead - - new functions: uitos, uinttostr work on `unsigned long' - -lib/sh/snprintf.c - - fixes to make `unsigned long long' work (%llu) - - fixes to make unsigned formats not print the sign when given - an unsigned long that is greater than LONG_MAX - -externs.h - - extern declarations for fmtulong, fmtulloing, strtoull - - extern declarations for uitos, uinttostr - - 10/16 - ----- -configure.in - - move header checks before function checks - - move c compiler tests before header checks - - check for <inttypes.h> with BASH_HEADER_INTTYPES - - change type checks for intmax_t, uintmax_t to not attempt to - include <stdint.h> - - check for strtoimax, strtoumax, strtoll, strtol, strtoull, strtoul - with BASH_CHECK_DECL (for declarations in header files) and - AC_REPLACE_FUNCS (for availability and LIBOBJS substitution) - - remove check for have_long_long around sizeof check for long long - (since autoconf will give it a size of 0 if the type isn't found) - -config.h.in - - add a define for HAVE_INTTYPES_H - - add a define for HAVE_UNSIGNED_LONG_LONG - - add defines for HAVE_STRTOIMAX, HAVE_STRTOUMAX, HAVE_STRTOLL - -aclocal.m4 - - new func, BASH_HEADER_INTTYPES, which just calls AC_CHECK_HEADERS - on <inttypes.h>; separate so it can be AC_REQUIREd - - AC_REQUIRE([BASH_HEADER_INTTYPES]) in BASH_CHECK_TYPE - - include <inttypes.h> in BASH_CHECK_TYPE if HAVE_INTTYPES_H is - defined - - change AC_DEFINE to AC_DEFINE_UNQUOTED in BASH_CHECK_TYPE - - new `long long' checking macros: BASH_TYPE_LONG_LONG and - BASH_TYPE_UNSIGNED_LONG_LONG - - new BASH_CHECK_DECL - -lib/sh/{strto[iu]max,strtoll}.c, lib/sh/Makefile.in, Makefile.in - - new files - -externs.h - - extern declarations for strtoll, strtoimax, strtoumax - -lib/malloc/alloca.c - - include <bashtypes.h> for size_t - -builtins/printf.def - - new functions: getllong, getullong, getintmax, getuintmax; return - long long, unsigned long long, intmax_t, uintmax_t respectively - - builtin printf now handles `ll' and `j' length modifiers directly - -lib/sh/Makefile.in - - use LIBOBJS to decide whether or not the strto* functions are - needed - - 10/17 - ----- -configure.in - - call AC_REPLACE_FUNCS(rename) - - move getcwd, strpbrk, strcasecmp, strerror, strtod - from AC_CHECK_FUNCS to AC_REPLACE_FUNCS - - only call BASH_FUNC_GETCWD if $ac_func_getcwd == "yes" - - call BASH_CHECK_SYS_SIGLIST - - if we don't have vprintf but have _doprnt, call AC_LIBOBJ(vprint) - -lib/sh/Makefile.in - - remove rename, getcwd, inet_aton, strpbrk, strcasecmp, strerror, - strtod, vprint from OBJECTS; picked up from LIBOBJS - -aclocal.m4 - - change BASH_FUNC_GETCWD to call AC_LIBOBJ(getcwd) if the libc - getcwd(3) calls popen(3) - - change BASH_FUNC_INET_ATON to call AC_LIBOBJ(inet_aton) if it's - not found in libc or as a #define even with the special includes - - BASH_KERNEL_RLIMIT_CHECK -> BASH_CHECK_KERNEL_RLIMIT - - BASH_DEFAULT_MAILDIR -> BASH_SYS_DEFAULT_MAILDIR - - BASH_JOB_CONTROL_MISSING -> BASH_SYS_JOB_CONTROL_MISSING - - BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS - - BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE - - BASH_DUP2_CLOEXEC_CHECK -> BASH_FUNC_DUP2_CLOEXEC_CHECK - - BASH_PGRP_SYNC -> BASH_SYS_PGRP_SYNC - - BASH_RLIMIT_TYPE -> BASH_TYPE_RLIMIT - - BASH_FUNC_PRINTF -> BASH_DECL_PRINTF - - BASH_FUNC_SBRK_DECLARED -> BASH_DECL_SBRK - - BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T - - BASH_CHECK_SOCKLIB -> BASH_CHECK_LIB_SOCKET - - new macro, BASH_CHECK_SYS_SIGLIST, encapsulates all the checks for - sys_siglist, _sys_siglist, and strsignal(), sets SIGLIST_O to - siglist.o if appropriate - -Makefile.in - - use SIGLIST_O variable to decide whether or not we need siglist.o - -{execute_cmd,subst}.c - - change a couple of instances of ISDIGIT to DIGIT, where we really, - really only want ascii digits - -ansi_stdlib.h - - don't need a declaration for atol() - - 10/18 - ----- - -aclocal.m4 - - new macro, BASH_FUNC_PRINTF_A_FORMAT, checks for printf support - for %a, %A conversion specifiers, defines HAVE_PRINTF_A_FORMAT - if successful - -configure.in - - call AC_CHECK_FUNCS for isascii - - call BASH_FUNC_PRINTF_A_FORMAT - -config.h.in - - add a define for HAVE_ISASCII - - add a define for HAVE_PRINTF_A_FORMAT - -lib/sh/snprintf.c - - for long double output, fall back to sprintf using ldfallback() - function for floating point formats - - support %a, %A using dfallback() or ldfallback() if - HAVE_PRINTF_A_FORMAT is defined - - fix bug in vasprintf that returned wrong value in its first - argument if the buffer holding the result string got reallocated - - fixed PUT_CHAR macro to increment the counter even if we've - exceeded the buffer size, for the return value from - vsnprintf/snprintf - - fix vsnprintf_internal to not use counter < length as a loop - condition, but always process the entire format string (for - the return value from vsnprintf/snprintf) - -builtins/printf.def - - support %a, %A if HAVE_PRINTF_A_FORMAT is defined - -include/typemax.h - - new file, with the TYPE_MAXIMUM stuff that's duplicated in several - files in lib/sh - -lib/sh/{fmtulong,strtol,snprintf}.c - - include <typemax.h> instead of having the definitions in each file - -lib/sh/Makefile.in - - updated dependencies for typemax.h - - 10/22 - ----- -configure.in - - call AC_CHECK_FUNCS on ctype.h functions/macros that bash redefines - in chartypes.h - -config.h.in - - defines for HAVE_IS{ASCII,BLANK,GRAPH,PRINT,SPACE,XDIGIT} - -include/chartypes.h, lib/glob/strmatch.c, lib/readline/chardefs.h - - don't redefine some is* ctype macros/functions if HAVE_ISXXX is - defined (meaning that an appropriate function, but not a macro, - exists) - -lib/sh/strtrans.c - - new function, ansic_shouldquote, returns 1 if argument string - contains non-printing chars that should be quoted with $'...' - -externs.h - - new declaration for ansic_shouldquote() - -variables.c - - change print_var_value to ansi C quote the string if we're not in - posix mode and the variable's value contains non-printing chars, - to use the regular shell single quoting if the value contains - shell meta-characters, and to just output the string otherwise - -lib/sh/shquote.c - - add `break' to `case '~':' to avoid fallthrough and extra test - -doc/bashref.texi - - note that in POSIX mode, `set' displays variable values that - include nonprinting characters without quoting, unless they - contain shell metacharacters - -builtins/printf.def, lib/sh/snprintf.c - - handle `F' conversion specifier as equivalent to 'f' - -parse.y, {nojobs,variables}.c - - a couple of cleanups for when building a minimal configuration - -nojobs.c - - new function: stop_making_children(), just sets - already_making_children to 0 (like stop_pipeline) - -subst.c - - call stop_making_children from subst.c:command_substitute if - JOB_CONTROL is not defined. This fixes the bug where the wrong - process is waited for (and its status returned) when using - command substitution in a null command in a shell function - -builtins/printf.def - - new variable `tw' used to keep track of the total number of - characters written by a single call to `printf' -- to be - used for the `%n' conversion, which will be added later. It - gets reset each time we reuse the format string, which is what - ksh93 seems to do - - 10/23 - ----- -variables.c - - new function, bind_var_to_int (char *var, long val) - -variables.h - - extern declaration for bind_var_to_int - -lib/sh/netopen.c - - use gai_strerror() for error messages when getaddrinfo() fails - - use PF_INET if DEBUG is defined, since IPv6 doesn't work for me - -Makefile.in - - pass DEBUG=${DEBUG} down to makes in some subdirectories - -{builtins,lib/{glob,sh}}/Makefile.in - - append ${DEBUG} to LOCAL_CFLAGS value, passed by top-level Makefile - -builtins/printf.def - - added support for %n format conversion char (number of chars printed - so far from current format string) - - 10/24 - ----- -variables.c - - if posixly_correct is set, the default value of $MAILCHECK is 600 - - use legal_number instead of atoi in adjust_shell_level - - treat non-numeric assignments to SECONDS as 0 in assign_seconds - - new function, init_funcname_var; sets FUNCNAME as a dynamic variable - if it's not set in the initial environment - - new function, init_groups_var; sets GROUPS as a dynamic array - variable if it's not set in the initial environment - - new function, init_dirstack_var; sets DIRSTACK as a dynamic array - variable if it's not set in the initial environment - - new function, init_seconds_var; sets SECONDS as a dynamic - variable using any valid integer value in the initial environment - as the initial value, as if an assignment had been performed - - call init_funcname_var, init_groups_var, init_dirstack_var, - init_seconds_var from initialize_dynamic_variables - - non-numeric values assigned to LINENO are treated as 0 - - change initialize_shell_variables to not auto-export PATH or TERM - - change set_home_var to not auto-export HOME - - change set_shell_var to not auto-export SHELL - - broke the code that sets HOSTNAME, HOSTTYPE, MACHTYPE, OSTYPE - out into a separate function, set_machine_vars; none of those - variables are auto-exported - - bash no longer un-exports SSH_CLIENT or SSH2_CLIENT - -shell.c - - changed isnetconn() to check SSH_CLIENT and SSH2_CLIENT only if - SSH_SOURCE_BASHRC is defined in config-top.h - -config-top.h - - added a commented-out definition for SSH_SOURCE_BASHRC - - 10/25 - ----- - -Makefile.in - - changed RELSTATUS to `rc1' (release candidate 1) - - 10/29 - ----- -locale.c - - fixed an `=' vs. `==' typo in set_locale_var when parsing - LC_NUMERIC - -doc/{bash.1,bashref.texi} - - document what bash does with $POSIXLY_CORRECT - -doc/builtins.1 - - some updates - -builtins/psize.sh - - some mktemp(1) changes - -lib/readline/readline.c - - change rl_backward to check for rl_point < 0 and reset to 0 if so - -lib/readline/util.c - - don't compile in _rl_strpbrk if HAVE_STRPBRK is defined - -lib/readline/rlprivate.h - - remove extern declaration of _rl_strpbrk - -lib/readline/rldefs.h - - #define _rl_strpbrk as strpbrk if HAVE_STRPBRK is define, otherwise - add extern declaration of _rl_strpbrk from rlprivate.h - -{mailcheck,shell,variables}.c - - make sure to include posixtime.h to get any prototype for time(3) - in scope - -{array,eval,execute_cmd,mksyntax,subst}.c, parse.y -builtins/common.c -lib/sh/pathcanon.c - - a few changes as the result of `gcc -Wall' patches from solar - designer - -builtins/read.def, parse.y - - change some calls to free() to xfree() - -builtins/set.def - - make sure unset_builtin() resets unset_array to 0 each time through - the loop, because it's set (and used) depending on the current - argument - -shell.h - - new define, USE_VAR, to force the compiler to not put a particular - variable in a register -- helpful if registers are not restored - by setjmp/longjmp - -builtins/{evalfile.c,{read,wait}.def}, {eval,execute_cmd,shell,test}.c - - use USE_VAR for some variables - -subst.c - - fixed a case in expand_word_internal where a NULL pointer could - have been passed to free() (though free() should ignore it) - - fixed a case at the end of expand_word_internal where LIST could - have been used uninitialized (it makes gcc happy, though it - doesn't happen in practice) - -test.c - - give test_syntax_error(), beyond(), and integer_expected_error() - the `__noreturn__' attribute for gcc - -unwind_prot.c - - in clear_unwind_protect_list(), convert `flags' to `long' (via - assignment to a `long' variable) before casting to `char *', in - case pointers and longs are 64 bits and ints are 32 (makes no - difference on 32-bit machines) - - 10/30 - ----- -print_cmd.c - - fixed cprintf to avoid gcc warning about assigning const pointer - to non-const (discarding type qualifier) - -{make_cmd,pcomplete,test}.c,parse.y - - some minor changes to shut up gcc warnings - -lib/sh/tmpfile.c - - fixed sh_mktmpfp to avoid file descriptor leaks in the case that - sh_mktmpfd succeeds but fdopen fails for some reason - - change sh_mktmpfd to use the same scheme for computing `filenum' - as sh_mktmpname - - change get_sys_tmpdir to prefer P_tmpdir if P_tmpdir is defined - - changed sh_mktmpname and sh_mktmpfd to avoid trying to assign to - `nameroot' if `nameroot == 0' (duh) - - add code to sh_mktmpfd to use mkstemp(3) if USE_MKSTEMP is defined - - add code to sh_mktmpname to use mktemp(3) if USE_MKTEMP is defined - -support/{fixlinks,mkclone} - - use mktemp if it's available for the symlink test - - use $TMPDIR instead of hardcoding /tmp; default to /tmp - - use a better filename for the symlink test instead of `z' - -support/bashbug.sh - - more changes inspired by a patch from solar designer - -lib/malloc/Makefile.in - - new target `alloca', which builds libmalloc.a with alloca.o only - (for systems without alloca that are configured --without-bash-malloc) - -configure.in - - if we don't have a working alloca and are not configured to build - the bash malloc library, make a malloc library containing only - alloca.o - -aclocal.m4 - - slight change to RL_LIB_READLINE_VERSION to deal with minor version - numbers with a letter appended (like 4.2a) - - 10/31 - ----- -doc/{bash.1,bashref.texi} - - slight change to note that only interactive shells resend a SIGHUP - to all jobs before exiting - -externs.h - - declare strto[ui]max only if NEED_STRTOIMAX_DECL is defined. This - keeps picky compilers from choking because intmax_t is not defined - (MacOS X 10.1) - -builtins/printf.def - - #define NEED_STRTOIMAX_DECL before including shell.h - - 11/1 - ---- -general.c - - check in bash_tilde_expand() for an unquoted tilde-prefix; don't - bother passing the string to tilde_expand unless the prefix is - unquoted - -shell.c - - fix a problem with $LINENO when executing commands supplied with - the -c invocation option when ONESHOT is defined - -[bash-2.05a-rc1 frozen] - -builtins/printf.def - - fix the %n conversion to require that the variable name supplied - be a valid shell identifier - -variables.c - - improve random number generator slightly by using the upper 16 - bits of the running random number instead of the lower 16, which - are incrementally more random - - 11/2 - ---- -configure.in - - if RL_INCLUDEDIR ends up being /usr/include, don't put - -I$(RL_INCLUDEDIR) into CFLAGS - - 11/5 - ---- -doc/{bash.1,bashref.texi} - - correct description of POSIXLY_CORRECT to note that the shell enters - posix mode *before* the startup files are read if POSIXLY_CORRECT - is in the initial environment - -variables.c - - fix function prologues for init_dirstack_var and init_groups_var - to agree with caller (no arguments) - -jobs.c - - fix forward function declarations for pipe_read and pipe_close - -subst.c - - removed `inline' attribute from skip_double_quoted because it can - potentially be called recursively - -bashline.c - - quick fix to bashline.c:attempt_shell_completion programmable - completion code to just punt if the end of the command word found - by find_cmd_end is <= the start found by find_cmd_start (the bug - is probably in find_cmd_start -- fix later) - -pcomplete.c - - fix gen_matches_from_itemlist to return if the stringlist is null - after any cleaning or initialization, before trying to use it - - fix GEN_COMPS to only bother to try to append the STRINGLIST - returned by gen_matches_from_itemlist to `glist' if it's non-NULL - -lib/sh/stringlist.c - - make copy_stringlist return NULL if the STRINGLIST * passed as an - argument is NULL - - make append_stringlist call copy_stringlist only if M2 is non-NULL; - otherwise just return NULL if m1 is NULL - - make word_list_to_stringlist return 0 immediately if the passed - LIST argument is NULL - - make realloc_stringlist call alloc_stringlist if the passed - STRINGLIST argument (`sl') is 0, just like realloc calls malloc - -subst.c - - in skip_to_delim(), if we have an unclosed ${, and it's at the end - of the string (string[i] == '{', string[i+1] == '{' and - string[i+2] == 0, return si (i +2) immediately without bothering - to call extract_dollar_brace_string or extract_delimited_string - - in skip_to_delim(), if string[i] is 0 after a call to - extract_dollar_brace_string or extract_delimited_string (meaning we - have an unclosed ${ or other expansion, return i immediately without - doing a `continue' (which will increment i past the end of string) - - in split_at_delims, don't increment te by 1 if it's pointing to a - delimiter. this has the effect of skipping the first delimiter - char in a possibly multi-character delimiter, and ignoring - single-char delimiters like `>' - -configure.in - - use AC_CHECK_MEMBERS([struct stat.st_blocks]) instead of a call to - AC_STRUCT_ST_BLOCKS to avoid configure changing LIBOBJS if the test - fails - -general.c - - introduce two new variables: bash_tilde_{prefixes,suffixes}, set - to the additional prefixes and suffixes bash wants to pass to the - tilde expansion code (reserved for post-bash-2.05a fix) - -aclocal.m4 - - add missing `test' in BASH_CHECK_SYS_SIGLIST - - 11/7 - ---- -lib/readline/vi_mode.c - - fix rl_vi_goto_mark to explicitly check that the desired mark is - between 'a' and 'z', since some locales have lowercase letters - outside that range, which could cause a negative subscript - -include/chartypes.h - - remove superfluous `#undef ISASCII' - -lib/sh/strto[iu]max.c - - changes from Paul Eggert to work around buggy compilers and catch - configuration errors at compile time - -aclocal.m4 - - new macro, BASH_C_LONG_DOUBLE, identical to AC_C_LONG_DOUBLE but - with a fix for Irix 5.3 (not called, since I'm not sure it's the - right thing to do -- the C standard allows double and long double - to be the same size) - -lib/sh/snprintf.c - - only try to write the trailing NUL in vsnprintf_internal if - data->length is >= 0, since if it's not, we probably don't have - a buffer - -Makefile.in - - changed RELSTATUS to `release' - - 11/8 - ---- -lib/sh/strtol.c - - make sure chars passed to toupper are cast to unsigned - -unwind_prot.c - - change clear_unwind_protect_list to not require a cast from `int' - to `char *' - -lib/readline/chardefs.h - - make _rl_digit_p succeed only for ascii digits, since that's what - most callers assume - - 11/13 - ----- -doc/bashref.texi - - added `ERR' trap and [-+]O invocation option to section listing - differences from the Bourne shell - - 11/15 - ----- -[bash-2.05a released] - - 11/19 - ----- -include/stdc.h - - new define, INLINE, defined as `inline' for gcc and empty otherwise - -subst.c - - make skip_double_quoted, sub_append_string have INLINE attribute - -trap.c - - use BASH_NSIG as upper limit for signal names in signal_name() - -lib/readline/bind.c - - use RL_COMMENT_BEGIN_DEFAULT in output for rl-comment-begin value - -error.c - - fix sys_error to save value of errno around calls to fprintf - -doc/Makefile.in - - added rules to create PDF files from postscript and dvi input - -MANIFEST.doc - - added {article,bash,bashref,rose94}.pdf - -doc/bash.1 - - rearranged some `.PD 0' and `.TP' directives so man2html will - handle them better (shouldn't affect groff output) - -support/man2html.c - - small fix to handle quoted string arguments to directives like - `.BR' without mangling the output - - 11/20 - ----- -{arrayfunc,variables}.c - - changed calling sequence for dynamic array variable `assign' - functions to (SHELL_VAR *self, char *value, arrayind_t ind) - - changed calling sequence for dynamic variable assign functions - to the same as array variable assign_func. Now this can be - prototyped - -variables.h - - the assign_func member of a `struct variable' is now of type - `sh_var_assign_func_t', which is prototyped - - the dynamic_value member of a `struct variable' is now of type - `sh_var_value_func_t', which is prototyped - -variables.c - - changed to use `sh_var_assign_func_t' and `sh_var_value_func_t' - -builtins/cd.def - - when in posix mode, if the new directory name formed by PWD and - the argument passed by the user cannot be canonicalized, and the - -P option has not been supplied, return failure immediately - - if canonicalization failed, but the fallback to the directory - name specified by the user succeeds, reset the current working - directory - -lib/readline/{input.c,rlprivate.h} - - renamed rl_unget_char to _rl_unget_char; made library global - -lib/readline/{{bind,readline}.c,{keymaps,rlprivate}.h} - - support for `key subsequences'; allows a key sequence and a function - mapped to a subsequence of that key sequence. Primarily to allow - arrow keys to be bound in readline vi insert mode, while preserving - the ESC function to switch to command mode. - -lib/readline/{input.c,rlprivate.h} - - new function, _rl_input_queued(T), does a check with select or - FIONREAD with a timeout of `T' (which is generally 0) - -lib/readline/readline.c - - change _rl_dispatch_subseq to test for input in the queue if we - get ESC while in vi insertion mode if the keymap entry type for - ESC is ISKMAP. If _rl_input_queued returns non-zero, we assume - that an arrow key sequence has been pressed and go ahead with the - subsequence. If it returns zero, we assume that the user pressed - ESC to switch into command mode, and dispatch to that right away. - This avoids forcing the user to press another key before switching - into command mode - - 11/21 - ----- -lib/readline/readline.c - - bind common arrow key sequences in vi insertion keymap - -lib/readline/terminal.c - - bind termcap definition's arrow keys in vi insertion keymap - -lib/readline/bind.c - - check for rl_vi_movement_mode in _rl_bind_if_unbound, so - binding the arrow keys can work - -lib/readline/readline.c - - since _rl_bind_if_unbound does the check of what's currently - bound to the key sequence, the check in bind_arrow_keys_internal - was redundant - - bind_arrow_keys_internal now takes a Keymap argument and handles - saving and restoring _rl_keymap; changed bind_arrow_keys - accordingly - -builtins/fc.def - - fix from Paul Eggert to substitute the nearest history number in - range if an out-of-range value is supplied. POSIX requires this - -lib/sh/pathcanon.c - - fix from Corrina Vinschen for the special `cygdrive' prefix on - Cygwin - -bashhist.c - - split the history adding code into more pieces: - check_history_control (char *line) checks LINE against the value - of HISTCONTROL, returning 1 if LINE should be saved and 0 if not - - check_add_history (char *line) calls check_history_control and - history_should_ignore (line) and saves the line with - bash_add_history if the checks indicate that it should be saved - - maybe_add_history just calls check_add_history to set the value - of first_line_saved - -bashhist.h - - extern declaration for check_add_history() - -shell.c - - don't call load_history() from the interactive shell startup - code if history_lines_this_session is > 0, indicating that we've - already saved some lines in the history and that we probably - don't want to overwrite them - -builtins/history.def - - call check_add_history from push_history, so `history -s xx' - works even when in a compound command whose first line has not - been saved. (Caveat: in a compound command when the first - line has been saved, the line supplied to history -s will become - part of the compound command's history entry. Of course, the - delete_history call could remove the compound command from the - history entirely) - -bashline.c - - use sh_makepath instead of xmalloc/sprintf in - command_word_completion_function - -lib/readline/complete.c - - get_y_or_n now takes an int FOR_PAGER argument; caller changed - If FOR_PAGER is non-zero, get_y_or_n returns appropriate values - for a more-like pager: `newline' or `return' return 2; `q' or - `Q' return 0 - - there is now a mini internal more-like pager for displaying a - list of completions that exceeds the screen height (new function - _rl_internal_pager, called from rl_display_match_list) - - 11/24 - ----- -command.h - - new flag, W_TILDEEXP, says to do tilde expansion on an - assignment word - -execute_cmd.c - - fix_assignment_words now sets W_TILDEEXP for assignment word - arguments to `assignment builtins' - -general.c - - bash_tilde_expand now takes a second argument indicating whether - or not it's being invoked in an `assignment context' - -general.h - - change extern declaration for bash_tilde_expand - -{bashline,execute_cmd,findcmd,general,variables}.c -builtins/evalfile.c -lib/sh/makepath.c - - fix callers of bash_tilde_expand appropriately - -subst.c - - fix callers of bash_tilde_expansion appropriately - - add (currently commented-out) code that would tilde expand assignment - statement arguments to assignment builtins (W_TILDEEXP flag set) - even when the shell is in posix mode - -bashline.c - - fix attempt_shell_completion to turn off - rl_filename_completion_desired when doing command name completion, - so no slash gets appended to the name if there happens to be a - directory with the same name in the current directory - - 11/26 - ----- -lib/readline/rltech.texinfo - - a couple of additions to the rl_stuff_char description - -parse.y - - turn off echo_input_at_read in parse_string_to_word_list, so `set -v' - doesn't give extra lines of output when doing compound array - assignment - -subst.c - - fix split_at_delims to handle skipping over a `\n' if it's a - delimiter (use spctabnl(c) instead of whitespace(c)) - - 11/27 - ----- -support/config.{guess,sub} - - updated (with bash changes) to latest version from gnu.org - -sig.h - - add prototype for set_signal_handler declaration - -builtins/setattr.def - - add prototype to extern declaration of declare_builtin - -builtins/times.def - - add no_options call, since times takes no options - -lib/sh/spell.c - - add prototypes to forward declarations for midist and spdist - -lib/sh/strtrans.c - - add explicit int return type to ansic_shouldquote declaration - -lib/readline/rldefs.h, lib/readline/{macro,readline,util,undo}.c - - move define for SWAP to rldefs.h, removed from various C files - -lib/readline/vi_mode.c - - removed define for exchange(), changed to use SWAP instead - -lib/readline/bind.c - - added some static forward function declarations - - find_boolean_var, find_string_var now take a `const char *' argument - -lib/readline/signals.c - - added static forward declaration for rl_maybe_set_sighandler - -lib/readline/readline.c - - add some common key bindings for the HOME and END keys in - bind_arrow_keys_internal - -lib/readline/terminal.c - - fetch the `@7' termcap string; it's sent by the END key - - attempt to bind the terminal's END key to rl_end_of_line in - bind_termcap_arrow_keys; I don't know why I was using `kH' - instead of `@7' - -doc/builtins.1 - - remove `case', `for', `if', `until', `while' from NAME section; - those are not shell builtins - - 11/28 - ----- -stringlib.c - - new function, find_token_in_alist, takes a token value and an - ALIST argument, and returns the string correspoinding to the - token if found in the alist - -externs.h - - new extern declaration for find_token_in_alist() - -subst.c - - string_list_internal is no longer static - -subst.h - - new extern declaration for string_list_internal() - -parse.y - - new alist array of other tokens returned by read_token which are - not reserved words in word_token_alist[] - - reworked error reporting: new functions print_offending_line, - which prints the line containing the syntax error, - error_token_from_token, which takes the current token and tries to - figure out its textual representation, and error_token_from_text, - which does the old job of finding the bad token by analyzing the - text of shell_input_line at the current index - - report_syntax_error now tries to figure out the token that caused - the syntax error by first looking at current_token and falling - back to the old method of textual analysis if that fails - - report_syntax_error doesn't say the token resulting from the textual - analysis of the input line is an `unexpected token'; it just - says there is a `syntax error near xxx' - - changed conditional command error reporting to use the value - returned by error_token_from_token if it's not null instead of - just using the token value in the message, since current_token - ends up being set to -1, and the text of the message from - report_syntax_error might not be exactly right - - change parse_string_to_word_list to set current_token to the - offending token returned by read_token before calling yyerror() - to make the error reporting do the right thing - -aclocal.m4 - - fixed typo in BASH_CHECK_LIB_TERMCAP - -configure.in - - add check for isinf(3); define HAVE_ISINF_IN_LIBC if found - -config.h.in - - add define for HAVE_ISINF_IN_LIBC - -lib/sh/snprintf.c - - check for Inf and NaN, using isinf and isnan if they're found in - libc - - use the current locale for thousands separator and decimal point - - recognize "'" flag; not implemented yet - - fix for snprintf/vsnprintf with length of 0 and string argument of - 0 with non-zero length - -builtins/read.def - - TMOUT is now the default timeout for `read' (and select) if set, - like ksh93 when reading from the terminal - - edit_line (called by read -e) now just does readline's filename - completion by setting rl_attempted_completion_function to NULL, - since e.g., doing command completion for the first word on the - line wasn't really useful - -execute_cmd.c - - changed select_command to return failure status if select_query - returns NULL, indicating that read_builtin returned - EXECUTION_FAILURE - -doc/{bash.1,bashref.texi} - - documented new TMOUT behavior - - slight change to the description of the test `-ef' option - -doc/bashref.texi - - added item to posix mode section describing failure behavior of - cd when invoked in logical mode and the pathname formed by - combining $PWD and the directory argument does not refer to an - existing directory - - 11/29 - ----- -execute_cmd.c - - fix execute_function to call dispose_function_env after - merge_function_env if the shell is in posix mode (fixes debian - bash bug #117673) - -lib/readline/readline.c - - rl_forward -> rl_forward_char; rl_forward function for compatibility - - rl_backward -> rl_backward_char; rl_forward function for - compatibility - - new functions, rl_forward_byte, rl_backward_byte, for future use - -lib/readline/readline.h - - extern declarations for rl_forward_char, rl_backward_char, - rl_forward_byte, rl_backward_byte - -lib/readline/{emacs_keymap,funmap,vi_keymap,vi_mode - - rl_forward -> rl_forward_char - - rl_backward -> rl_backward_char - -lib/readline/funmap.c - - new bindable names, `backward-byte' and `forward-byte' - -aclocal.m4 - - new function, BASH_CHECK_MULTIBYTE, encapsulates checks for - multibyte code - -config.h.in - - add necessary defines for multibyte include files and functions - -configure.in - - add call to BASH_CHECK_MULTIBYTE - -config-bot.h - - add code to define HANDLE_MULTIBYTE if prerequisites are met - -lib/sh/xstrchr.c - - new file, xstrchr() is strchr(3) that handles multibyte characters - -bashhist.c - - first_line_saved -> current_command_first_line_saved; variable is - now global - -bashhist.h - - extern declaration for current_command_first_line_saved - - 11/30 - ----- -bashhist.c - - break the code that actually calls add_history out of - bash_add_history into a new function, really_add_history; - bash_add_history now calls really_add_history - - check_add_history takes a second `force' argument telling it - whether to call bash_add_history (force == 0) or really_add_history - (force != 0) - -builtins/history.def - - in push_history, call delete_last_history if the current command - has more than one line, the first line was saved, and - command-oriented history is active. This takes care of deleting - the right history element if `history -s' is used within a - compound or multiline command - - in push_history, call check_add_history with second argument of 1 - to skip check of current_command_line_count and add the arguments - to history -s as a single separate history entry - - 12/3 - ---- -lib/readline/complete.c - - append a slash to completed names which are symlinks to directories - if the new variable _rl_complete_mark_symlink_dirs is non-zero - -lib/readline/rlprivate.h - - extern declaration for _rl_complete_mark_symlink_dirs - -lib/readline/bind.c - - new bindable variable, `mark-symlinked-directories', mirrors the - value of _rl_complete_mark_symlink_dirs - -doc/bash.1, lib/readline/doc/{readline.3,rluser.texinfo} - - documented new `mark-symlinked-directories' variable - - 12/4 - ---- -variables.[ch] - - set_pipestatus_array now takes a second argument with the number - of processes in the array - - changed set_pipestatus_array to just modify the value in place if - the existing array has one element and the new array has one - element, and to modify existing values in place if new array has - more elements than existing array - -variables.c, jobs.c - - changed set_pipestatus_array callers - -jobs.c - - moved call to setjstatus() from set_job_status_and_cleanup to - wait_for, since set_job_status_and_cleanup is part of the SIGCHLD - signal handler call path, and race conditions accessing the - PIPESTATUS array will result for things like - - while true; do date; done | cat > /dev/null - - 12/5 - ---- -xmalloc.h - - don't redefine xmalloc, xrealloc, and xfree if DISABLE_MALLOC_WRAPPERS - is #defined - -config.h.in - - #undef for DISABLE_MALLOC_WRAPPERS - -configure.in - - define DISABLE_MALLOC_WRAPPERS if the --with-purify option is - supplied - -lib/malloc/trace.c - - new function, malloc_trace_bin(N), traces allocations and frees - to bucket N (uses the same type of bitmap as `busy') - -lib/malloc/table.c - - fix wraparound search problem in find_entry when searching for a - free entry when the table is full - - 12/6 - ---- -lib/malloc/table.c - - keep an `overflow bucket' around to use when the table is full, - so find_entry always returns a valid pointer when FIND_ALLOC - is set - - new static variable to keep a count of the number of MT_ALLOC - entries in the mem_table - -lib/sh/{oslib,clktck}.c - - if HAVE_LIMITS_H is defined, include <limits.h> - -lib/sh/oslib.c - - new function, getmaxgroups() returns max number of simultaneous - groups - - new function, getmaxchild(), returns max number of simultaneous - user processes - -general.c - - removed forest of #defines for getmaxgroups() - -externs.h - - new extern declaration for getmaxgroups() - - new extern declaration for getmaxchild() - - new extern declaration for isnetconn() - -lib/sh/netconn.c,shell.c - - new file, isnetconn() from shell.c moved here - -Makefile.in, lib/sh/Makefile.in - - necessary changes for netconn.c - -builtins/ulimit.def - - changed getmaxuprc() to just call getmaxchild() and massage the - return value appropriately - -{jobs,nojobs}.c - - use the value returned by getmaxchild() in - mark_dead_jobs_as_notified instead of static CHILD_MAX - -jobs.c - - new function, compact_jobs_list, removes some number of jobs from - the jobs table and reallocates the table, copying the jobs that - are left from the old table to the new. Compaction happens from - the beginning of the list and removes dead jobs, and we make sure - to keep the last CHILD_MAX jobs as POSIX.2 requires - - call compact_jobs_list from stop_pipeline if we're in a subshell, - there are no free jobs in the jobs table, and the jobs table is - at or above some maximum limit - -execute_cmd.c - - change eval_arith_for_expr to set this_command_name to `((' before - calling evalexp, since it might be changed by evaluating the - loop body between evalexp calls - -trap.c - - change reset_signal to turn off the SIG_TRAPPED flag for the - given signal, so shell builtins and functions running in command - substitutions don't run the signal handlers (traps are not supposed - to be inherited by command substitutions) - -parse.y - - changed parse_string_to_word_list to turn off alias expansion - while parsing the array assignment - - 12/9 - ---- -alias.c - - fix add_alias so that redefining an alias's value also resets the - EXPANDNEXT flag - - 12/10 - ----- -parse.y - - new function, token_is_assignment, called to check whether the text - before `=' makes up a valid assignment token before trying to parse - a compound assignment statement - - new function, parse_compound_assignment, to parse a compound - assignment statement instead of using parse_matched_pair; handles - comments and error reporting in the parser instead of waiting until - expansion time - - changed parse_compound_assignment and parse_string_to_word_list to - allow reserved words in compound array assignments - -lib/readline/doc/rltech.texinfo - - changed the documentation for rl_callback_read_char and - rl_callback_handler_remove to say what happens to the terminal - settings and what needs to be done to reset them - - 12/11 - ----- -bashline.c - - add emacs_edit_and_execute_command, bound to C-xC-e, like vi-mode - `v' command - - add bindable command name `edit-and-execute-command', bound to - run emacs_edit_and_execute_command() - -lib/glob/strmatch.c - - add support for ksh93-like [:word:] character class (isalnum + `_') - -doc/{bash.1,bashref.texi} - - add note to section describing lists to clarify that a sequence of - one or more newlines may be used to delimit a command, equivalent - to a semicolon - - document new [:word:] pattern matching character class - -doc/bash.1, lib/readline/doc/rluser.texinfo - - document `edit-and-execute-command' and its default emacs-mode - binding - -include/chartypes.h - - add defines for TOCTRL and UNCTRL if they're not already defined - -lib/readline/chardefs.h - - #undef UNCTRL if it's defined to avoid cpp redefinition warnings - -lib/sh/strtrans.c - - add \cX (Control-X) escape for $'...' to ansicstr() - - change ansic_quote() to allocate at least four chars for each char - in the string argument, to account for \0xx octal values - - change ansic_quote() to no longer call sprintf for non-printable - characters; just translate the string to octal directly - -print_cmd.c - - change xtrace_print_word_list to call ansic_quote() if - ansic_shouldquote() indicates that there are nonprinting characters - in a word - -builtins/type.def - - changed deprecated long option parsing to just replace the word - in the list with the equivalent short option (-type -> -t) instead - of removing words from the list - - changed describe_command to take a single flags argument instead - of two int args; changed caller - - type now has two new options: -f suppresses function lookup (like - command), and -P forces a PATH search for the name(s) - -builtins/common.h - - flags for describe_command are here - - changed extern declaration of describe_command - -builtins/command.def - - changed call to describe_command to use flags from common.h, and - the right number of arguments - -doc/{bash.1,bashref.texi} - - documented new -f and -P options to `type' - - 12/12 - ----- -lib/readline/rldefs.h - - fixed prototype for _rl_strnicmp - -execute_cmd.c - - select_query now takes a new argument, an int flag saying whether - or not to print the menu the first time through the loop. An - empty line in response to the prompt will always cause the menu - to be reprinted - - changed execute_select_command to cause select_query to reprint - the menu only if REPLY is set to NULL, if KSH_COMPATIBLE_SELECT - is defined - -config-top.h - - define KSH_COMPATIBLE_SELECT, with a comment about its meaning - -lib/readline/readline.c - - change rl_insert_comment to toggle if given an explicit numeric - argument: if the first characters on the line don't specify a - comment, insert one; if they do, delete the comment text - -doc/bash.1, lib/readline/doc/{readline.3,rluser.texinfo} - - documented new behavior of insert-comment with a numeric argument - - 12/13 - ----- -lib/malloc/watch.c - - new file, implements watchpoint functions - -lib/malloc/watch.h - - new file, define some `events' for watchpoints and extern function - and variable declarations for watchpoint code - -lib/malloc/imalloc.h - - #define MALLOC_WATCH if MALLOC_DEBUG is defined - - add __P define as in include/stdc.h if not already defined - -lib/malloc/malloc.c - - remove __P define, now in imalloc.h - - include watch.h if MALLOC_WATCH is defined - - added calls to _malloc_ckwatch in internal_malloc, internal_free, - and internal_realloc - -include/stdc.h - - augment __P define to allow prototypes if PROTOTYPES is defined - -lib/readline/rlstdc.h - - augment PARAMS define to allow prototypes if PROTOTYPES is defined - -lib/malloc/Makefile.in, Makefile.in - necessary changes to include watch.c in libmalloc - -lib/readline/readline.c - - fix rl_delete_text to make sure that the starting position is >= 0 - - _rl_init_line_state (called by readline via readline_initialize) - now sets rl_mark to 0 - - rl_get_{next,previous}_history set rl_mark to 0 if rl_point is at - the end of the line and rl_end otherwise in emacs mode - -lib/readline/kill.c - - rl_yank_nth_arg_internal and rl_paste_clipboard now set the mark - at point before calling rl_insert_text, like rl_yank - - rl_kill_full_line now resets rl_mark to 0 - - rl_kill_line and rl_backward_kill_line now set rl_mark to the - point after the kill in emacs mode - - rl_kill_word and rl_backward_kill_word now set rl_mark to the - point after the kill in emacs mode - - rl_unix_word_rubout and rl_unix_line_discard now set rl_mark to - the point after the kill in emacs mode - -lib/readline/search.c - - noninc_search saves and restores the mark, since it can be changed - while reading the search string - - noninc_dosearch sets the mark at the end of the line, making the - region bound the `inserted' text since rl_point is set to 0 - - rl_history_search_internal sets the mark at the end of the line, - for the same reason - -lib/readline/isearch.c - - rl_search_history now saves and restores the mark - - if no matching lines are found at all when doing an isearch, leave - point where it was instead of moving it to the end of the line - - 12/17 - ----- -lib/readline/rlmbutil.h - - new file, place for multi-byte character defines and extern - declarations - -lib/readline/{bind.c,readline.c,rlprivate.h} - - new bindable variable, `byte-oriented', tracks value of - rl_byte_oriented variable - -lib/readline/mbutil.c - - new file, with multibyte char utility functions - -lib/readline/{complete,display,readline,util,vi_mode}.c - - new code for multibyte characters, derived from IBM patch - - 12/18 - ----- -lib/sh/tmpfile.c - - include posixtime.h for time() extern declaration - -support/bashversion.c - - include <unistd.h> if it's available - -lib/readline/{histexpand,input,isearch,search}.c - - new code for multibyte characters, derived from IBM patch - -lib/readline/readline.h - - include rltypedefs.h - - 12/19 - ----- -lib/readline/complete.c - - slight change to mark-directories code to avoid adding a slash if - point is at the end of the line (rl_line_buffer[rl_point] == '\0') - and the previous character was a slash - - change printable_part to not return empty pathnames, which could - happen when completing filenames and a filename with a trailing - slash was passed as the argument. If the portion following the - trailing slash is NULL, ignore it and look for a previous slash. - If there's no previous slash, just return the filename argument - - new variable, rl_completion_mark_symlink_dirs, mirrors the value - of (user-settable with a variable) _rl_complete_mark_symlink_dirs - but may be modified by application-specific completion functions - when appropriate (set in rl_complete_internal and rl_menu_complete) - -lib/readline/readline.h - - extern declaration for rl_completion_mark_symlink_dirs - -pcomplete.c - - if one of the actions is CA_DIRECTORY, set - rl_completion_mark_symlink_dirs to indicate that we want the - trailing slash (might have to relax this) - -lib/readline/doc/rltech.texinfo - - documented rl_completion_mark_symlink_dirs variable - -lib/readline/doc/rluser.texinfo, doc/bash.1 - - documented the fact that `complete -d' and `complete -o dirnames' - force readline to append a slash to symlinks to directories - -builtins/enable.def - - changed enable_shell_builtin to disallow enabling disabled - builtins in a restricted shell - -doc/{bash.1,bashref.texi} - - documented new enable behavior in restricted shells - -doc/Makefile.in - - new rule to make an `RBASH' file documenting the restrictions - imposed by a restricted shell - -expr.c - - broke the code that evaluates variables and returns results out - of readtok() into a new function: expr_streval() - - expr_streval() now performs the standard unset variable error - behavior if `set -u' has been executed and it's asked to look - up an unset variable - - broke the code that frees up the expression context stack into - a new function: expr_unwind() - -variables.c - - fixed bind_int_variable so it handles array element assignment, - so expressions like `b[7]++' and `b[0] = 42' work right - - new function, get_variable_value, returns the string value of - the SHELL_VAR * passed as an argument - - get_string_value now calls get_variable_value with a non-null - result from find_variable - - 12/20 - ----- -lib/readline/rlmbutil.h, mbutil.c - - combined _rl_find_next_mbchar and _rl_find_next_nonzero_mbchar into - a single function - - combined _rl_find_prev_mbchar and _rl_find_prev_nonzero_mbchar into - a single function - -lib/readline/{display,readline,vi_mode}.c - - changed callers of _rl_find_next_mbchar and - _rl_find_next_nonzero_mbchar - -lib/readline/{complete,display,histexpand,readline,vi_mode}.c - - changed callers of _rl_find_prev_mbchar and - _rl_find_prev_nonzero_mbchar - - 12/20 - ----- -lib/sh/mktime.c - - new file, from glibc/gawk, compiled in if system doesn't have a - working mktime(3) - -lib/sh/strftime.c - - new file, from gawk, compiled in if system doesn't have a - working strftime(3) - -lib/sh/Makefile.in, Makefile.in - - changes for mktime.c, strftime.c - -configure.in - - call AC_FUNC_MKTIME, AC_STRUCT_TM, AC_STRUCT_TIMEZONE - - call AC_REPLACE_FUNC(strftime) - -config.h.in - - add defines for TM_IN_SYS_TIME, HAVE_TZSET, HAVE_TM_ZONE, - HAVE_STRUCT_TM_TM_ZONE, HAVE_STRFTIME - -externs.h - - provide an extern declaration for strftime if HAVE_STRFTIME is - not defined and NEED_STRFTIME_DECL is - -lib/tilde/tilde.h - - header files should not include <config.h> - -parse.y - - replace code in decode_prompt_string that chops up value returned - by ctime(3) with calls to strftime -- as a result, the expansion - of \@ has changed slightly (since it depends on the locale) - - added new \D{format} prompt string escape; `format' is passed to - strftime(3). Empty format is the same as `%X' (locale-specific - representation of the current time) - - combined cases for '\\', '\a', '\e', and '\r' in same case branch - in decode_prompt_string - -doc/{bash.1,bashref.texi} - - documented new \D{format} prompt string expansion - -builtins/printf.def - - use ISO C PRIdMAX instead of INTMAX_CONV - - pass length of format modifiers to mklong instead of computing it - with strlen() - -lib/sh/{fmtulong,fmtullong}.c - - changes from Paul Eggert to make more general - -arrayfunc.c - - when converting a variable to an array, make sure to unset the - dynamic_value and assign_func members of the struct variable, - since they're not valid anymore - - 12/27 - ----- -configure.in - - use AC_HELP_STRING in AC_ARG_WITH and AC_ARG_ENABLE - - remove AC_ARG_ENABLE for largefile, since AC_SYS_LARGEFILE adds - one - - 1/2/2002 - -------- -{alias,bashline,execute_cmd,general,shell,subst,variables,arrayfunc}.c,general.h - - changed some calls to strchr to calls to xstrchr for multibyte - characters - -include/shmbutil.h - - add extern declaration for xstrchr to avoid including externs.h - where it's not appropriate - -{braces,make_cmd,pathexp,subst,arrayfunc}.c, lib/sh/xstrchr.c - - include shmbutil.h - -{stringlib,subst}.c, {externs,subst}.h - - moved substring() from subst.c to stringlib.c, moved declaration - from subst.h to externs.h - -lib/sh/xmbsrtowcs.c - - new file, replacement function for mbsrtowcs - -lib/sh/Makefile.in - - add entries for xmbsrtowcs.c - -Makefile.in - - add dependencies on shmbutil.h to appropriate object files - -lib/glob/strmatch.c - - break character-class testing out into separate function: - is_cclass, in prep for multibyte changes - -{braces,make_cmd}.c - - changes for multibyte characters - -builtins/printf.def - - changes from Paul Eggert to just use intmax_t everywhere an - int/long/quad is needed and print with "%ld" if the number - fits in a long and %PRIdMAX otherwise - - remove getlong, getulong, getllong, getullong, since they're - no longer needed - - use a new type `floatmax_t' to print floating point numbers, the - widest-available floating point type (like `intmax_t'); new - function `getfloatmax' that calls strtold or strtod as appropriate - - remove getdouble, getldouble, since they're no longer needed - -lib/sh/fmtumax.c - - new file, string-to-[u]intmax_t conversion, just includes - fmtulong.c with the right defines - -Makefile.in, lib/sh/Makefile.in - - additions for fmtumax.c - -bashtypes.h - - include <inttypes.h> if it's available - -expr.c - - arithmetic is now in intmax_t instead of long - -externs.h - - extern declaration for fmtumax - - change extern declarations for evalexp, itos, inttostr, - uitos, uinttostr since they now return or use intmax_t instead - of long - -{execute_cmd,general,mailcheck,subst,variables}.c, parse.y -{array,general,subst,test,variables}.h -lib/sh/{itos,netopen}.c -builtins/{bashgetopt,common}.c, builtins/common.h -builtins/{break,fc,history,jobs,let,printf,pushd,read,shift,wait}.def - - changes for intmax_t shell arithmetic conversion - -doc/{bashref.texi,bash.1} - - documented long->intmax_t shell arithmetic conversion - -sig.c - - in initialize_terminating_signals, if we've already trapped a - terminating signal, don't reset the signal handler for it - - 1/3 - --- -{arrayfunc,pathexp}.c, parse.y - - changes for multibyte chars - -parse.y, lib/sh/strtrans.c - - moved ansiexpand from parse.y to lib/sh/strtrans.c - -parse.y, locale.c - - moved mk_msgstr and localeexpand from parse.y to locale.c - -parse.y - - new function, yy_input_name, returns name of input file from - bash_input.name - - broke the code that parses ((...)) constructs out of read_token - into a new function, parse_dparen() - -externs.h - - new extern declaration for ansiexpand(), mk_msgstr(), and - localeexpand() - -input.h - - new extern declaration for yy_input_name() - -{error,locale}.c - - use yy_input_name for error and other messages - -execute_cmd.c - - change shell_execve to make sure that the file is executable - before looking at the interpreter to find out why the execve() - failed (avoids misleading error message) - -lib/glob/glob.c - - move code that matches leading `.' and skips those filenames into - a separate function: skipname(), so there can be unibyte and - multibyte versions of that function - - 1/7 - --- -subst.c - - more changes for multibyte characters - -print_cmd.c - - change semicolon() so it doesn't output a `;' immediately after a - newline, since that results in a null command, which is a syntax - error - -variables.c - - fix indirection_level_string to turn off set -x while evaluating - PS4 - - 1/8 - --- -builtins/set.def - - make -o options into one struct, instead of separate structs for - option names corresponding to flags and non-flag option names. - This has the side effect of sorting the option names in output - -lib/glob/glob.c - - new function, mbskipname(), multibyte char version of skipname() - - removed all #ifndef SHELL code, this will never be used outside - the shell - -include/posixdir.h - - move REAL_DIR_ENTRY define here from lib/glob/glob.c - -lib/glob/glob_loop.c - - new file, included in glob.c for unibyte and multibyte versions of - glob_pattern_p - - added some forward static function declarations with prototypes - - more changes for multibyte character handling - -lib/glob/Makefile.in - - make glob.c depend on glob_loop.c - - changes for xmbsrtowcs.[co] - -lib/glob/xmbsrtowcs.c - - moved here from lib/sh, since the matching functions use it, and - libglob.a is linked after libsh.a - - 1/9 - --- -lib/glob/smatch.c - - new file, with strmatch (now xstrmatch) and associated functions, - with changes for multibyte chars - -lib/glob/sm_loop.c - - new file, included by smatch.c, with `generic' versions of matching - functions that are compiled twice: once each for single-byte and - multibyte characters - -lib/glob/strmatch.c - - strip out everything except strmatch(), which either calls fnmatch - (if HAVE_LIBC_FNM_EXTMATCH is defined) or xstrmatch - -lib/glob/collsyms.c - - changes for multibyte chars - -lib/glob/Makefile.in, Makefile.in - - changes for new source files - - 1/10 - ---- -lib/readline/complete.c - - new function, rl_completion_mode (rl_command_func_t *func), returns - the appropriate value to pass to rl_complete_internal depending on - FUNC and the value of `show-all-if-ambiguous'. This allows - application completion functions to present the same interface as - rl_complete - -lib/readline/readline.h - - new extern declaration for rl_completion_mode() - -lib/readline/doc/rltech.texinfo - - documented rl_completion_mode - -lib/readline/readline.[ch] - - bumped the version number to 4.3, changing the relevant cpp defines - -configure.in - - require that an installed readline version be at least readline-4.3 - -bashline.c - - converted bash-specific completion functions to use - rl_completion_mode instead of passing TAB unconditionally - -builtins/bashgetopt.c - - the `#' option specifier now means a required numeric argument, - not an optional one - -builtins/type.def - - when converting [-]-{path,type,all} to -[pta], don't bother - freeing and reallocating the option string; just change opt[1] - and null opt[2] - -lib/sh/snprintf.c - - support %ls/%S and %lc/%C for wide strings and characters, - respectively, if HANDLE_MULTIBYTE is defined - -mailcheck.c - - don't print a message about new mail if the file has not grown, - even if the access time is less than the modification time - - 1/14 - ---- -lib/readline/readline.c - - new function, rl_replace_line, to replace the readline line buffer - with the text supplied as an argument - - new function, rl_replace_from_history, replaces readline line - buffer with text from history entry passed as argument (undocumented, - not in readline.h because it requires a definition of - HIST_ENTRY for the prototype) - -lib/readline/readlne.h - - new extern declaration for rl_replace_line - -lib/readline/doc/rltech.texinfo - - documented rl_replace_line - -lib/readline/{isearch,readline,search}.c - - use rl_replace_line and rl_replace_from_history where appropriate - -lib/readline/readline.c - - broke the code that sets point after moving through the history - (_rl_history_preserve_point and _rl_history_saved_point) out - into a separate function, _rl_history_set_point() - -lib/readline/{complete.c,rlprivate.h} - - find_completion_word -> _rl_find_completion_word - - free_match_list -> _rl_free_match_list - -lib/readline/complete.c - - postprocess_matches and _rl_free_match_list now return immediately - if passed a null match list - -variables.c - - new function, find_local_variable, finds a local variable by name - at the current variable context - - in find_variable_internal, call find_local_variable before searching - any of the temporary environments if variable_context > 0 (meaning - we're in a shell function). This lets a local variable - override a variable whose value was passed in the `function - environment' - - 1/15 - ---- -variables.h, execute_cmd.c - - declare variables describing the temporary environments in - variables.h instead of in C files - -findcmd.c, builtins/setattr.def - - instead of calling find_tempenv_variable, use find_variable_internal - and check whether the returned SHELL_VAR * has the tempvar - attribute - -variables.c - - tentative change to lookup order in find_variable_internal so that - function local variables are found before variables in - function_env when executing a shell function - - change make_local_variable to handle making a local variable when - a variable with the same name already appears in one of the - temporary environments - - broke the body of make_var_array out into a new function: - static char **make_env_array_from_var_list (SHELL_VAR **vars) - - new function, make_var_array_internal, takes a hash table to look - in and a pointer to a mapping function and returns a char ** - environment-style list - - make_var_array now just calls make_var_array_internal - - new mapping function, local_and_exported, returns all local variables - in the current variable context with the export attribute set - - new function, make_local_export_array, returns an environment-style - char ** array of exported local variables in current context - - change environment creation order in maybe_make_export_env to - add variables to the environment in opposite order that - find_variable_internal uses. This means that local variables in - shell functions override variables with the same name in the - function_env - - change make_local_variable to set the initial value of the - variable it creates to NULL to make the `is set' and `is null' - tests that the expansion code does work right - - change make_local_variable to inherit the value of a variable with - the same name from the temporary enviroment - - 1/16 - ---- -Makefile.in - - link bashversion with buildversion.o instead of version.o, for - cross-compiling. version.o is for the target system; - buildversion.o is for the build system - -error.c - - add line numbers to internal_error() messages if the shell is - not interactive and running a shell script or a -c command - - report_error now prints non-zero line numbers for non-interactive - shells - -test.c - - test_syntax_error now calls builtin_error() instead of printing - its own messages - -builtins/common.c - - builtin_error now prints line numbers if a non-interactive shell - is running a shell script or a -c command - -print_cmd.c - - in cprintf, remove free_argp, since it's not used - -builtins/history.def - - make `history -n' increment the number of history lines in this - session by the number of lines read from the history file - -arrayfunc.c - - fix array_value_internal to expand the subscript even if the - variable is unset, so side effects produced by the arithmetic - evaluation will take place - -lib/readline/doc/{rluser,rltech}.texinfo - - some fixes for printing in @smallbook format from Brian - Youmans - - 1/17 - ---- -jobs.h - - new PRUNNING, PSTOPPED, PDEADPROC defines for PROCESSes, analogous - to RUNNING, STOPPED, and DEADJOB defines for jobs - -jobs.c - - use PS_RUNNING, PS_DONE, PS_STOPPED values for `running' field - of a PROCESS - - find_pipeline and find_job now take an additional flags argument - that, if non-zero, means to find only running processes; changed - all callers - - changed calls to find_pipeline and find_job made from waitchld - to find only running processes - - find_pipeline takes a third argument: an int *. If it looks in - the jobs list to find the pid, and the arg is non-null, it passes - the job index back to the caller. Used to avoid calls to - find_pipeline immediately followed by find_job with the same PID - -nojobs.c - - a couple of changes to make sure that set_pid_status is never - called with a pid argument of 0 or -1 - -trap.c - - change trap_handler to longjmp to wait_intr_buf (set by wait_builtin) - if a signal is received for which a trap has been set during - execution of the wait builtin (need to include builtins.h and - builtins/builtext.h and declare some extern variables for the - right things to check) - - new variable to keep track of which signal caused the longjmp to - wait_intr_buf, set by trap_handler (wait_signal_received) - -builtins/wait.def - - set the return value of wait when a longjmp(wait_intr_buf, 1) is - done to 128 + wait_signal_received - -{jobs,nojobs}.c - - set wait_signal_received to SIGINT in wait_sigint_handler before - the longjmp(wait_intr_buf, 1) - - 1/18 - ---- -bashline.c - - turn off rl_filename_completion_desired when completing a command - name with a single match only if the first char of that match is - not a `/' - - if there are multiple identical matches for a command name in - attempt_shell_completion, turn off rl_filename_completion_desired - if the first char is not a `/' to avoid readline appending a - slash if there's a directory with the same name in the current - directory - - 1/22 - ---- -lib/readline/complete.c - - new variable, _rl_page_completions, to control whether we want to - run the internal pager when listing completions (defaults to 1) - -lib/readline/rlprivate.h - - extern declaration for _rl_page_completions - -lib/readline/bind.c - - new bindable variable, `page-completions', controls value of - _rl_page_completions - -lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1 - - documented `page-completions' variable - -Makefile.in - - use $(INSTALL_SCRIPT) instead of $(INSTALL_PROGRAM) to install - `bashbug' - -aclocal.m4 - - fix small quoting problem in RL_LIB_READLINE_VERSION macro - -lib/readline/terminal.c - - fetch and save terminal's `vs' and `ve' cursor control attributes - - fetch and save terminal's `kI' attribute (string sent by Insert) - - new function, _rl_set_cursor, sets cursor to normal (insert mode) - or very visible (overwrite mode) - -lib/readline/readline.c - - new global variable, rl_insert_mode - - new function to toggle overwrite mode, rl_overwrite_mode - - each new line starts in insert mode - - switching to vi mode or emacs mode resets to insert mode - - reset cursor to normal before returning line - - _rl_replace_text now returns the number of characters inserted, - the return value from rl_insert_text - - new function, _rl_insert_or_replace_text (const char *string, int insert), - either inserts STRING or replaces the number of chars in STRING - with STRING starting at rl_point, depending on value of INSERT - - renamed rl_insert to _rl_insert_char, rl_insert just calls - _rl_insert_char with the same arguments when in insert mode - - new function, _rl_overwrite_char, handles self-insert in overwrite - mode. Does multibyte chars by reading an entire multibyte character - before entering overwrite loop - - new function, _rl_overwrite_rubout, handles RUBOUT when in - overwrite mode, called from rl_rubout - - new function, _rl_rubout_char, old body of rl_rubout; rl_rubout - calls this when not in overwrite mode - -lib/readline/readline.h - - extern declarations for rl_insert_mode and rl_overwrite_mode() - -lib/readline/rldefs.h - - define constants for values of rl_insert_mode - -lib/readline/rlprivate.h - - extern declarations for _rl_set_cursor and _rl_set_insert_mode - - change type of _rl_replace_text to return int - - extern declarations for _rl_insert_char, _rl_rubout_char - -lib/readline/funmap.c - - new bindable name `overwrite-mode', bound to rl_overwrite_mode - -lib/readline/rlconf.h - - define CURSOR_MODE if you want the cursor to show insert or - overwrite mode (only available if both `vs' and `ve' capabilities - are present) - -lib/readline/{complete,parens,readline,search,vi_mode}.c - - change calls to rl_insert to _rl_insert_char - -lib/readline/{readline,search}.c - - change calls to rl_rubout to _rl_rubout_char to avoid overwrite - mode problems - -lib/readline/vi_mode.c - - fix rl_vi_overstrike to just call _rl_overwrite_char, which - handles multibyte chars - -lib/readline/doc/{rluser.texinfo,readline.3}, doc/bash.1 - - document new `overwrite-mode' command - - 1/23 - ---- -lib/readline/readline.c - - return 0 immediately from rl_insert_text if the string to insert - is NULL or "" - -bashline.c - - if a numeric argument is given to one of the bash-specific glob - pattern completion functions (including TAB), append a `*' to - the word before generating matches - - in attempt_shell_completion, when doing glob completion, only - set the match list to NULL if rl_completion_type == TAB and - there is more than one completion. This permits listing completions - with double tabs and displaying ambiguous completions - - new function, bash_glob_complete_word, appends a `*' to the word - to be completed and then globs it. It uses a new filename - quoting function (bash_glob_quote_filename) to avoid quoting - globbing characters in the filename if there are no matches or - multiple matches - -lib/readline/complete.c - - set completion_changed_buffer to 0 in rl_complete_internal if - no matches were produced by the completion generator function - - new variable, rl_completion_suppress_append, suppresses appending - of rl_completion_append_character. Settable by application - completion functions, always 0 when application completion - functions are called (set to 0 by rl_complete_internal and - rl_menu_complete) - - broke the code that assigns default values to readline completion - variables out of rl_complete_internal and rl_menu_complete into - a new function, set_completion_defaults (int what_to_do) - -lib/readline/readline.h - - extern declaration for rl_completion_suppress_append - -lib/readline/doc/rluser.texinfo, doc/bash.1 - - documented behavior of glob-expand-word and glob-list-expansions - when supplied a numeric argument - - documented glob-complete-word - -lib/readline/doc/rltech.texinfo - - documented rl_completion_suppress_append - - 1/24 - ---- -lib/readline/text.c - - new file, text and character handling functions from readline.c - -lib/readline/misc.c - - new file, miscellanous bindable functions and their supporting - code from readline.c - -Makefile.in, lib/readline/Makefile.in - - changes for text.c, misc.c - -lib/readline/bind.c - - change ISKMAP case of rl_invoking_keyseqs_in_map to output - ESC as "\M-" instead of "\e" -- it's closer to the documentation - - change _rl_get_keyname to output ESC as \e instead of \C-[ - (it's easier to understand) - -pcomplete.h - - new flag, COPT_NOSPACE - -builtins/complete.def - - new `-o nospace' option for complete and compgen (though it doesn't - really do anything for compgen, since that doesn't hand anything - off to readline) - -bashline.c - - if a programmable completion specifies COPT_NOSPACE, set - rl_completion_suppress_append = 1 - -lib/readline/doc/rluser.texinfo - - documented new `-o nospace' option to complete and compgen - -doc/{bash.1,bashref.texi} - - documented $'\cX' escape sequence (forgot to before) - - 1/28 - ---- -variables.c - - make_new_variable now takes the HASH_TABLE * as its second - argument; changed callers - - new function, bind_variable_in_table, takes the HASH_TABLE * as - its third paramter; bind_variable calls bind_variable_in_table - with shell_variables as third argument - -variables.h - - new struct var_context, variable context (per-scope -- global, - function local, etc.) - -variables.[ch],builtins/common.[ch] - - moved functions that push and pop a variable context from - builtins/common.c to variables.c; move extern function - declarations to variables.h - - new function, all_local_variables - - variable_in_context is now static, used only by all_local_variables - -variables.[ch],execute_cmd.c - - push_context now takes the function name as an argument for - future use - - push_context takes an indication of whether or not the function is - executing in a subshell and saves the positional parameters only - if not in a subshell - - new functions for managing a stack of variable contexts and - scopes: new_var_context, dispose_var_context, push_var_context, - pop_var_context, push_scope, pop_scope - -builtins/declare.def - - call all_local_variables instead of map_over (...) in declare_internal - - don't call make_local_variable if we're looking at functions - ((flags_on & att_function) != 0), since it's wasted - - make sure VAR is set to NULL if check for variable_context fails - and we didn't just create or fetch a local variable in - declare_internal - - in non-function branch of declare_internal, only call find_variable - if VAR is NULL -- if it's not null, we just created or fetched a - local variable and don't need to do it again - - 1/29 - ---- -variables.[ch] - - the temporary environments (temporary_env, builtin_env, function_env) - are now HASH_TABLEs instead of argv-style arrays of strings (this - is an intermediate step on the way to the new lcc-inspired symbol - table scope structure) - - new internal attribute for variables: att_propagate. This means - to propagate the value out of the temporary environment up the - (for now implicit) chain of variable scopes when the containing - temporary environment is deleted - -variables.c - - assign_in_env now adds to the HASH_TABLE temporary_env instead - of making environment-style strings in an array of strings - - changed the way the temporary environments are merged into the - shell variable table to account for the new HASH_TABLE temp - environments - - changed the way the export environment is created due to the new - structure of the temporary environments - - new function, bind_variable_internal (name, value, table), binds - NAME to have VALUE in TABLE without searching the temporary - environments - - removed: shell_var_from_env_string, bind_name_in_env_array - - variable_in_context now checks the att_local attribute and makes - sure the variable is not invisible - - local_and_exported now makes sure the variable is not invisible - -execute_cmd.c - - we no longer need to copy the temporary environment to function_env - or builtin_env, we can simply use variable assignments - -{findcmd,subst,variables}.c, builtins/{declare,setattr}.def - - since variables from the temporary environments are no longer turned - into SHELL_VARs on the fly, don't dispose the SHELL_VAR returned - by find_variable or find_variable_internal - - need to savestring() the value returned by find_variable if it has - the tempvar attribute before calling bind_variable on it, because - bind_variable will search and bind into the temporary environments - and will free the old value before binding the new. For temporary - environments, these two pointers will be the same, and - bind_tempenv_variable will end up using freed memory - -builtins/{declare,setattr}.def - - set the att_propagate attribute when exporting or making readonly - variables from the temp environment (i.e., `var=value declare -x var' - or `var=value export var' sets the propagate attribute on the entry - for `var' in the temporary environment HASH_TABLE) - -lib/readline/isearch.c - - ^W when reading isearch string yanks the current word out of the - current line into the search string, skipping the portion already - matched - - ^Y when reading isearch string yanks the rest of the current line - into the search string, skipping the portion already matched - - 1/30 - ---- -{print_cmd,variables}.c - - moved indirection_level_string() from variables.c to print_cmd.c - -{externs,variables}.h - - moved extern declaration of indirection_level_string to externs.h - -{general,variables}.c - - moved assignment() from variables.c to general.c - -{general,variables}.h - - moved extern declaration of assignment() to general.h - -{externs,input}.h - - moved extern declaration of decode_prompt_string to externs.h - -print_cmd.c - - include flags.h, don't include stdc.h - -variables.c - - moved some functions around to group functions better - - changed new_shell_variable to explicitly initialize each member - of the created struct variable instead of calling bzero() - - make_new_variable now just calls new_shell_variable instead - of duplicating what it does - - removed some code in bind_function that duplicated what - new_variable does on the newly-created SHELL_VAR - - since there are no local function variables (functions are always - made at the global scope), kill_all_local_variables() doesn't - need to consider functions - - 1/31 - ---- -variables.c - - sort the array of special variables - - short-circuit the search in stupidly_hack_special_variables if - the passed name can't be found in the rest of the array - (that is, if name[0] < special_vars[i].name[0]) - -lib/readline/history.c - - unstifle_history() was returning values exactly opposite of - the documentation - -lib/readline/doc/{hsuser.texinfo,history.3} - - clarified the unstifle_history() documentation a little - - 2/4 - --- -variables.c - - in bind_variable, don't call bind_tempenv_variable after a - find_tempenv_variable succeeds -- just change the value inline. - There's no reason to look it up twice - - change makunbound to only call stupidly_hack_special_variables - if we're not unsetting a function - -variables.[ch] - - new function, unbind_function, like makunbound but doesn't mess - with previous contexts or calling stupidly_hack_special_variables - -builtins/set.def - - change unset_builtin to call either unbind_func or unbind_variable - -builtins/getopts.def - - call unbind_variable(name) instead of makunbound(name, shell_variables) - - 2/5 - --- -lib/glob/sm_loop.c - - use malloc instead of xmalloc in BRACKMATCH and handle failures - -error.c - - add extern declaration of executing_line_number with prototype, - since execute_cmd.h can't be included without including other - files - -lib/readline/parens.c - - include <unistd.h> - -lib/malloc/stats.c - - include <unistd.h> - - add extern declaration of malloc_free_blocks() with prototype - -pathexp.c - - added some forward declarations with prototypes for static functions - -lib/readline/rlprivate.h - - removed declarations of rl_untranslate_keyseq, rl_discard_argument, - rl_stop_output, rl_alphabetic since they appear in readline.h - - 2/6 - --- -{arrayfunc,execute_cmd,pcomplete,shell}.c - - change calls to makunbound(name, shell_variables) to - unbind_variable (name) - - 2/7 - --- -builtins/getopt.c - - don't defer incrementing of OPTIND when an invalid option is - encountered until the next call to sh_getopt() -- what if OPTIND - is reset before that next call? This means that OPTIND is always - incremented to the next option to be handled when an option is - returned, whether it's valid or not. This is what POSIX-2002 - says to do. - -syntax.h - - new #define, CSUBSTOP - -mksyntax.c - - add "-=?+" with value CSUBSTOP to the syntax table. These are the - valid expansion operators OP in ${param[:]OPword} - -subst.c - - use table lookup for CSUBSTOP in VALID_PARAM_EXPAND_CHAR - - new flags for the string extraction functions: EX_NOALLOC. This - indicates that the functions are being used only to skip over - strings and the result won't be used, so the substring shouldn't - be allocated, copied, and freed - - new flag for string_extract: EX_VARNAME. This serves the same - purpose as the old `varname' parameter. parameter_brace_expand() - changed appropriately - - extract_delimited_string and extract_dollar_brace_string now take - an additional `flags' argument, which may include EX_NOALLOC - - changed callers of extract_delimited_string and - extract_dollar_brace_string appropriately - - string_extract now understands EX_NOALLOC; callers changed - - some smaller code cleanups - - converted char_is_quoted(), unclosed_pair(), and skip_to_delim() - to understand multibyte characters - - 2/11 - ---- -variables.[ch] - - moved to a symbol organization inspired by lcc. The basic structure - is no longer a HASH_TABLE, but a VAR_CONTEXT, which includes a hash - table as one of its members. VAR_CONTEXTs are linked together to do - variable scoping. One nice thing about this is that the entire - symbol table doesn't need to be searched at function scope exit to - remove local variables. Fixes problems with only one instance of - builtin_env and function_env, even though it really is a stack - - shell_variables is now a VAR_CONTEXT *, with a global_variables - variable that points to the bottom of the stack for fast access - - function-scope local variables (assignments specified on the command - line before a function call) and function-local variables (declared - with the `local' builtin) have been unified in the same variable - context, replacing function_env - - assignment statements preceding the `.' and `eval' builtins are now - a separate variable scope VAR_CONTEXT, replacing builtin_env - - temporary_env (a HASH_TABLE) is now the only separate environment - - changes to export environment creation, variable binding, variable - lookup, local variable propagation all changed to work with the - new symbol table/scope structure - - a SHELL_VAR no longer has a `prev_context' member; it's not needed - -execute_cmd.c - - changes to push_context calls to include any temporary variables in - temporary_env; pop_context takes care of propagating any temporary - variables if necessary - - calls to push_scope if `eval' or `.' is called with a list of - preceding variable assignments, and pop_scope called at end of - builtin's execution. pop_scope takes care of merging temporary - variables into the shell environment when appropriate - -builtins/{setattr,declare}.def - - changes to account for variable assignments preceding `local', - `export', `readonly', `declare', etc. to work with the new - variable scoping implementation - -shell.c - - since shell_variables is now a VAR_CONTEXT, call - delete_all_contexts() when the shell is reinitializing instead of - delete_all_variables() - -builtins/common.c - - new function, get_job_by_name(), used by execute_simple_command() - for the `auto_resume' stuff and get_job_spec() - -builtins/common.h - - new set of #defined constants for flags argument to - get_job_by_name() - - 2/12 - ---- -command.h - - new redirection operator: r_reading_string for `here strings' - -parse.y - - new token, LESS_LESS_LESS, for new redirection `here string' - operator: [N]<<< word - - recognize LESS_LESS_LESS and create the appropriate redirection - -{dispose_cmd,copy_cmd,make_cmd,print_cmd}.c - - recognize r_reading_string and do the right thing (dispose_redirects, - copy_redirect, print_redirection, and make_redirection, respectively) - -redir.c - - here_document_to_fd now takes the redirection operator as its - second argument - - new function, write_here_string, expands a here string and writes it - to the here document file descriptor - - here_document_to_fd calls write_here_string for r_reading_string - operator - - handle r_reading_string in do_redirection_internal() and - stdin_redirection() - - 2/18 - ---- -doc/{bash.1,bashref.texi} - - documented here strings - -{configure,Makefile}.in - - bumped version number up to bash-2.05b and the release status - to alpha1 - -expr.c - - make expr_streval understand that variables with the `invisible' - attribute are really unset, and accessing such a variable when - `set -u' is set should be an error - -variables.h - - new accessor macros: var_isset(var) and var_isnull(var), test - whether var->value is NULL - -{eval,subst,variables}.c, builtins/{declare,setattr}.def - - be more consistent about using value_cell(var) instead of - directly referencing var->value - - use var_isset and var_isnull where appropriate - -builtins/help.def - - augmented a couple of help strings with pointers to `info' and - `man -k' - - 2/14 - ---- -variables.h - - new macros to use when setting variable values directly instead of - through bind_variable and its siblings - -{arrayfunc,variables}.c - - use var_setarray and other lvalue macros instead of assigning to - var->value directly - -builtins/setattr.def - - change show_var_attributes to show function definitions separately - from function attributes. This allows the output of `declare -f' - (with other flags), `export -f', and `readonly -f' to be reused as - shell input, instead of the old - - declare -f[flags] func() - { - foo - } - - which has syntax errors. When in posix mode, `export -fp' and - `readonly -fp' still don't print function definitions - - 2/16 - ---- -parse.y - - comment out calls to discard_parser_constructs; no need to call - empty functions - - 2/18 - ---- -lib/sh/memset.c - - replacement function for memset(3) - -lib/sh/Makefile.in, Makefile.in - - additions for memset.c - -configure.in,config.h.in - - check for memset, define HAVE_MEMSET if found, add memset.o to - LIBOBJS if not - -lib/malloc/malloc.c - - removed zmemset(), replaced with calls to memset(3) - -{subst,execute_cmd,lib/sh/netopen}.c - - replaced calls to bzero with calls to memset - -subst.c - - word_split() now takes a second argument: the value of $IFS, so - it doesn't have to look up IFS every time - - word_list_split() now calls getifs() and passes the result to - each call to word_split() as its second arg - - do a quick scan for CTLNUL in remove_quoted_nulls before allocating - new string, copying old string to it, copying over original string - and freeing new string - -eval.c - - don't bother calling dispose_used_env_vars if temporary_env is NULL - -execute_cmd.c - - fix fix_assignment_words to only look up the builtin corresponding - to the first word if one of the words in the list is marked as - W_ASSIGNMENT - -hashlib.c - - renamed hash_string to hash_bucket, which better reflects what it - does - - extracted the portion of hash_bucket that computes the hash out - into a new hash_string() - - made new body of hash_bucket into a macro HASH_BUCKET; function - just calls the macro - - calls to hash_bucket in this file now call HASH_BUCKET macro - - in add_hash_item, just add a new item at the front of the appropriate - bucket list instead of at the end - -hashcmd.h - - reduced FILENAME_HASH_BUCKETS to 53 from 107 - - 2/19 - ---- -hashlib.[ch] - - find_hash_item, remove_hash_item, add_hash_item all take a new - third `flags' argument - - add_hash_item doesn't call find_hash_item if HASH_NOSRCH passed in - flags arg - - find_hash_item will create a new hash table entry if HASH_CREATE is - passed in flags arg - - new function, hash_walk, takes a pointer to a function and a table - and calls the function for each item in the table. If the function - returns < 0, the walk is terminated - - fixed flush_hash_table to set table->nentries to 0 after freeing - all entries - - BUCKET_CONTENTS now has a new `khash' member, what key hashes to; - set by HASH_BUCKET macro (which calls hash_string), assigned in - find_hash_item (HASH_CREATE) and add_hash_item - - find_hash_item and remove_hash_item check `khash' against the - hash of the string argument before calling strcmp - -{alias,hashlib,hashcmd,pcomplib,variables}.c - - changed all calls to {find,remove,add}_hash_item - -builtins/hash.def - - return immediately from print_hashed_commands if there are no - entries in the hash table (this eliminates need for `any_printed' - variable) - - change print_hashed_commands to use hash_walk - -alias.c - - short-circuit all_aliases and map_over_aliases if - HASH_ENTRIES(aliases) == 0 - - simplify map_over_aliases by just allocating enough room in the - returned list for all entries in the aliases hash table, instead - of doing the check and xrealloc - - add_alias now calls add_hash_item with HASH_NOSRCH argument - -pcomplete.h - - sh_csprint_func_t is no more; use hash_wfunc instead - -pcomplib.c - - short-circuit print_all_compspecs if HASH_ENTRIES(prog_completes) - is 0 - - print_all_compspecs now takes a `hash_wfunc *' argument - - print_all_compspecs now just calls hash_walk - -builtins/complete.def - - new function, print_compitem, takes a BUCKET_CONTENTS *, extracts - the right info, and calls print_one_completion - -variables.c - - short-circuit map_over_funcs if HASH_ENTRIES(shell_functions) == 0 - - short-circuit flatten if the passed table has no entries - - bind_variable_internal takes a new fourth argument: `hflags', - to pass to hash table functions - - make_new_variable now passes HASH_NOSRCH flag to add_hash_item - - set_if_not now calls bind_variable_internal and passes - HASH_NOSRCH as flags argument - - bind_function now calls add_hash_item with HASH_NOSRCH argument - - fixed make_local_variable: old_var == 0 && was_tmpvar can never - be true - - if we didn't find an old variable in make_local_variable, call - bind_variable_internal with HASH_NOSRCH argument - - fix push_temp_var to reset variable context to 0 if binding into - global_variables->table - -parse.y - - fix to parse_compound_assignment to avoid core dumps on empty - compound array assignments - -subst.c - - getifs() is now global so read_builtin can call it - -subst.h - - extern declaration for getifs() - - 2/20 - ---- -hashlib.c - - changed hash_string to use a better hash function - - changed HASH_BUCKET to use masking rather than modulus to hash a - string to a bucket -- HASH TABLES MUST NOW BE SIZED BY POWERS - OF TWO - -hashlib.h - - DEFAULT_HASH_BUCKETS is now 64 - -hashcmd.h - - FILENAME_HASH_BUCKETS is now 64 - -pcomplib.c - - COMPLETE_HASH_BUCKETS is now 32 - -variables.c - - TEMPENV_HASH_BUCKETS is now 4 - -alias.c - - new define, ALIAS_HASH_BUCKETS, set to 16, used to size alias table - -hashlib.c - - removed initialize_hash_table; folded code into make_hash_table - - fixed copy_bucket_array to copy the `khash' member of an item - - renamed functions to be more systematic and easier for me: - make_hash_table -> hash_create - hash_table_nentries -> hash_size - copy_hash_table -> hash_copy - find_hash_item -> hash_search - remove_hash_item -> hash_remove - add_hash_item -> hash_insert - flush_hash_table -> hash_flush - dispose_hash_table -> hash_dispose - print_table_stats -> hash_pstats - get_hash_bucket -> hash_items - - changed hash_search to short-circuit if table->nentries == 0 and - HASH_CREATE has not been passed in the flags argument - -{alias,variables,hashcmd,pcomplib}.c - - renamed calls to all renamed functions from hashlib.c - -builtins/kill.def - - don't drop a leading `-' in a pid argument - - call kill_pid with an explicit third argument of 1 if the pid - argument to kill is < -1, rather than rely on the behavior of - kill(2) - - 2/21 - ---- -subst.c - - quoted_strchr is no longer declared `inline' - - skip_double_quoted is no longer declared `inline' - - string_extract_double_quoted is no longer declared `inline' - -lib/readline/input.c - - rl_gather_tyi is now an `int' valued function; returns the number - of characters read (0 or 1) or -1 on error - - if rl_gather_tyi() returns -1 to rl_read_key(), set rl_done to 1 - and return a newline; something is wrong with the input fd - - 2/25 - ---- -variables.[ch] - - IFS is now a special variable - - new special var function, sv_ifs(), called when IFS is set or unset - - call setifs() when IFS is first set in initialize_shell_variables - - call setifs() from make_local_variable and assign_in_env if - appropriate - - if assign_in_env() is called with a var assignment like `VAR=', - make the value in the new SHELL_VAR created be "" like - do_assignment_internal does, since certain parts of the shell use - a NULL value as evidence that the variable is unset (though - attributes may have been assigned) - - if push_temp_var pushes something up to the global_variables table, - make sure that the context is set to 0 - - new function dispose_temporary_env, called by both - dispose_used_env_vars and merge_temporary_env with different `free - func' function pointers; calls sv_ifs after disposing the temporary - environment - - push_exported_var now calls bind_variable_internal instead of - bind_variable - - pop_scope and pop_context now call sv_ifs - -subst.[ch] - - new global variables used to keep track of IFS state, to avoid - having to call find_variable("IFS") all the time: - - ifs_var the SHELL_VAR for IFS - ifs_value ifs_var ? value_cell (ifs_var) : " \t\n" - ifs_cmap bitmap of characters in ifs_value - ifs_firstc first character in ifs_value - - - new function setifs(), sets the aforementioned ifs variables each - time IFS is set or unset, and at nested scope exit - - instead of calling getifs() from inside subst.c, use ifs_value - - getifs() now just returns ifs_value - - use ifs_firstc in string_list_dollar_star() - - only call member() in issep() if separators is more than one char - - don't cache a bitmap every time expand_word_internal() is called; - use ifs_cmap instead - - new macro, isifs(c), checks whether C is in ifs_cmap - -builtins/read.def - - use issep() and isifs() macros instead of looking at $IFS directly - -syntax.h - - make sure macros that access sh_syntaxtab cast the argument to - `unsigned char' before array access - - new macros: issyntype(c, type) and notsyntype(c, type), check - sh_syntaxtab[c] for a particular flag value `type' - - 2/26 - ---- -hashlib.h - - the `data' member of a `BUCKET_CONTENTS' is now a PTR_T - -{hashlib,alias,variables,hashcmd,pcomplib}.c - - removed some casts when assigning to and using `data' member of a - `BUCKET_CONTENTS' - -subst.c - - in split_at_delims, call make_word_list instead of allocating and - initializing a WORD_LIST * directly - -make_cmd.[ch] - - add_string_to_list is now just a macro that calls make_word_list - - make_simple_command now calls make_word_list instead of allocating - a WORD_LIST * directly - - 2/27 - ---- -copy_cmd.c - - copy_word now calls make_bare_word to allocate the copy - - copy_word_list now calls make_word_list to allocate the copy - -shell.h - - include `ocache.h' for simple object caching - - call cmd_init() to initialize the WORD_DESC and WORD_LIST object - caches - -{make,dispose}_cmd.c - - allocate WORD_DESC * and WORD_LIST * vars from their respective - ocaches, and return them to the cache when disposing - -jobs.c - - renamed old `waiting_for_job' variable to `queue_sigchld', which - better reflects its intent: sigchld_handler does not call waitchld - if `queue_sigchld' is non-zero, it simply increments the count of - waiting children - - cleanup_dead_jobs now just sets and clears queue_sigchld instead of - blocking and unblocking SIGCHLD; it calls waitchld at the end if - `sigchld' is non-zero, but that's not really necessary - - in setjstatus, only call xrealloc if `statsize' is less than the - number of processes passed -- no reason to do it if they're the - same - - 2/28 - ---- -sig.[ch] - - reinitialize_signals is no more; initialize_signals takes an - argument saying whether or not we are reinitializing - -builtins/exec.def - - reinitialize_signals() -> initialize_signals(1) - -test.c - - fix filecomp() to work right when one file has a non-positive - timestamp and the other file does not exist - -doc/{bash.1,bashref.texi} - - document what happens for test's -nt and -ot operators when one - file operand exists and the other does not - -jobs.c - - if we haven't messed with SIGTTOU, just manipulate queue_sigchld - in notify_of_job_status instead of calling sigprocmask() - - list_one_job now calls pretty_print_job directly instead of going - through print_job - - pretty_print_job now must be called with SIGCHLD blocked or held - instead of blocking SIGCHLD itself - - changed start_job so that it doesn't call UNBLOCK_CHILD and then - immediately call BLOCK_CHILD again (explicitly or via last_pid()), - call find_last_pid instead of last_pid and then UNBLOCK_CHILD - - changed wait_for_job the same way - - find_last_pid now takes a second argument: block; uses BLOCK_CHILD - if `block' is 1, not otherwise. Changed existing calls: - find_last_pid(j) -> find_last_pid(j, 0) - last_pid(j) -> find_last_pid(j, 1) - `last_pid()' is now gone - - rewrote wait_for_background_pids(); it was a little strange - -copy_cmd.c - - copy_if_command: don't copy null false_case commands - - copy_simple_command: don't copy a null redirection list - -subst.c - - in get_word_from_string and list_string, just check for " \t\n" - directly rather than calling strcmp - - in get_word_from_string and strip_trailing_ifs_whitespace, use - isifs() instead of issep(), since they're never called with - separators != $IFS - - change issep() to call isifs if separators is longer than one - character, since it's never called with anything but "", " ", - or $IFS - - 3/1 - --- -sig.h - - enclose the BLOCK_SIGNAL macro in a do {...} while (0) loop, at it - should have been all along - -lib/readline/doc/rltech.texinfo - - document that readline defaults to stdin/stdout if rl_instream/ - rl_outstream are NULL - -lib/readline/terminal.c - - if an application is using a custom redisplay function, - rl_resize_terminal just calls rl_forced_update_display to tell - (*rl_redisplay_func) to update the display, otherwise call - _rl_redisplay_after_sigwinch - -lib/readline/readline.c - - change readline_internal_setup() so the change to vi insertion mode - happens even if readline_echoing_p is 0 - - don't print the prompt to rl_outstream in readline_internal_setup - if we're not echoing and the caller has defined a custom redisplay - function -- let the redisplay function deal with it - -configure.in - - new option: --enable-mem-scramble, controls memory scrambling on - free() (on by default; only affects use of bash malloc) - -config.h.in - - new option MEMSCRAMBLE, controlled by --enable-mem-scramble - - 3/5 - --- -parse.y - - added ksh-like behavior of [...] to read_token_word: if a `[' is - seen in an assignment context and the previous characters in the - token form a valid identifier, parse the [...] with - parse_matched_pair to allow spaces (and newlines) in the subscript - -bashline.c - - new function bash_servicename_completion_function, for completing - service names from /etc/services - -bashline.h - - new extern declaration for bash_servicename_completion_function - -builtins/complete.def - - allow new `-s/-A service' option to complete and compgen builtins - -pcomplete.h - - new CA_SERVICE define, new ITEMLIST variable it_services - -pcomplete.c - - add callback to bash_servicename_completion_function to generate - list of matching service names for completion - -doc/bash.1,lib/readline/doc/rluser.texinfo - - documented new `-s/-A service' option to complete and compgen - - 3/6 - --- -builtins/read.def - - change hard-coded `0' to new variable `fd' (initially 0) in - preparation for adding `-u fd' option - -bashline.c - - bash_directory_completion_hook calls expand_prompt_string instead - of expand_string (it does the right thing). This keeps expansion - errors from causing a longjmp, which shouldn't happen because of - completion - - command_subst_completion_function was augmented very slightly to - do filename completion on a non-command-word in a command - substitution - - command_subst_completion_function now skips over the lcd that - rl_completion_matches puts in matches[0] if there is more than - one possible completion - - 3/7 - --- -builtins/read.def - - only add the unwind_protect to free `rlbuf' if `edit' is non-zero, - since we won't be using readline otherwise - -lib/sh/zread.c - - renamed zread1 -> zreadintr - -redir.c - - small change to redirection_error() to make a slightly better - guess about the invalid file descriptor if the redirection op is - r_duplicating_input or r_duplicating_output - -include/stdc.h - - new macro, SH_VA_START, to encapsulate the difference between - stdarg va_start and varargs va_start - -{error,pcomplete,print_cmd}.c,builtins/common.c,lib/sh/snprintf.c - - use SH_VA_START - - 3/8 - --- -builtins/read.def - - support for the ksh-like `-u fd' option - -general.c - - new function sh_validfd(fd), returns 1 if fd is a valid open file - descriptor - -general.h - - extern decl for sh_validfd - -bashline.c - - don't call posix_readline_initialize() from initialize_readline(); - sv_strict_posix() should already have taken care of it - - 3/11 - ---- -{error,pcomplete,print_cmd}.c, builtins/common.c - - removed non-varargs versions of functions - -builtins/printf.def - - if the string argument to %q has non-printing characters, call - ansic_quote to quote it rather than sh_backslash_quote - -variables.h - - new attribute: att_trace (and corresponding trace_p() macro). - Functions with this attribute will inherit the DEBUG trap. - Currently ignored for variables - -builtins/declare.def - - new `-t' option to declare/typeset toggle the `att_trace' attribute - -builtins/setattr.def - - check for att_trace and output `-t' flag in show_var_attributes - -execute_cmd.c - - if a function is being traced (it has the `-t' attribute set), - don't turn off the DEBUG trap when it executes - -doc/{bash.1,bashref.texi} - - document the new `-t' option to declare/typeset - - 3/12 - ---- -execute_cmd.c - - don't execute the debug trap in the `cm_simple:' case of - execute_command_internal; run it in execute_simple_command so we - get the line number information right when executing in a shell - function - - run a DEBUG trap before executing ((...)) arithmetic commands, - like ksh93 - - run a DEBUG trap before executing [[...]] conditional commands, - like ksh93 - -eval.c - - add a static forward declaration for alrm_catcher() - -general.c - - add static forward declarations for bash_special_tilde_expansions, - unquoted_tilde_word, initialize_group_array - -variables.h - - add extern declarations for sh_get_env_value, map_over_funcs, - local_exported_variables - -variables.c - - add static forward declarations for dispose_temporary_env, - make_func_export_array - -bashhist.c - - add static forward declaration for check_history_control - -configure.in - - add a call to AC_CHECK_DECLS for strcpy - -config.h.in - - add placeholder for HAVE_DECL_STRCPY define, set by configure - -general.h - - don't declare strcpy if HAVE_DECL_STRCPY is defined with a non-zero - value - -sig.h - - add prototype to typedef of SigHandler - -lib/readline/histlib.h - - removed extern declaration of strcpy() - - include string.h/strings.h directly in histlib.h instead of source - files - -lib/readline/{histexpand,histfile,history,histsearch}.c - - don't include string.h/strings.h now that histlib.h includes it - -lib/tilde/tilde.c - - removed extern declaration of strcpy(), rely on string.h/strings.h - -command.h - - four new redirection types: r_move_input, r_move_output, - r_move_input_word, r_move_output_word, for - [N]<&word- and [N]>&word- from ksh93 - -print_cmd.c - - changes to print r_move_input[_word] and r_move_output[_word] - -copy_cmd.c - - changes to copy r_move_input[_word] and r_move_output[_word] - -dispose_cmd.c - - changes to dispose r_move_input_word and r_move_output_word - -make_cmd.c - - changes to make r_move_input[_word] and r_move_output[_word] from - r_duplicating_{input,output}_word, which is how the new redirs - are passed by the parser - -redir.c - - changes to make r_move_input[_word] and r_move_output[_word] do - the right thing when executed - -builtins/read.def - - print an error message and return failure immediately if zread/zreadc - return < 0 - -doc/{bash.1,bashref.texi} - - documented new [n]<&word- and [n]>&word- redirections - - 3/13 - ---- -lib/readline/isearch.c - - enabled code to allow chars bound to rl_rubout to delete characters - from the incremental search string - -shell.c - - add `-l' invocation option to parse_shell_options; equivalent to - `--login' - - fixed set_login_shell to check first char of base pathname of argv0 - for `-', like other shells - - move the check for make_login_shell after the call to - parse_shell_options because the `-l' option might set it - -doc/{bash.1,bashref.texi} - - documented new `-l' invocation option - -array.c - - new function, array_shift, shifts an array left by a specified - number of elements - - array_walk is now compiled in by default - - array_to_assignment_string now takes a second argument: int quoted. - If non-zero, the result is single-quoted before being returned - - quoted_array_assignment_string has been removed - -array.[ch] - - renamed most of the array functions so that all have an array_ - prefix and are more systematically named - - array_slice now preserves the indicies from the original array - - change array_to_assign to use a static buffer for expanding the - array indices, instead of malloc/free - -{arrayfunc,subst,variables}.c, builtins/read.def - - changed calls to various array functions to use new names - -lib/sh/stringvec.c, externs.h - - renamed all of the functions to have a strvec_ prefix and to have - a more sensible name scheme - - strvec_search's arguments are now supplied in reverse order, so - the char **array is first, like the other functions - - new function, strvec_resize, xrealloc for strvecs - -{alias,array,bracecomp,braces,bashline,execute_cmd,findcmd,general,pathexp, -pcomplete,variables}.c -lib/sh/stringlist.c -builtins/{bind,complete,exec,getopts,pushd,set}.def - - change calls to all functions from lib/sh/stringvec.c - - use strvec_resize where appropriate - -externs.h - - only declare dup2() if HAVE_DUP2 is undefined or DUP2_BROKEN is - defined - -lib/readline/{macro,readline,util}.c, lib/readline/rlprivate.h - - _rl_defining_kbd_macro is gone, use RL_ISSTATE(RL_STATE_MACRODEF) - -lib/readline/readline.h - - new struct readline_state, encapsulates most of readline's internal - state in case you need reentrancy or nested calls to readline() - - extern declarations for rl_save_state, rl_restore_state - -lib/readline/readline.c - - add (undocumented) int rl_save_state (struct readline_state *), - int rl_restore_state (struct readline_state *) - - 3/14 - ---- -array.[ch] - - new function, array_rshift, shifts an array right by a specified - number of elements, optionally inserting a new element 0 - -examples/bashdb/bashdb - - new single-file version of bash debugger, originally modified from - version in bash-2.04 by Gary Vaughan (the old debugger still - appears in examples/obashdb). This version has a more gdb-like - command set - -examples/bashdb/bashdb.el - - new emacs bashdb debugger mode from Masatake YAMATO <jet@gyve.org> - -execute_cmd.c - - don't make $LINENO relative to function start unless the shell is - currently interactive -- this is what ksh93 does and what I - believe to be the intent of POSIX.2 (this required changing some - of the test checks because the output has changed) - - run the debug trap for each command in an arithmetic for expression, - like ksh93 does - -lib/readline/vi_mode.c - - redid rl_vi_subst (binding func for `s' and `S') in terms of - rl_vi_change_to: `S' == `cc' and `s' == `c '. This makes undo - work right - - 3/18 - ---- -hashlib.c - - fixed hash_walk to return if the item function returns < 0, instead - of breaking out of the current hash chain - -array.c - - fixed array_walk to return if the item function returns < 0, like - hash_walk - -lib/sh/stringlist.c, externs.h - - new function: strlist_walk, takes a stringlist and a pointer to an - item func. Like other _walk funcs, if item func returns < 0 the - walk is cancelled - - new function: strlist_flush, frees items in the contained list - with strvec_flush - - renamed functions to have a strlist_ prefix and be more systematic - -pcomplib.c,pcomplete.h - - removed redundant `progcomp_initialized' variable - - renamed functions to have `progcomp_' or `compspec_' prefixes - like the hash library - -{bashline,pcomplete}.c,builtins/complete.def - - fixed calls to stringlist functions to use new names - - fixed calls to functions in pcomplib.c to use new names - -pcomplete.c - - made the debugging code #ifdef DEBUG -- it should be mature enough - -builtins/hash.def,parse.y - - use REVERSE_LIST(x, t) instead of (t)reverse_list(x) - -list.c,{externs,general}.h - - renamed the list functions to have a list_ prefix, changed callers - -externs.h,{execute_cmd,stringlib,subst}.c,builtins/common.c,lib/sh/stringvec.c - - word_list_to_argv -> strvec_from_word_list - - argv_to_word_list -> strvec_to_word_list - - moved functions to lib/sh/stringvec.c - -lib/sh/stringvec.c - - changed name of second argument to strvec_from_word_list from `copy' - to `alloc' so the use of `copy' between strvec_from_word_list and - strvec_to_word_list isn't as confusing - - changed name and sense of second argument to - strvec_to_word_list from `copy' to `alloc' for the same reason -- - now both functions agree on semantics of second argument - -lib/sh/stringlist.c - - ditto for strlist_from_word_list and strlist_to_word_list - -subst.c - - changed callers of strvec_to_word_list - - 3/19 - ---- -builtins/hash.def - - added `-l' option to list table or individual targets in reusable - format - - added `-d' option to remove one or more names from the table of - hashed commands (provides `unhash' or `unalias -t' functionality) - -doc/{bash.1,bashref.texi} - - documented new `-l' and `-d' options to `hash' - -hashcmd.[ch] - - renamed functions to have a `phash_' prefix and follow new naming - convention - - phash_remove now returns an int: 1 if command not in hash table, - 0 if filename removed OK - -{findcmd,variables}.c, builtins/{hash,type}.def - - changed callers to use new names from hashcmd.c - -builtins/common.[ch] - - new function, sh_notfound(s), prints standard `not found' message - - new function, sh_invalidid(s), prints standard `invalid identifier' - message - - new function, sh_restricted(s), prints standard `restricted' message - for restricted shells - - new function, sh_invalidnum(s), prints standard `invalid number' - message - - renamed bad_option to sh_invalidopt, changed to print - `invalid option' instead of `unknown option' - - new function, sh_invalidoptname, prints standard `invalid option - name' for long options - - new function, sh_badjob (s), prints standard `no such job' message - - new function, sh_invalidsig (s), prints standard `invalid signal - specification' message - - new function, sh_nojobs (s), prints standard `no job control' message - - new function, sh_needarg (s), prints standard `option requires an - argument' message - - new function, sh_neednumarg (s), prints standard `numeric - argument required' message - - new function, sh_badpid(s), prints standard `not a pid...' message - - new function, sh_erange (s, desc) prints standard `out of range' - message, optionally using `desc' to say what the argument is - -builtins/{alias,command,declare,exec,hash,type}.def - - call sh_notfound() instead of calling builtin_error directly - -builtins/{declare,getopts,read,set,setattr}.def - - call sh_invalidid() instead of calling builtin_error directly - -builtins/{cd,command,enable,exec,hash,source}.def - - call sh_restricted() instead of calling builtin_error directly - -builtins/{printf,read,ulimit}.def, builtins/common.c - - call sh_invalidnum instead of calling builtin_error directly - -builtins/{complete,declare,pushd,set}.def, builtins/bashgetopt.c - - call sh_invalidopt instead of bad_option or builtin_error directly - -builtins/{complete,set,shopt}.def - - call sh_invalidoptname instead of builtin_error directly - -builtins/{fg_bg,jobs,kill,wait}.def - - call sh_badjob instead of calling builtin_error directly - -builtins/common.c, builtins/{kill,signal}.def - - call sh_invalidsig instead of calling builtin_error directly - -builtins/{fg_bg,suspend,wait}.def - - call sh_nojobs instead of calling builtin_error directly - -builtins/{common,bashgetopt}.c, builtins/{hash,kill}.def - - call sh_neednumarg and sh_needarg where required - -builtins/{kill,wait}.def - - call sh_badpid where required - -builtins/{break,fc,history,pushd,shift,ulimit,umask}.def - - call sh_erange where appropriate - -builtins/printf.def - - new static function, printf_erange, prints standard out-of-range - warning message - -builtins/set.def - - changed so that calls to sh_invalidopt always include the leading - `+' or `-' - -builtins/shopt.def - - changed SHOPT_ERROR macro to shopt_error function - -builtins/bind.def - - regularized error messages to `bind: object: error string' like - other error messages - -builtins.h - - the `short_doc' member of a `struct builtin' is now of type - `const char *' - - the strings in `long_doc' array of a struct builtin are now const - -builtins/mkbuiltins.c - - changes for new `const' members of struct builtin - - 3/20 - ---- -lib/readline/histfile.c - - use pointers instead of indexing into buffer when reading the - contents of the history file in read_history_range and - history_truncate_file - - 3/21 - ---- -lib/readline/histfile.c - - new file, with code to mmap the history file for reading and - writing (depends on HAVE_MMAP, currently nothing checks for that) - - 3/25 - ---- -error.[ch] - - new function, err_badarraysub(s), calls report_error with standard - `bad array subscript' message - - new function, err_unboundvar(s), calls report_error with standard - `unbound variable' message - - new function, err_readonly(s), calls report_error with standard - `readonly variable' message - -{arrayfunc,subst}.c - - call err_badarraysub where appropriate - -{expr,subst}.c - - call err_unboundvar where appropriate - -{arrayfunc,variables}.c - - call err_readonly where appropriate - -shell.c - - changed text of bad option error messages to be the same as that - printed for builtin errors - -builtins/common.c - - changed sh_invalidopt to print the invalid option before the rest - of the error message (required some tests to be modified) - - new function, sh_readonly, calls builtin_error with standard - `readonly variable' message - -variables.c,builtins/declare.def - - call sh_readonly where appropriate - -lib/sh/stringvec.c - - added strvec_remove (sv, s), removes S from SV and shuffles rest of - elements down 1 - -lib/sh/stringlist.c - - added strlist_remove(sl, s), just calls strvec_remove on the - component list - -externs.h - - new extern declarations for strvec_remove and strlist_remove - - fixed extern declaration for strvec_search; the arguments were - reversed (unimportant, it's not compiled into the shell) - -subst.c - - change param_expand to call quote_escapes on values retrieved when - expanding the positional parameters - - change parameter_brace_expand_word to quote escapes on values - retrieved when expanding the positional parameters - - fix parameter_brace_substring to quote escape characters on unquoted - substrings extracted from variable values (needed to separate case - VT_VARIABLE from VT_ARRAYMEMBER for this, since, because - get_var_and_type calls array_value for VT_ARRAYMEMBER, we need to - skip over quoted characters in an already-appropriately-quoted - string to find the substring we want) - - fix parameter_brace_substring to quote escape characters in the - value returned by pos_params when expanding subsets of the - positional parameters and not within double quotes (in which case - pos_params() quotes the string for us) - - fix parameter_brace_substring to quote escape characters in the - value returned by array_subrange when expanding subsets of an - array and not within double quotes (in which case - array_subrange() quotes the string for us) - - new function, quoted_strlen(s), does strlen(s) while skipping over - characters quoted with CTLESC (#ifdef INCLUDE_UNUSED, since it's - not used yet) - - changed pos_params() so it always returns a list whose members are - quoted strings if (quoted&(Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) != 0 - -arrayfunc.c - - fix array_value to consistently call quote_escapes, even when a - non-array variable is being subscripted with element 0, in which - case we return the variable value - -lib/sh/strtrans.c - - make the for_echo parameter to ansicstr a `flags' parameter that - has its old `for echo' meaning if flags&1 is non-zero (which is - consistent with the old code) - - Added code to the `flags' parameter to ansicstr so that if flags&2 - is non-zero, CTLESC and CTLNUL are escaped with CTLESC in the - expanded string - - change ansiexpand() to call ansicstr with a `flags' parameter of 2 - - 3/26 - ---- -lib/readline/histfile.c - - when reading and writing the history file, use malloc instead of - xmalloc and handle failures gracefully, so the application doesn't - abort if the history file or history list is too big - - 3/27 - ---- -arrayfunc.c - - changed array_value_internal to take an additional `int *' - parameter, in which is returned the type of array indexing - performed (array[@] vs. array or array[index]) - - changed array_value and get_array_value to take a corresponding - extra parameter and pass it to array_value_internal - - changed array_value_internal to no longer return newly-allocated - memory or quote CTLESC and CTLNUL in the returned string if - `simple' array indexing (subscript not `@' or `*') is being - performed. This makes it more like a variable lookup - -arrayfunc.h - - changed prototypes for array_value and get_array_value - -expr.c - - added new parameter to call to get_array_value in expr_streval - - don't need to free memory returned by get_array_value any more - -subst.c - - quote_escapes now works with multibyte characters - - dequote_string now works with multibyte characters - - dequote_escapes is now needed, so it's compiled in, and it - now works with multibyte characters - - remove_quoted_escapes now just calls dequote_escapes and copies the - result over the argument string - - remove_quoted_nulls now returns its char * argument, parallels - remove_quoted_escapes - - parameter_brace_expand_word now passes the new argument to - array_value and quotes CTLESC and CTLNUL in the result if it's a - `simple' array expansion by calling quote_escapes - - get_var_and_type now returns VT_ARRAYMEMBER for references like - ${array} where `array' is an array variable (just like ${array[0]}). - Documented (in comment) that a VT_VARIABLE return value means that - quote_escapes has been called at some point - - changed callers of get_var_and_type to no longer free value if - VT_ARRAYMEMBER is returned as type - - changed parameter_brace_substring and parameter_brace_patsub to - call dequote_escapes on the value from get_var_and_type if the - type is VT_VARIABLE, since the substring and pattern substitution - code doesn't understand CTLESC quoting - - parameter_brace_substring no longer needs to call quoted_substring - for the VT_ARRAYMEMBER case - - changed parameter_brace_patsub to call quote_escapes on the result - of pat_subst for the VT_VARIABLE and VT_ARRAYMEMBER cases, and to - quote the returned string in the VT_ARRAYVAR and VT_POSPARAMS cases - if the `MATCH_QUOTED' flag isn't set (if it is, the pattern - substitution functions perform any necessary quoting) - - quoted_substring is no longer used; it's now #ifdef INCLUDE_UNUSED - -lib/malloc/mstats.h - - new member in _malstats: u_bits32_t bytesreq, the total number of - bytes requested by the caller via calls to malloc() and realloc() - -lib/malloc/stats.c - - print bytesreq member in _print_malloc_stats - - don't print statistics for buckets for which nmal == 0 (no mallocs) - -lib/malloc/malloc.c - - modified internal_malloc, internal_realloc to keep running total of - number of bytes requested by calling application - -shell.c - - sh_exit is now compiled in; exit_shell calls sh_exit - -error.c - - changed fatal_error, report_error, parser_error to call sh_exit - - 3/28 - ---- -subst.[ch] - - changed Q_NOQUOTE to Q_PATQUOTE; it makes the intent more clear - -subst.c - - moved code from parameter_brace_expand into a new function that - dispatches for pattern substitution: parameter_brace_remove_pattern - - changed structure of parameter_brace_remove_pattern to be like - parameter_brace_patsub and its ilk: call get_var_and_type to - isolate the variable name, move the pattern isolation code out of - the various *_remove_pattern functions into - parameter_brace_remove_pattern and pass the results to the various - functions, use a switch on the return value from get_var_and_type - to decide which function to call, regularized the arguments to the - separate pattern removal functions - - parameter_brace_remove_pattern now properly quotes escape chars in - the returned value - - changed get_var_and_type to call dequote_escapes on the `value' - parameter for case VT_VARIABLE and return the result in *valp, - so the calling functions don't have to do it themselves; changed - callers appropriately - - fixed getpattern() where it broke posix compliance: if you enclose - a pattern removal spec in double quotes, the outer double quotes - have no effect on the pattern (POSIX.1-200x 2.6.2). This uncovered - a bug in the test suite (!) - -pathexp.c - - fixed a problem with quote_string_for_globbing where it would change - consecutive CTLESC chars all to \ instead of changing every other - quoted char - - 3/31 - ---- -lib/malloc/{malloc,stats}.c - - moved declaration of _mstats to malloc.c so stats.o doesn't get - linked into the shell if the stats functions aren't called - - 4/2 - --- -lib/glob/smatch.c - - introduce `XCHAR' define, which is the type of arguments passed to - strcoll/strcmp/strlen and their wide-character equivalents, added - appropriate casts - - static arrays in single-byte version of rangecmp() are `char', not - `unsigned char', so compilers don't complain about calls to strcoll - -lib/glob/sm_loop.c - - casts for `XCHAR' and `XCHAR *' arguments to libc functions - - use prototype declaration for BRACKMATCH if `PROTOTYPES' is defined - to avoid problems with type promotion (unsigned char -> int) - -lib/glob/collsyms.h - - `name' member of struct _COLLSYM is now of type `XCHAR *', since - some compilers don't like `unsigned char *' initializers from - constant strings - -[bash-2.05b-alpha1 released] - - 4/3 - --- -builtins/{evalstring.c,common.h} - - new flag for parse_and_execute, SEVAL_NOFREE, means to not free - the argument string when finished - -lib/readline/text.c - - fixed a trivial typo in _rl_insert_char when reading multibyte - char sequences - - replace calls to ding() with rl_ding() - -include/chartypes.h - - remove SIGN_EXTEND_CHAR and TOASCII macros; they're unused - -make_cmd.c - - include dispose_cmd.h for extern function declarations - -lib/glob/glob.c - - include `shmbutil.h' and `xmalloc.h' for extern function declarations - -lib/glob/smatch.c - - include `xmalloc.h' for extern function declarations - -shell.c - - fix maybe_make_restricted to use its argument instead of global - `shell_name' - -version.c - - update copyright message to include this year - -lib/readline/display.c - - fixes from Jiro SEKIBA <jir@yamato.ibm.com> to fix autowrapping - when using multibyte characters - -lib/glob/sm_loop.c - - fixed a problem in BRACKMATCH where not enough memory was allocated - to hold a multibyte character when parsing POSIX.2 char class names - -support/config.{guess,sub} - - updated via patch from Paul Eggert with latest GNU additions - -variables.c - - var_lookup should use its `vcontext' argument instead of - unconditionally using `shell_variables' - - 4/4 - --- -builtins/bind.def,doc/{bash.1,bashref.texi} - - changed the usage summary and help text to make it clear that any - readline command that may appear in ~/.inputrc may be supplied as - one of the non-option arguments to `bind' - -builtins/mkbuiltins.c - - added support for `-H' option, which means to write long documentation - for each builtin to a separate file in the `helpfiles' directory - -builtins/Makefile.in - - new target `helpdoc', just creates long doc files in helpfiles - directory - -lib/sh/zcatfd.c - - new file, with zcatfd(int fd, int ofd, char *fn); dumps data from - FD to OFD - -Makefile.in,lib/sh/Makefile.in - - added zcatfd.c, zcatfd.o member of libsh.a - -builtins/evalstring.c - - changed cat_file to call zcatfd(fd, 1, fn) - -builtins/{shopt,colon}.def - - removed the $DOCNAME directive for `shopt', `true', and `false'; - just use the names - - changed $DOCNAME for `:' to just be `colon' instead of - `colon_builtin' - -builtins/reserved.def - - added help entries for ((, [[, `for ((' - -builtins/let.def - - add id++, id--, ++id, --id, ** to help text - - 4/8 - --- -builtins/bashgetopt.[ch] - - changed to allow options beginning with `+', enabled by a leading - `+' in the option string - - new variable, list_opttype, set to `-' or `+' - -builtins/{common.c,{builtin,eval,exit,fg_bg,let,printf,pushd,return,source,wait}.def - - changes to allow a `--' option for every builtin that accepts - operands but not options, as per posix.1-2001 - -builtins/{declare,setattr}.def - - use internal_getopt for parsing options, now that it supports `+' - -builtins/set.def - - use internal_getopt for initial option parse, now that it supports - a leading `+' - - -{configure,Makefile}.in, builtins/{Makefile.in,help.def,mkbuiltins.c} - - support for a new configure option, ``--enable-separate-helpfiles'', - moves the `long' help text to separate help files, installed by - default into ${datadir}/bash, one file per builtin. Off by - default -- it saves 47K, but it's only 47K, and it's in the text - segment - -flags.c - - build internal_getopt() option string argument from flags array at - runtime in shell.c - -shell.c - - new variable to control writing malloc stats at exit: - malloc_trace_at_exit, 0 by default - -lib/malloc/malloc.c - - heavily updated: - o partial page allocated on first call to malloc to make - subsequent sbrks page-aligned no longer wasted - o begin and end range guards are now the same value: the chunk - requested - o coalescing code was changed to attempt to coalesce first two - adjacent blocks on the free list; enabled by default - o blocks of size 32 are now candidates for larger block - splitting, since 32 is the most popular size - o blocks of size 32 are now candidates for smaller block - coalescing - o the IN_BUCKET check was changed to just make sure that the - size isn't too big for the bucket, since the `busy block' - checking code may increase the bucket by one or more, - meaning that the old check would fail and cause a panic when - a chunk allocated in such a way was freed - o bin sizes are now precomputed and looked up in an array - rather than being computed at runtime - o moved the _mstats declaration here to avoid the stats code - being linked in even when no stats functions were called - (only matters if MALLOC_DEBUG is defined) - o malloc now keeps track of the address of the top of the heap - and will return large chunks to the system with calls to - sbrk with a negative argument when freeing the top chunk. - Two thresholds: LESSCORE_FRC means to unconditionally return - memory to the system; LESSCORE_MIN means to return memory if - there's at least one block already on the free list - -lib/malloc/mstats.h - - stats struct now keeps track of number of block coalesces by bin, - and the number of times memory was returned to the system by bin - -lib/malloc/stats.c - - trace_malloc_stats now takes a second argument: the name of the file - to write to. The first `%p' in the template file name is replaced - by the pid - - 4/9 - --- -lib/malloc/imalloc.h - - added some macros derived from dlmalloc and glibc malloc to inline - memcpy and memset if the requested size is <= 32 bytes - -lib/malloc/malloc.c - - use MALLOC_MEMSET instead of memset in internal_{malloc,free} - -include/ocache.h - - use OC_MEMSET (variant of MALLOC_MEMSET) in ocache_free - -configure.in, config.h.in - - check for getservent(), define HAVE_GETSERVENT if found - -bashline.c - - punt immediately from bash_servicename_completion_function if - HAVE_GETSERVENT is not defined (cygwin seems to not define it) - - include "input.h" for extern save_token_state() and - restore_token_state() declarations - - change bash_execute_unix_command to call parse_and_execute with - SEVAL_NOHIST flag so the command doesn't get saved on the history - list - - change bash_execute_unix_command to save and restore the current - command line count and the token state (last_read_token, etc.). - Everything else is saved by either parse_and_execute directly or - the call it makes to push_stream(). The shell_input_line stuff - doesn't need to be saved and restored; it's not computed until - readline() returns - - 4/10 - ---- -lib/glob/glob.[ch] - - glob_filename and glob_vector now take an additional `flags' arg - - define GX_MARKDIRS as possible flag value for glob_filename and - glob_vector - -lib/sh/snprintf.c - - fixed some bugs with handling of `g' and `G' formats - - make sure numtoa returns the fractional part correctly when passed 0 - - implemented thousands grouping for `'' flag character - -lib/sh/rename.c - - a few changes to make it more bulletproof - - 4/11 - ---- -lib/glob/glob.c - - added the couple of dozen lines of code to glob_dir_to_array to - finish implementing GX_MARKDIRS - -builtins/set.def - - changed unset builtin so that it no longer considers unsetting an - unset variable or function to be an error - -lib/readline/display.c - - fix to rl_redisplay for a problem which caused display to be messed - up when the last line of a multi-line prompt (possibly containing - invisible characters) was longer than the screen width - - 4/15 - ---- -aclocal.m4 - - use AC_DEFINE_UNQUOTED in BASH_SYS_DEFAULT_MAIL_DIR instead of - enumerating all of the possible values and using AC_DEFINE - - 4/16 - ---- -Makefile.in, {builtins,support}/Makefile.in - - new variables, CFLAGS_FOR_BUILD and CPPFLAGS_FOR_BUILD, substituted - by `configure' - - changed CCFLAGS_FOR_BUILD to BASE_CCFLAGS, removing $(CPPFLAGS); - CCFLAGS and CCFLAGS_FOR_BUILD now include $(BASE_CCFLAGS) with - (possibly) different values for CPPFLAGS and CFLAGS - - GCC_LINT_CFLAGS now includes $(BASE_CCFLAGS) and $(CPPFLAGS) - instead of CCFLAGS_FOR_BUILD - - new variable, LDFLAGS_FOR_BUILD, right now equivalent to LDFLAGS - - remove $(CPPFLAGS) from recipes for buildversion, mksignames, and - mksyntax - -configure.in - - compute and substitute CFLAGS_FOR_BUILD, CPPFLAGS_FOR_BUILD, and - LDFLAGS_FOR_BUILD - - changed qnx to use LOCAL_LDFLAGS and LOCAL_LIBS instead of putting - everything in LOCAL_LDFLAGS - -builtins/Makefile.in - - remove $(PROFILE_FLAGS) from recipe for building `mkbuiltins' - - use LDFLAGS_FOR_BUILD instead of LDFLAGS in recipe for building - `mkbuiltins' - -Makefile.in - - use $(CC_FOR_BUILD) and $(CCFLAGS_FOR_BUILD) to build auxiliary - test programs (printenv, recho, zecho) - -support/Makefile.in - - use CC_FOR_BUILD and CCFLAGS_FOR_BUILD in recipe for building - `man2html' - -lib/tilde/Makefile.in - - substitute PROFILE_FLAGS, use PROFILE_FLAGS in $(CCFLAGS) - - 4/25 - ---- -Makefile.in, configure.in - - moved RELSTATUS to configure.in; configure substitutes it into - the generated Makefile - -lib/sh/snprintf.c - - fix wchars() to deal with systems where MB_CUR_MAX is not a - constant expression - - 5/2 - --- -lib/sh/shquote.c - - add `,' to list of chars that are backslash-quoted. It doesn't - hurt normal usage and prevents filenames with commas from being - inappropriately split by brace expansion after using - complete-into-braces - - 5/6 - --- -lib/sh/xstrchr.c - - we only need the check of MB_CUR_MAX and the slow code for a - few encodings, and even then only for a subset of the charset - -arrayfunc.c - - some speedups for skipsubscript and multibyte chars from Bruno Haible - -locale.c - - changed set_lang to call setlocale(LC_ALL, ...) if LC_ALL doesn't - already have a value, but doesn't change any shell variables - -include/shmbutil.h - - major speedups from Bruno Haible, mostly concerned with reducing - the number of strlen(3) calls - -subst.c - - change callers of macros in shmbutil.h to add extra argument as - necessary - - skip_single_quoted and skip_double_quoted take another argument: - the length of the string; mostly useful when using multibyte chars - - many speedups from precomputing string lengths at function start - - fixed a small bug in de_backslash in the midst of rewriting for - better efficiency - -{braces,make_cmd,pathexp}.c - - change callers of macros in shmbutil.h to add extra argument as - necessary - -pathexp.c - - fix a one-too-far problem with multibyte chars in - unquoted_glob_pattern_p - -braces.c - - brace_gobbler takes a new argument, the length of the passed string - - expand_amble takes a new argument, the length of the passed string - - 5/7 - --- -subst.c - - modified remove_quoted_nulls to eliminate the memory allocation and - do the copy in place using the same strategy as de_backslash - -lib/readline/{rldefs.h,complete.c} - - new define RL_QF_OTHER_QUOTE, so _rl_find_completion_word can note - that it found a quoting character other than \'" that appears in - rl_completer_quote_characters - - 5/9 - --- -jobs.c - - save and restore old value of jobs_list_frozen when calling trap - handlers from set_job_status_and_cleanup to avoid seg faults when - running recursive trap handlers - - 5/10 - ---- -builtins/common.h - - new #defines to use for value of changed_dollar_vars (provides - information about the caller who wants to blow away the old dollar - variables) - -builtins/common.c - - changed set_dollar_vars_changed to set changed_dollar_vars to one - of the ARGS_* values depending on the caller and environment - -builtins/source.def - - source restores the positional parameters unless the `set' builtin - was called to specify a new set while not executing a shell function - - 5/13 - ---- -POSIX - - new file, was in CWRU/POSIX.NOTES - -doc/{Makefile.in,Makefile} - - changed `posix' rule to modify ../POSIX - -doc/mkposix - - write to `POSIX' by default - -lib/sh/strtrans.c - - when ansicstr is parsing a format string for `echo -e' (or the - equivalent xpg_echo option is enabled), obey the POSIX-2001/SUSv3 - standard and accept 0-3 octal digits after a leading `0' - -doc/{bash.1,bashref.texi} - - updated `echo' description to note that up to three octal digits - are now accepted following `\0' - - 5/16 - ---- -doc/Makefile.in - - remove the generated documentation on `make distclean' if the - build directory and source directory are not the same - -Makefile.in - - descend into `support' subdirectory on a `make clean' and - `make distclean' - - remove parser-built, y.tab[ch] on a `make distclean' if the build - directory and source directory are not the same - -support/Makefile.in - - support various `clean' targets and remove man2html.o and man2html - -{configure,Makefile}.in - - move values for DEBUG and MALLOC_DEBUG into configure.in; on by - default for development versions; off by default for releases - (off for profiling, too) - - 5/21 - ---- -parse.y - - modified the grammar to allow a simple_list followed by yacc_EOF - to terminate a command. This fixes problems with things like - a backslash-newline at the end of an `eval'd string - - change handle_eof_input_unit() to reset the token state before - calling prompt_again(), in case the prompt to be evaluated contains - a command substitution - - 5/23 - ---- -lib/readline/vi_mode.c - - fix `r' command (rl_vi_change_char) when HANDLE_MULTIBYTE is defined - but MB_CUR_MAX == 1 - - 5/24 - ---- -lib/malloc/watch.c - - don't try to print `file' argument to _watch_warn if it's null - -lib/malloc/malloc.c - - changed guard checking code in internal_{malloc,free,realloc} to - access memory as (char *) and copy into a union instead of - casting and dereferencing a pointer to u_bits32_t, since that - results in unaligned accesses which will cause Sparcs to upchuck - - 5/30 - ---- -[bash-2.05b-beta1 released] - -lib/readline/text.c - - fixed a problem with rl_transpose_chars on systems supporting - multibyte characters with a locale that doesn't have any multibyte - chars - - 6/4 - --- -expr.c - - fix a/=0 and a%=0 to throw evaluation errors rather than core dumps - -lib/readline/display.c - - fix core dump when line wrapping a multibyte character (line - accidentally dropped from the original patch) - -lib/readline/mbutil.c - - fix reversed return value from _rl_is_mbchar_matched; fixes problem - with backward-char-search - - 6/10 - ---- -lib/sh/getenv.c - - fix getenv to not free value returned by find_tempenv_variable - - add setenv, putenv, unsetenv for completeness - - 6/12 - ---- -shell.c - - change init_noninteractive to init expand_aliases to the value of - posixly_correct - - don't initialize expand_aliases to posixly_correct anywhere else. - This allows the -O expand_aliases invocation option to work correctly - -general.c - - fix move_to_high_fd to not try the dup2 unless the fd loop results - in an fd > 3; just return the passed file descriptor otherwise - - use HIGH_FD_MAX, defined in general.h, instead of hard-coded 256 - as highest file descriptor to try - -subst.c - - in process_substitute, call move_to_high_fd with `maxfd' parameter - of -1 instead of 64, so move_to_high_fd will use its maximum - - 6/21 - ---- -lib/malloc/malloc.c - - don't bother calling MALLOC_MEMSET if the requested size is 0 - -builtins/setattr.def - - note in short doc that export and readonly can take assignment - statements as arguments - -error.c - - new function, error_prolog(), to capture common error message - prefix code (except for parser errors) - - 6/25 - ---- -aclocal.m4 - - add tests for standard-conforming declarations for putenv and - unsetenv in system header files - -{configure,config.h}.in - - call BASH_FUNC_STD_PUTENV and BASH_FUNC_STD_UNSETENV, define - HAVE_STD_GETENV and HAVE_STD_UNSETENV, respectively, if they - succeed - -lib/sh/getenv.c - - change putenv and unsetenv to take differing prototypes in - stdlib.h into account - - 6/27 - ---- -[bash-2.05b-beta2 released] - - 6/28 - ---- -builtins/common.c - - fix get_job_spec so that %N works when N is the size of the jobs - list (%8 means job 8, but the 7th member of the jobs array, so - it's OK if N == job_slots because the function returns N-1) - - 7/1 - --- -shell.c - - turn off line editing if $EMACS is set to `t' - - 7/10 - ---- -builtins/set.def - - remove mention of `-i' from long help doc, since it has no effect - - 7/17 - ---- -[bash-2.05b released] - - 7/18 - ---- - -lib/malloc/malloc.c - - make sure that the `free_return' label has a non-empty statement - to branch to - - 7/19 - ---- -locale.c - - only call setlocale() from set_lang() if HAVE_SETLOCALE is defined; - otherwise just return 0 - -lib/readline/mbutil.c - - only try to memset `ps' in _rl_get_char_len if it's non-NULL. Ditto - for _rl_adjust_point - - 7/23 - ---- -execute_cmd.c - - fix for executing_line_number() when compiling without conditional - commands, dparen arithmetic or the arithmetic for command - - - 7/24 - ---- -support/Makefile.in - - fix maintainer-clean, distclean, mostlyclean targets - -builtins/common.c - - fix bug in sh_nojobs where it doesn't pass the right number of args - to builtin_error - -bashline.c - - when using command completion and trying to avoid appending a slash - if there's a directory with the same name in the current directory, - use absolute_pathname() instead of just checking whether the first - char of the match is a slash to catch things like ./ and ../ - -examples/complete/bashcc-1.0.1.tar.gz - - a package of completions for Clear Case, from Richard S. Smith - (http://www.rssnet.org/bashcc.html) - -input.c - - fix check_bash_input to call sync_buffered_stream if the passed fd - is 0 and the shell is currently reading input from fd 0 -- all it - should cost is maybe an additional read system call, and it fixes - the bug where an input redirection to a builtin inside a script - which is being read from stdin causes the already-read-and-buffered - part of the script to be thrown away, e.g.: - - bash < x1 - - where x1 is - - hostname - read Input < t.in - echo $Input - echo xxx - -execute_cmd.c - - in initialize_subshell(), call unset_bash_input (0) to not mess with - fd 0 if that's where bash thinks it's reading input from. Fixes - bug reported by jg@cs.tu-berlin.de on 17 July 2002. Should be a way - to check whether or not the current fd 0 at the time of the call has - not been redirected, like in the bug report. Also might eventually - want to throw in a sync_buffered_stream if bash is reading input - from fd 0 in a non-interactive shell into a buffered stream, so the - stream is sync'd -- might be necessary for some uses - - 7/25 - ---- -lib/readline/signals.c - - make sure rl_catch_sigwinch is declared even if SIGWINCH is not - defined, so the readline state saving and restoring functions in - readline.c are always the same size even if SIGWINCH is not defined, - and undefined references don't occur when SIGWINCH is not defined - - 7/30 - ---- -bashline.c - - augment patch from 7/24 to not disable rl_filename_completion_desired - if the first char of the match is `~' - -lib/readline/bind.c - - when creating `shadow' keymaps `bound' to ANYOTHERKEY, don't bind - a key whose type is ISFUNC but whose function is the `fake' - rl_do_lowercase_version (fixes debian bash bug #154123) - -lib/readline/readline.c - - don't call _rl_vi_set_last from _rl_dispatch_subseq if - key == ANYOTHERKEY (when truncated to `sizeof(char)', it will be 0, - which strchr will find in `vi_textmod') - - 7/31 - ---- -lib/readline/input.c - - fix rl_gather_tyi to only slurp up one line of available input, even - if more than one line is available (fixes debian bash bug #144585) - - 8/3 - --- -bashline.c - - better fix for command completion problem -- test for directory - explicitly with test_for_directory before turning off - rl_filename_completion_desired, since that's the case we're trying - to protect against - - 8/5 - --- -include/shmbutil.h - - fix ADVANCE_CHAR macro to advance the string pointer if mbrlen - returns 0, indicating that the null wide character (wide string - terminator) was found (debian bash bug #155436) - -lib/readline/mbutil.c - - fix _rl_adjust_point to increment the string pointer if mbrlen - returns 0 - -support/shobj-conf - - fix for the `-install_name' value in SHLIB_XLDFLAGS assignment for - Darwin from the fink folks - - 8/6 - --- -builtins/exit.def - - broke code that runs ~/.bash_logout out into a separate function: - bash_logout() - -builtins/common.h - - extern declaration for bash_logout() - -eval.c - - call bash_logout() from alrm_catcher(), so timed-out login shells - run ~/.bash_logout before processing the exit trap - -lib/sh/strtrans.c - - implemented $'\x{hexdigits}' expansion from ksh93 - -configure.in - - define RECYCLES_PIDS in LOCAL_CFLAGS for cygwin; don't bother to - link with -luser32 - -examples/loadables/strftime.c - - new loadable builtin, interface to strftime(3) - - 8/7 - --- -parse.y - - parse_arith_cmd now takes a second argument, a flag saying whether - or not to add double quotes to a parsed arithmetic command; changed - callers - - changed parse_dparen so it tells parse_arith_cmd to not add the - double quotes and therefore doesn't need to remove them - - change parse_dparen to add W_NOGLOB|W_NOSPLIT|W_QUOTED flags to word - created when parsing (( ... )) arithmetic command, since the double - quotes are no longer added - -make_cmd.c - - in make_arith_for_expr, set the flags on the created word to - W_NOGLOB|W_NOSPLIT|W_QUOTED - -execute_cmd.c - - change execute_arith_command to expand the expression with - expand_words_no_vars, like the arithmetic for command code does - - fix execute_arith_command to handle the case where the expanded - expression results in a NULL word without crashing - -tests/{arith-for,cprint}.tests - - change expected output to account for no longer adding quotes to - ((...)) commands - - 8/8 - --- -print_cmd.c - - take out the space after printing the `((' and before printing the - `))' in print_arith_command, print_arith_for_command, and - xtrace_print_arith_cmd - -tests/{arith-for,cprint}.tests - - change expected output to account for no longer adding leading and - trailing spaces when printing ((...)) and arithmetic for commands - - 8/17 - ---- -subst.c - - fix issep() define to handle case where separators[0] == '\0', in - which case it always returns false - -lib/readline/histexpand.c - - fix off-by-one error in history_expand_internal when using the `g' - modifier that causes it to skip every other match when matching a - single character (reported by gjyun90@resl.auto.inha.ac.kr) - -doc/{bash.1,bashref.texi} - - make sure that the name=word form of argument to declare/typeset, - export, and readonly is documented in the description - - 8/30 - ---- -lib/readline/histexpand.c - - make history_expand_internal understand double quotes, because - single quotes are not special inside double quotes, according to - our shell-like quoting conventions. We don't want unmatched - single quotes inside double-quoted strings inhibiting history - expansion - - make `a' modifier equivalent to `g' modifier for compatibility with - the BSD csh - - add a `G' modifier that performs a given substitution once per word - (tokenized as the shell would do it) like the BSD csh `g' modifier - - 8/31 - ---- -braces.c - - when compiling for the shell, treat ${...} like \{...} instead of - trying to peek backward when we see a `{'. This makes it easier - to handle things like \${, which should be brace expanded because - the $ is quoted - - 9/7 - --- -aclocal.m4 - - redirect stdin from /dev/null in BASH_CHECK_DEV_FD before testing - the readability of /dev/fd/0, so we're dealing with a known quantity - - 9/11 - ---- -[prayers for the victims of 9/11/01] - -shell.c - - fix maybe_make_restricted to handle a restricted login shell with a - base pathname of `-rbash' and skip over any leading `-' - - 9/13 - ---- -builtins/evalstring.c - - in parse_and_execute, make sure we don't try to run unwind-protects - back to `pe_dispose' after a longjmp back to top_level if the - pe_dispose frame hasn't been initialized - -lib/readline/display.c - - fix problem with prompt overwriting previous output when the output - doesn't contain a newline in a multi-byte locale. This also should - fix the problem of bash slowing down drastically on long lines when - using a multi-byte locale, because it no longer tries to rewrite the - entire line each time. Patch from Jiro SEKIBA <jir@yamato.ibm.com> - -parse.y - - move the typedef for alias_t that is compiled in if ALIAS is not - defined up before the prototype for push_string, since that takes - an alias_t * parameter - -lib/readline/terminal.c - - bind the termcap description's left and right arrow keys to - rl_backward_char and rl_forward_char, respectively, instead of - rl_forward and rl_backward (which are just there for backwards - compatibility) - -aclocal.m4 - - when testing readability of /dev/stdin, redirect stdin from /dev/null - to make sure it's a readable file - - 9/17 - ---- -config-bot.h - - don't test __STDC__ when deciding whether or not to use stdarg.h; - just use it if it's present - -tests/read2.sub - - redirect from /dev/tty when using `read -t' - - 9/20 - ---- -builtins/history.def - - when reading `new' entries from the history file with `history -n', - fix increment of history_lines_this_session by taking any change - in history_base into account - -lib/sh/pathphys.c - - changes to sh_physpath to deal with pathnames that end up being - longer than PATH_MAX without dumping core - -lib/readline/doc/{history.3,hsuser.texinfo},doc/ bash.1 - - documented new `a' and `G' history modifiers - - 9/25 - ---- -lib/readline/misc.c - - when traversing the history list with arrow keys in vi insertion - mode, put the cursor at the end of the line (like in emacs mode) - -mksyntax.c - - don't try to use \a and \v unless __STDC__ is defined; use the - ascii integer equivalents otherwise - - include "config.h" in the generated syntax.c file for a possible - definition of `const' - -doc/{bash.1,bashref.texi} - - document the meaning of a null directory in $PATH - - 9/26 - ---- -parse.y - - fix set_line_mbstate to handle case where mbrlen() returns 0, - indicating the null wide character - - fix set_line_mbstate so we don't directly compare a char variable - to EOF, since char can (and is) unsigned on some machines - -bashline.c - - change bash_execute_unix_command to save a little bit more state: - last_shell_builtin, this_shell_builtin, last_command_exit_value - - 9/27 - ---- -execute_cmd.c - - tentative change to execute_simple_command to avoid freeing freed - memory in the case where bash forks early but still ends up calling - execute_disk_command, without passing newly-allocated memory to - make_child. This may fix the core dumps with the linux-from-scratch - folks - - 9/28 - ---- -Makefile.in,{builtins,lib/sh}/Makefile.in - - fix up dependencies, mostly on ${BUILD_DIR}/version.h, so that - parallel makes work with GNU and BSD makes - -shell.h - - new struct to save partial parsing state when doing things like - bash_execute_unix_command and other operations that execute - commands while a line is being entered and parsed - -parse.y - - new functions, save_parser_state() and restore_parser_state(), to - save and restore partial parsing state - -bashline.c - - change bash_execute_unix_command to call {save,restore}_parser_state - -builtins/jobs.def - - change execute_list_with_replacements to eliminate a run_unwind_frame - in favor of calling the cleanup explicitly and discarding the frame - -execute_cmd.c - - change execute_for_command to avoid a run_unwind_frame in the case - where the loop variable is readonly or otherwise not assignable - - change execute_select_command and execute_simple_command to use - discard_unwind_frame by running the cleanup code explicitly, instead - of using run_unwind_frame - - make sure execute_select_command decreases loop_level even on error - - 9/30 - ---- -doc/{bash.1,bashref.texi} - - fixed description of `unset' now that unsetting a previously-unset - variable is no longer an error - - 10/3 - ---- -{configure,config.h}.in - - augment check for strtold with additional check to detect the - horribly broken hp/ux 11.x implementation that returns `long_double'; - defines STRTOLD_BROKEN if so - -builtins/printf.def - - define floatmax_t as `double' if STRTOLD_BROKEN is defined - - 10/5 - ---- -lib/readline/keymaps.c - - don't automatically bind uppercase keys to rl_do_lowercase_version - in rl_make_bare_keymap - -lib/readline/readline.c - - explicitly check for ANYOTHERKEY binding to rl_do_lowercase_version - and dispatch to lowercase of key when a prefix is not matched - - 10/12 - ----- -bashline.c - - set COMP_WORDBREAKS in enable_hostname_completion to the value - of rl_completer_word_break_characters - -variables.c - - new special variable COMP_WORDBREAKS, controls the value of - rl_completer_word_break_characters - -variables.h - - new extern declaration for sv_comp_wordbreaks() - -subst.c - - change split_at_delims to behave more like shell word splitting if - the passed value for the delimiters is NULL, indicating that the - function is to use $IFS to split - -{execute_cmd,jobs,test,findcmd,input,make_cmd,redir,shell}.c -builtins/mkbuiltins.c,builtins/{fc,history,source,umask}.def -lib/sh/netconn.c -lib/termcap/termcap.c -lib/readline/histfile.c - - make sure all inclusions of <sys/file.h> are protected by - HAVE_SYS_FILE_H - -bashline.c - - don't turn off rl_filename_completion_desired in - attempt_shell_completion if the partial pathname contains a slash. - This still doesn't solve the problem of partial pathname completion - starting with a directory in the current directory without a - leading `./'. There's no way to tell the difference between that - and a file found in $PATH (which may contain `.') at the point that - attempt_shell_completion acts - - 10/18 - ----- -locale.c - - don't set lc_all to the default locale when LC_ALL is being unset - - new function, reset_locale_vars(), called to recompute the correct - locale variable values when LC_ALL is unset - - changed set_lang to not set LC_ALL, which it never should have been - doing in the first place, and to maintain a local variable `lang' - corresponding to $LANG - - change get_locale_var to use the precedence posix.2 specifies: - LC_ALL overrides individual variables; LANG, if set, is the default - - change set_locale_var to call get_locale_var to get the appropriate - value for the variable being set or unset - - call get_locale_var instead of using passed value in set_locale_var - to get the defaulting and precedence right - -lib/readline/nls.c - - new function, _rl_get_locale_var(), which does the same thing as - locale.c:get_locale_var(), with the right precedence and defaulting, - using sh_get_env_value to get the right bash variable values - - if HAVE_SETLOCALE is defined, _rl_init_eightbit first calls - _rl_get_locale_var to get the right value for LC_CTYPE, and uses - that in the call to setlocale. If _rl_get_locale_var returns NULL, - call setlocale() to get the current international environment, and, - finally, if that returns null, call setlocale with a second argument - of "" to force the implementation's `native' environment - -pcomplete.c - - change gen_wordlist_completions to dequote the text before comparing - it against the expanded word list - - changed gen_matches_from_itemlist to do the same thing - -bashline.c - - new global function, bash_dequote_word, calls bash_dequote_filename - on the text passed. Used by the programmable completion code - -lib/readline/histfile.c - - make sure that whenever read_history_range returns a non-zero value - that it sets errno to some useful value - - 10/19 - ----- -variables.c - - COMP_WORDBREAKS is now a dynamic variable, mirroring value of - rl_completer_word_break_characters. Makes sure that the variable - always points to dynamic memory if it's not null or the readline - default - -bashline.c - - change enable_hostname_completion to manage a dynamic value of - rl_completer_word_break_characters, since assignments to - COMP_WORDBREAKS can change its value unpredictably - -lib/readline/{complete.c,readline.h} - - rl_completer_word_break_characters no longer has `const' attribute - -bashline.c - - clean up necessary places due to rl_completer_word_break_characters - no longer being `const' - -doc/{bash.1,bashref.texi} - - document new COMP_WORDBREAKS variable - - 10/21 - ----- -print_cmd.c - - fix indirection_level_string to handle the case where the decoded - $PS4 is null without seg faulting - - 10/22 - ----- -builtins/shift.def - - make sure that there is actually an argument when reporting a shift - count that exceeds the number of positional paramters and - shift_verbose is enabled - -lib/readline/rltty.c - - change SET_SPECIAL to call a new function, set_special_char, since - it contains a block. It's called infrequently, so the performance - impact of making it a function should be negligible, and it helps - debugging - - 10/29 - ----- -bashline.c - - make sure the editor in VI_EDIT_COMMAND and EMACS_EDIT_COMMAND is - quoted; it might contain spaces (e.g., `emacs -nw') - -aclocal.m4 - - cache ac_cv_rl_version in RL_LIB_READLINE_VERSION macro - -configure.in - - change logic that sets RL_INCLUDEDIR so that it doesn't try to set - a bogus include path if the argument to --with-installed-readline - is `yes' -- helps with cross-compiling - -lib/readline/histexpand.c - - fix history_tokenize_word so that it handles <( and >( better - - 10/30 - ----- -redir.c - - fix write_here_string so it handles the case where `herestr' expands - to NULL without seg faulting - - 10/31 - ----- -mailcheck.c - - reverse logic flip from bash-2.05 that handled systems that don't - change the atime when the mailbox is accessed; make sure the file - is bigger before we report new mail. This is the case in the vast - majority of cases. Reported by jim@jtan.com - - 11/5 - ---- -parse.y - - change action for `for x; { list; }' and corresponding `select' - production to use \"$@\" instead of just $@, as it is with all the - other actions - - 11/9 - ---- -parse.y - - new flag for parse_matched_pair: P_DQUOTE, indicating that the - pair of characters being matched is between double quotes - - parse_matched_pair now passes P_DQUOTE down to recursive calls: - if the open char to be matched is a `"' or the passed-in flags - include P_DQUOTE, set the local `rflags' variable to P_DQUOTE and - pass `rflags' down to recursive calls - - if `rflags' includes P_DQUOTE, don't try to ansiexpand $'...' or - locale expand $"..."; consistent with other quoting constructs - - 11/11 - ----- -doc/{bash.1,bashref.texi} - - explicitly note that variables referenced in arithmetic expressions - without using `$' evaluate to 0 if they are null or unset - - note that a null variable value evaluates to 0 when used in an - arithmetic context, like when a variable with the `-i' attribute is - assigned a null value - - document the ${!prefix@} expansion as equivalent to ${!prefix*} - - 11/12 - ----- -doc/{bash.1,bashref.texi} - - note that the value of an arithmetic expression is as in C - - change the wording to note that `arithmetic evaluation' (not - arithmetic expansion, which has a different meaning) is performed - on the value assigned to a variable whose integer attribute is set - - 11/13 - ----- -execute_cmd.c - - fix execute_disk_command so it calls exit() after printing the error - message in a restricted shell context if the shell has already forked - (nofork != 0 && there are no pipes) - - 11/19 - ----- -builtins/type.def - - don't report on aliases unless expand_aliases is set and the parser - is performing alias expansion; changed tests/type.tests and - tests/type.right accordingly - - 11/25 - ----- -general.c - - fix for full pathnames including drive letters on cygwin from - Corinna (convert to posix-style paths, which the rest of the - code handles much better) - -lib/readline/text.c - - fixes to overwrite mode from jimmy@is-vn.bg: - o in _rl_overwrite_char, do the overwrite mode self-insert - as one group, even when overwriting more than 1 char - o in _rl_overwrite_char, do the insert before the delete so - that an undo positions the cursor on the character restored, - not to the right of it - o in _rl_overwrite_rubout, don't do rl_insert_char(' ') unless - rl_point < rl_end. Since overwrite-mode self-insert acts as - in insert-mode when at eol, make rubout behave like - insert-mode rubout - - 11/30 - ----- -lib/readline/misc.c - - call rl_replace_line with `1' as second parameter if we're going to - immediately overwrite the undo list - -lib/readline/search.c - - in make_history_line_current, use _rl_replace_text to make the line - replacement an undoable operation. Affects all non-incremental - search functions. - -parse.y - - make behavior introduced on 11/9 dependent on extended_quote - variable, controllable by extquote shopt option. Default setting is - on for backwards compatibility - -builtins/shopt.def - - new `extquote' option to control extended_quote variable - - 12/3 - ---- -jobs.c - - change message printed when attempting to put a background job in - the background with `bg' to include the job id and make the - statement declarative - - 12/10 - ----- -bashhist.h - - define explicit flag values for history_control - -variables.c - - change sv_history_control to use new flag values - - change sv_history_control to parse $HISTCONTROL as a colon-separated - list of values for the history_control variable - -bashhist.c - - change check_history_control to use new flag values and restructure - to remove case statement - - new function hc_erasedups(line); removes all entries matching LINE - from the history list - - call hc_erasedups() from check_add_history after we've determined - that we're saving the line - -doc/{bash.1,bashref.texi} - - documented new options available for $HISTCONTROL and that it can - be a colon-separated list of history control options - - 12/11 - ----- -subst.c - - fix pat_subst() to not increment `e' (pointer to the end of the - matched portion of the string) until after we're sure we're going - around the loop again; fixes problem with empty replacements for - a pattern that doesn't match (bug reported by Don Coleman - <don@coleman.org>) - - 12/17 - ----- -lib/readline/display.c - - fixes to multibyte redisplay from jir@yamato.ibm.com (Jiro SEKIBA): - o speed up calculation of first difference between old and new - lines in the common case - o don't try to see if we're in the middle of a multbyte char - in update_line (we'll see how this one works out) - - 12/18 - ----- -doc/bashref.texi - - make it clear that the `command-list' function definition may be - terminated by an ampersand before the closing brace - - 12/28 - ----- -redir.c - - set `expanding_redir' flag when expanding words in a redirection - -subst.c - - new function, exp_jump_to_top_level(), to do any word expansion - cleanup before a call to jump_to_top_level from within that file; - sets expanding_redir back to 0 before jump_to_top_level - -variables.c - - in find_variable(), don't call find_variable_internal with a second - parameter of 1 if expanding_redir is non-zero - - in find_variable_internal(), don't search the temporary env if - subshell_environment includes SUBSHELL_FORK (indicating a simple - command) and expanding_redir is non-zero - -parse.y - - increment line_number when we read a \<newline> pair - -array.c - - added array_unshift_element and array_shift_element (which just call - array_shift and array_rshift, respectively), for bash debugger - support - - 1/4/2003 - -------- -doc/{bash.1,bashref.texi} - - note in the section describing the execution environment passed to - children that subshells inherit shell functions marked for export - - note in the section describing shell functions the possibility - that exported functions may result in two entries in the environment - with the same name - -parse.y - - when pushing an alias expansion onto the pushed_string list, append - a space to the expanded definition to make the parser's lookahead - work without using the `mustpop' hack in shell_getc - - 1/8 - --- -shell.c - - change calls to exit() with EX_USAGE as a parameter to use - EX_BADUSAGE instead, since EX_USAGE is defined as 258 and is - technically out of range - - 1/14 - ---- -aclocal.m4 - - check for the termcap functions in libc first: if we don't have - to link in another library, let's not do it - - change the test for mbstate_t to use AC_TRY_COMPILE instead of - AC_TRY_RUN - -doc/{bash.1,bashref.texi} - - document that bash turns line editing off if environment variable - EMACS is set to `t' when it starts up - -doc/bash.1 - - minor change to give the ftp url for the latest version of bash in - the bug reports section - -lib/readline/histexpand.c - - in get_history_event, cast a couple of `const char *' variables to - `char *' in function call parameter lists to avoid compiler warnings - - 1/21 - ---- -builtins/cd.def - - change `cd -' so it prints the current working directory after a - successful chdir even when the shell is not interactive - - 1/31 - ---- -lib/readline/doc/rltech.texinfo - - clarified exactly what is meant by the term `application-specific - completion function', made its use consistent, and documented - what variables are changed before such a function is called - -lib/readline/input.c - - new function, _rl_pushed_input_available(), returns non-zero if - there are characters in the input queue managed by rl_get_char - and _rl_unget_char - -lib/readline/rlprivate.h - - new extern declaration for _rl_pushed_input_available - -lib/readline/callback.c - - change rl_callback_read_char to check _rl_pushed_input_available - and loop if there's something there, so characters don't languish - until more keyboard input is read - -execute_cmd.c - - new variable, last_command_exit_signal, non-zero if - last_command_exit_value result from wait_for was result of a signal - -nojobs.c - - keep track of whether or not a given pid was killed by a signal with - a new flag in the pid_list array - - new function int find_termsig_by_pid(pid_t pid) to get the - terminating signal, if any, for a particular pid - - new function int get_termsig(WAIT status) returns the terminating - signal corresponding to status - - set last_command_exit_signal in wait_for and the various wait_for_xx - functions - -jobs.c - - new functions, process_exit_signal and job_exit_signal, return the - signal that killed a given process or job, if a signal caused its - death - - set last_command_exit_signal in wait_for by calling job_exit_signal - or process_exit_signal appropriately - -subst.c - - don't resend SIGINT to ourselves unless last_command_exit_signal is - SIGINT and last_command_exit_value == 128 + SIGINT. This fixes the - $(exit 130) bug reported by Paul Jarc - -expr.c - - new function, expr_bind_variable, calls bind_int_variable and - then stupidly_hack_special_variables. This fixes the - `let OPTIND=1' bug - -bashline.c - - change history_and_alias_expand_line and shell_expand_line to call - history_expand_line_internal so calls to pre_process_line are - localized - - change history_expand_line_internal and cleanup_expansion_error to - temporarily turn off hist_verify before calling pre_process_line - to avoid the effects described by teirllm@dms.auburn.edu - -parse.y - - don't unconditionally turn off PST_ALEXPNEXT in push_string. This - fixes the multiple alias expansion bug reported by Paul Jarc. - -lib/readline/vi_mode.c - - change rl_vi_subst to push `l' instead of ` ' -- it should be - equivalent, but this has been reported to fix a problem in multibyte - locales - -lib/readline/readline.h - - new state flag value RL_STATE_TTYCSAVED, indicates that save_tty_chars - has been called. Since it's only used and visible internally, it's - undocumented - -lib/readline/rltty.h - - changed all of the members of _rl_tty_chars struct to `unsigned char' - -lib/readline/rltty.c - - set the RL_STATE_TTYCSAVED after save_tty_chars is called - - new function, rl_tty_unset_default_bindings(), resets bindings for - everything rl_tty_set_default_bindings() messes with back to - rl_insert, so rl_tty_set_default_bindings can be called again with - possible changes - - new function that does the bulk of the work for - rltty_set_default_bindings: _rl_bind_tty_special_chars() - - change prepare_terminal_settings so that it can track changes to the - terminal special chars made by stty(1): unset the bindings with - rl_tty_unset_default_bindings before calling save_tty_chars, and - _rl_tty_set_default_bindings after, with the new values from - get_tty_settings(). This implements a long-standing request, most - recently made by Tim Waugh of Red Hat. - -lib/readline/readline.h - - extern declaration for rl_tty_unset_default_bindings() - -lib/readline/readline.c - - new function, reset_default_bindings, calls - rl_tty_unset_default_bindings() to reset the terminal special chars - back to rl_insert and then read the new ones - -lib/readline/doc/rltech.texinfo - - documented rl_tty_unset_default_bindings() - - 2/1 - --- -[prayers and condolences to the families of the space shuttle crew members] - -aclocal.m4 - - add checks for mbrtowc and mbrlen in BASH_CHECK_MULTIBYTE - - new check, BASH_FUNC_CTYPE_NONASCII, checks whether or not the ctype - functions handle non-ascii characters correctly - -config.h.in - - add HAVE_MBRTOWC and HAVE_MBRLEN - - add NO_MULTIBYTE_SUPPORT for new configure argument - - add CTYPE_NON_ASCII - -config-bot.h, lib/readline/rlmbutil.h - - make sure that mbrtowc, mbrlen, and wcwidth are all present before - turning on HANDLE_MULTIBYTE - - turn off multibyte chars if NO_MULTIBYTE_SUPPORT is defined - -configure.in - - new argument --enable-multibyte (enabled by default), allows - multibyte support to be turned off even on systems that support it - -lib/readline/chardefs.h - - define NON_NEGATIVE as 1 if CTYPE_NON_ASCII is defined - - 2/3 - --- -config.h.in - - add HAVE_WCTOMB - -aclocal.m4 - - check for wctomb in BASH_CHECK_MULTIBYTE - - 2/4 - --- -lib/readline/vi_mode.c - - in _rl_vi_change_mbchar_case, make sure the result from wctomb() - is NULL-terminated before trying to insert it with rl_insert_text() - - 2/5 - --- -lib/readline/display.c - - fix to update_line to avoid problems on systems with multibyte - characters when moving between history lines when the new line - has more glyphs but fewer bytes (twaugh@redhat.com) - -lib/readline/vi_mode.c - - use wcrtomb() instead of wctomb() in _rl_vi_change_mbchar_case - -pcomplete.c - - fix init_itemlist_from_varlist to handle the case where the - `varlist' is NULL - -doc/{bash.1,bashref.texi} - - clarified when a simple command may fail without the shell exiting - when -e is set - - 2/13 - ---- -parse.y - - when bash is started with --nolineediting, ignore \[ and \] when - decoding the prompt string - -subst.c - - fix remove_quoted_nulls so that a string with a CTLESC appearing - after a CTLNUL (which was removed) does not leave characters in - the string inappropriately - - 2/14 - ---- -builtins/common.h - - new flag value for parse_and_execute(): SEVAL_RESETLINE, which - allows the caller to specify whether or not the internal idea - of the line number should be reset to 1 - -builtins/evalstring.c - - parse_and_execute() now tells push_string to reset the line - number only if the SEVAL_RESETLINE flag is set by the caller - - 2/15 - ---- -builtins/evalfile.c - - pass SEVAL_RESETLINE from _evalfile() to parse_and_execute() - -subst.c - - if the shell is currently interactive, pass SEVAL_RESETLINE to - parse_and_execute() when doing command substitution - -jobs.c - - add SEVAL_RESETLINE to parse_and_execute while running SIGCHLD trap - -command.h - - add `line' members to case_com, for_com, select_com - - rearranged order of members in some of the command structs, so - `flags' and `line' are first - - added a `source_file' member to the function_def struct; keeps - track of where the function was defined - -doc/Makefile.in - - add some new suffix rules: .dvi.ps - -doc/{bash.1,bashref.texi} - - added text to the description of the `trap' builtin tightening up - the language describing when the ERR trap will be run - -error.c - - if $BASH_SOURCE (internally-maintained) exists, use BASH_SOURCE[0] - in get_name_for_error if the shell is not interactive - -array.h - - new convenience defines: array_push and array_pop - -variables.c - - change get_funcname to return this_shell_function->name only if - arrays have not been compiled into the shell - - change init_funcname_var to initialize FUNCNAME as an array variable - if we have arrays - - new function: get_self(SHELL_VAR *self), a degenerate `dynamic_value' - function for dynamic variables - - new function: init_dynamic_array_var(), a generic dynamic array - variable initializer to handle the common case - - use init_dynamic_array_var() instead of explicit init_dirstack_var() - - use init_dynamic_array_var() instead of explicit init_groups_var() - - new dynamic array variables: BASH_ARGC, BASH_ARGV, BASH_SOURCE, - BASH_LINENO, initialized with init_dynamic_array_var - -shell.c - - initialize BASH_LINENO, BASH_SOURCE, FUNCNAME in open_shell_script - -{execute_cmd,trap}.c - - take out trap_line_number, since parse_and_execute doesn't reset the - line number any more when running the trap commands - -make_cmd.c - - augment make_function_def to get source file name and call - bind_function_def to save the entire FUNCTION_DEF - -variables.c - - new hash table: shell_function_defs, keeps table of shell function - definitions including source file and line number info corresponding - to shell_functions table - - new functions: find_function_def and bind_function_def to manage - the shell_function_defs hash table - - new function: unbind_function_def to remove a function definition - from the shell_function_defs table (right now uncalled) - -variables.h - - extern declaration for bind_function_def, find_function_def - - new extern declaration for unbind_function_def - -execute_cmd.c - - in function prologue and epilogue, push and pop FUNCNAME, - BASH_SOURCE, and BASH_LINENO information - -dispose_cmd.c - - broke the code that disposes a FUNCTION_DEF out into two new - functions: dispose_function_def and dispose_function_def_contents - -dispose_cmd.h - - new extern declarations for dispose_function_def_contents and - dispose_function_def - -copy_cmd.c - - move body of copy_function_def (other than allocating a new - FUNCTION_DEF) to copy_function_def_contents - - make sure to copy the new source_file member of a function_def in - copy_function_def_contents - - copy_function_def is no longer static, copy_function_def_contents - is not either - -command.h - - new extern declaration for copy_function_def_contents and - copy_function_def - -parse.y - - keep a stack of line numbers where case, select, and for commands - start, with a maximum nesting level of 128; increment when reading - word after `for', `select' or `case' in read_token_word; decrement - in grammar actions after parsing a complete for, arith_for, select, - or case command - - create for, case, arith_for, and select commands with an extra - line number (word_lineno[word_top]) argument - -make_cmd.c - - make_for_or_select, make_for_command, make_case_command, and - make_select_command all take an extra `line_number' argument - -make_cmd.h - - corresponding changes to extern declarations for those functions - - 2/16 - ---- -{execute_cmd,shell,variables}.c - - follow each call to remember_args with a call to push_args or - pop_args to manage the BASH_ARGV and BASH_ARGC arrays. Only set - when the shell is started to run shell script or runs a shell - function. Doesn't handle `set' or `shift' yet, nor `source'. - -execute_cmd.c - - keep track of the level of subshells with a new variable, manipulated - in execute_in_subshell - - set currently_executing_command in execute_command_internal(), - even if we're running a trap - - better line number management when executing simple commands, - conditional commands, for commands in execute_command_internal() - and the various functions that implement the commands - (execute_cond_command, execute_for_command, execute_etc.) - -variables.c - - new dynamic variable BASH_SUBSHELL, with new get_subshell and - assign_subshell functions to manipulate it - - new functions push_args (WORD_LIST *list) and pop_args (void) to - manage the BASH_ARGC and BASH_ARGV dynamic array variables - -variables.h - - new extern declarations for push_args and pop_args - -builtins/evalfile.c - - in _evalfile, do appropriate things to the FUNCNAME, BASH_ARGV, - BASH_ARGC, BASH_SOURCE, and BASH_LINENO variables - -support/mksignames.c - - add another fake signal for `trap'; make NSIG+2 == `RETURN' - -trap.c - - _run_trap_internal now returns an int: the exit value of the command - run as the result of the trap - - run_debug_trap now returns an int: the exit value of the command - run as the result of the trap - - RETURN is a new special trap - - new function: set_return_trap(char *command) interface for the rest - of the shell, like set_{debug,error}_trap - - new function: run_return_trap() - - command substitution and other child processes don't inherit the - return trap - -trap.h - - new extern declaration for set_return_trap() and run_return_trap - - new defines for RETURN_TRAP; increment BASH_NSIG - - change extern declaration for run_debug_trap() since it now returns - an int - -shell.c - - new invocation long option: --debugger, turns on debugging and - sets internal `debugging_mode' variable - -execute_cmd.c - - new code to save return trap when executing a shell function, so - shell functions don't inherit it - - run debug trap before binding the variable and running the action - list in a `for' command - - run debug trap before binding the selection variable and running - the query in a `select' command - - run debug trap before running matcher in a `case' command - -builtins/set.def - - new `set -o functrace' (set -T), causes DEBUG trap to be inherited - by shell functions - - new `set -o errtrace' (set -E), causes ERR trap to be inherited - by shell functions - -flags.c - - new flags -E and -T, control error_trace_mode and - function_trace_mode respectively - -flags.h - - new extern declarations for error_trace_mode and function_trace_mode - - 2/17 - ---- -doc/bashref.texi - - changed the `dircategory' as per Karl Berry's suggestion - -doc/texinfo.tex - - update to version of 2003/02/04 from texinfo.org - -support/texi2dvi - - update to version 1.14 from texinfo-4.5 distribution - - 2/20 - ---- -support/config.{guess,sub} - - update to versions of 2002/11/30 - -lib/readline/doc/manvers.texinfo - - renamed to version.texi to match other GNU software - - UPDATE-MONTH variable is now `UPDATED-MONTH' - -lib/readline/doc/{hist,rlman,rluserman}.texinfo - - include version.texi - -doc/version.texi - - new file, with standard stuff matching other GNU distributions - -{doc,lib/readline/doc}/Makefile.in - - include right stuff for `version.texi' - -lib/readline/doc/{rluserman,rlman,hist}.texinfo - - use @copying and @insertcopying and @ifnottex instead of @ifinfo - - add FDL as an appendix entitled `Copying This Manual' - -lib/readline/doc/{rltech,rluser,hstech,hsuser}.texi - - changed the suffix from `texinfo' to `texi' - -lib/readline/doc/{rlman,rluserman}.texinfo, doc/bashref.texi - - include rltech.texi,rluser.texi,hstech.texi, and hsuser.texi - -lib/readline/doc/Makefile.in,doc/Makefile.in - - made appropriate changes for {{rl,hs}tech,{rl,hs}user}.texi - -lib/readline/doc/{rlman,rluserman}.texinfo - - changed the suffix from `texinfo' to `texi' - -lib/readline/doc/hist.texinfo - - renamed to history.texi - - 2/25 - ---- -pathnames.h.in - - moved pathnames.h here so value of DEBUGGER_START_FILE can be - substituted by configure - -aclocal.m4 - - added AM_PATH_LISPDIR for debugger - -configure.in - - added some variables: `bashvers', `relstatus' to use info in more - than one place - - call AM_PATH_LISPDIR - - new option: --enable-debugger, sets DEBUGGER cpp option - - new option with AC_ARG_VAR: DEBUGGER_START_FILE - - make `pathnames.h' a file generated by configure - -Makefile.in - - add rule to create pathnames.h - -builtins/declare.def - - added extra line number and source file name to `declare -F' output - if `--debugger' is used at startup - -builtins/evalfile.c - - call run_return_trap from source_file before returning the result - from _evalfile() - -execute_cmd.c - - call run_return_trap in execute_function before restoring the old - context - -builtins/source.def - - arrange to save and restore DEBUG traps when sourcing files if - function_trace_mode (set -o functrace) is not set - -print_cmd.c - - broke print_for_command, print_select_command, print_case_command - into two functions each: one to print the `header' and one for - the body - - print_cond_command is no longer static - - print_arith_command now takes a WORD_LIST *, since it doesn't - actually do anything with the ARITH_COM it's passed except print - the enclosed WORD_LIST - - print_arith_command is no longer static - -externs.h - - extern declarations for print_{for,select,case}_command_head, - print_cond_command, print_arith_command - -{.,builtins,lib/sh}/Makefile.in - - corrected dependencies on pathnames.h, since it's now created in - the build directory - - 3/5 - --- -lib/glob/glob.c - - handle alloca() failing (it's supposed to return NULL) - - use malloc() (with its attendent bookkeeping) instead of alloca() - in glob_filename() - -subst.c - - check whether shell_glob_filename returns NULL in - glob_expand_word_list - - change parameter_brace_expand_rhs to handle cases like - ${a[2]:=value} by properly creating the array element instead of a - variable named `a[2]' (reported by <opengeometry@yahoo.ca>) - -variables.c - - change bind_int_variable to use valid_array_reference instead - of looking for `[' - -lib/readline/vi_mode.c - - check for `a' in _rl_vi_done_inserting so the text inserted by an - `a' command can be reinserted with a `.' - -lib/readline/readline.c - - when entering vi insertion mode in readline_internal_setup(), make - sure that _rl_vi_last_key_before_insert is set to `i' so that undo - groups and redo work better (reported by <opengeometry@yahoo.ca>) - -lib/glob/sm_loop.c - - handle ?(...) in a pattern immediately following a `*', instead of - ignoring the `(' and treating the `?' as a single-char match, as - long as FNM_EXTFLAG is set (reported by <anderson110@poptop.llnl.gov>) - -aclocal.m4 - - new test for presence of struct timezone, BASH_STRUCT_TIMEZONE - -config.h.in - - add HAVE_STRUCT_TIMEZONE - -configure.in - - call BASH_STRUCT_TIMEZONE - -execute_cmd.c - - don't try to use `struct timezone' in calls to gettimeofday unless - HAVE_STRUCT_TIMEZONE is defined; use (void *)NULL otherwise - - 3/20 - ---- -execute_cmd.c - - new variable, the_printed_command_except_trap, saves the command - being executed before a trap is executed, for the debugger - -trap.c - - if in debugging mode, let command substitutions and other child - processes inherit the DEBUG and ERR traps if the `functrace' - (which is really a bad name, given this semantic) or `errtrace' - options, respectively, have been set - -shell.c - - local_pending_command renamed to command_execution_string; no longer - static - -variables.c - - new dynamic variable, BASH_COMMAND, set to the command string - currently executing, or the one that caused a trap to execute - (mapped to the_printed_command_except_trap) - - new variable, BASH_EXECUTION_STRING, set to the argument to the - -c invocation option, if the shell was started that way - - 3/22 - ---- -execute_cmd.c - - changed execute_for_command, eval_arith_for_expr, - execute_select_command, execute_arith_command, execute_cond_command, - execute_simple_command to implement new DEBUG trap semantics - for the debugger: if the DEBUG trap commands return a non-zero - status and debugging_mode is non-zero, we skip the command to be - executed - -trap.c - - change run_debug_trap for the debugger: if we're in the debugger - and the DEBUG trap returns 2 while we're in a function or sourced - script, we force a `return' - -shell.c - - new function, start_debugger(), that sources the debugger start file - and turns the debugger on - -builtins/shopt.def - - new settable option, `extdebug', turns on debugging_mode, as if - --debugger had been supplied at invocation (but does not source - debugger startup file) - -trap.c - - make sure that run_exit_trap arranges for `returns' to come back - there, too, so a `return' executed by an `exit' invoked within a - shell function behaves correctly - -support/shobj-conf - - change darwin/MacOS X stanza based on advice from mac os x developers - -lib/sh/mailstat.c - - set the atime member of the synthesized stat struct to 0 if `cur/' - is empty, rather than leaving it undefined - - 3/24 - ---- -builtins/caller.def - - new builtin to provide a call stack for the debugger - -builtins/evalfile.c - - added a second `flags' argument to source_file() - - new flag value for flags argument to _evalfile(): FEVAL_NOPUSHARGS. - If included in flags arg, it means to not manipulate the BASH_ARGV - and BASH_ARGC arrays - -builtins/common.h - - change prototype for source_file() - -builtins/source.def - - add flag value to call to source_file(): set to 1 if we replaced - the positional parameters - - add call to push_args if additional arguments supplied to the - source builtin - - add call to pop_args in maybe_pop_dollar_vars - -execute_cmd.c - - run the debug trap in execute_function so the debugger can stop - before the first command in a function body is executed - - modify subshell_level before executing a builtin or function in a - subshell - - print `for', `select', `case' command heads when set -x is enabled - -print_cmd.c - - `xtrace_print_word_list' now takes an additional flags argument, - which, if non-zero, says to print indirection_level_string() - - new functions to print for, select, and case command heads when - set -x is enabled - - add spaces after `((' and before `))' in xtrace_print_arith_command - -externs.h - - changed extern declaration for xtrace_print_word_list - - new declarations for xtrace_print_{for,case,select}_command_head() - -subst.c - - modify subshell_level when executing a command substitution - - 3/25 - ---- -execute_cmd.c - - use `line_number' in executing_line_number instead of looking into - the current command if it's a simple command; rearrange code to - make this simpler to compile in and out - - need to save and restore value of currently_executing_command around - calls to debug trap and return trap in execute_function - -make_cmd.c - - make sure make_arith_for_command() disposes the WORD_LIST * it is - passed, since nothing else does and it's not used directly - - 3/28 - ---- -Makefile.in - - fixed dependencies for `error.o' on shell.h and version.h -- makes - parallel makes (gmake -j 4) work correctly - -doc/{bash.1,bashref.texi} - - documented all new features added to support the debugger - - 4/1 - --- -lib/sh/shquote.c - - make sure CTLESC and CTLNUL characters are escaped with CTLESC - by sh_double_quote, sh_backslash_quote and - sh_backslash_quote_for_double_quotes - Fixes vulnerability reported by svdb@stack.nl - -shell.h - - new `pipestatus' member of sh_parser_state_t, to save and restore - $PIPESTATUS - -parse.y - - changes to save_parser_state and restore_parser_state to save and - restore $PIPESTATUS - -builtins/read.def - - add a call to word_list_remove_quoted_nulls before assigning the - word list read from standard input to an array variable. Fixes - bug reported by holzhey@ppprs1.phy.tu-dresden.de - - 4/3 - --- -execute_cmd.c - - in execute_null_command, if redirections are supplied, make sure - things like 3</etc/passwd are undone immediately, since they're - being done in the current shell - - functions now inherit the RETURN trap only if function tracing is - on for that function or globally - -lib/readline/misc.c - - in rl_replace_from_history, don't force rl_replace_line to clear - the undo_list, since it might point directly at an undo list - from a history entry (to which we have no handle) - - 4/4 - --- -trap.c - - initialize RETURN_TRAP stuff appropriately in initialize_traps() - - let command substitutions inherit the RETURN trap if we're in - the debugger and function tracing has been enabled - -redir.c - - do_redirections and do_redirection_internal now take a single - flags argument instead of multiple boolean flags - -redir.h - - new #defines for flags argument to do_redirection{s,_internal} - -execute_cmd.c - - change all calls to do_redirection to use new flag values - -parse.y - - new function, free_pushed_string_input(), an external interface to - clear the pushed_string list (alias expansion) - - new define SHOULD_PROMPT to say when it's OK to call prompt_again - (if the shell is currently interactive and is reading input from - the terminal or readline) - - make sure shell_getc and read_secondary_line only call prompt_again - if SHOULD_PROMPT evaluates to true - - prompt_again shouldn't do anything if the shell is currently in the - middle of expanding a multiline alias, since we won't be printing a - prompt anyway - -externs.h - - new extern declaration for free_pushed_string_input() - -execute_cmd.c - - command_substitute and process_substitute now call - free_pushed_string_input because they shouldn't deal with any - partial alias expansion the parent shell may have started - - 4/5 - --- -braces.c - - added {x..y} brace expansion, shorthand for {x,x+1,x+2,...,y}: - x, y can be integers or single characters; the sequence can be - ascending or descending; increment is always 1. Beware that - something like {a..A} can lead to non-letters. - - 4/7 - --- -subst.c - - change extract_delimited_string and extract_dollar_brace_string to - return NULL on an expansion error when no_longjmp_on_fatal_error - is set, so the calling functions don't assume that the expansion - was successful (primarily the prompt expansion and completion code) - -doc/{bash.1,bashref.texi} - - documented new sequence generation feature of brace expansion - - 4/8 - --- -lib/sh/strstr.c - - replacement for strstr(3), in case the C library doesn't provide it - -configure.in - - check for strstr, add to LIBOBJS if not found - -array.c - - array_walk now takes a third void * argument; it's passed to `func' - as its second argument - -array.h - - change sh_ae_map_func_t prototype to add void * second argument - - 4/10 - ---- -array.c - - new function: array_keys_to_word_list, returns a list of indices for - a given array - -array.h - - new extern declaration for array_keys_to_word_list - -arrayfunc.c -3 - new function: char *array_keys(), returns a string with keys for a - given array, with the appropriate quoting - -arrayfunc.h - - new extern declaration for array_keys - -subst.c - - code to implement ksh93-like ${!array[@]} expansion (array[*] works, - too), which expands to all the keys (indices) of ARRAY - -doc/{bash.1,bashref.texi} - - documented new ${!array[@]} expansion - - 4/19 - ---- -builtins/setattr.def - - remove any mention of the `-n' option from readonly builtin's short - and long documentation - -pcomplib.c - - fix progcomp_insert to increase the refcount on the `cs' argument - before calling hash_insert -- fixes the problem of multiple calls - to progcomp_insert with the same compspec - -doc/bash.1 - - add mention of characters that inhibit history expansion when found - immediately following an unquoted `!' - -bashline.c - - convert the code conditionally compiled in by the NO_FORCE_FIGNORE - #define to something runtime-tunable with the `force_fignore' - variable (opposite sense). force_fignore is 1 by default - -builtins/shopt.def - - new tunable `shopt' option: `force_fignore', controls force_fignore - variable and behavior of FIGNORE handling - -lib/readline/complete.c - - new variable, _rl_complete_show_unmodified, causes completer to list - possible completions if more than one completion and partial - completion cannot be done - - new value for what_to_do argument to rl_complete_internal, `@', - indicating that we want the show-unmodified behavior - - change rl_completion_type to return `@' when appropriate - -lib/readline/bind.c - - new bindable variable, show-all-if-unmodified, which controls value - of _rl_complete_show_unmodified - -lib/readline/rlprivate.h - - extern declaration for _rl_complete_show_unmodified - -lib/readline/doc/rluser.texi - - documented show-all-if-unmodified - -lib/readline/doc/rltech.texi - - documented new `@' value for second argument to rl_complete_internal - - documented new return value from rl_completion_type - - 4/22 - ---- -lib/readline/signals.c - - in rl_set_signal, set sa_flags to SA_RESTART for SIGWINCH, if we - have POSIX signals -- this is what most applications expect, and - they're not prepared to deal with EINTR - - 4/25 - ---- -bashline.c - - take out attempts to suppress readline filename completion when - attempting command completion and there is a directory with the - same name in the current directory. #if 0'd for now; maybe make - it conditional later - -error.c - - new variable, gnu_error_format, causes non-interactive errors with - line numbers to be printed in the `gnu style' (filename:lineno:) - instead of the `shell style' (filename: line lineno:) by - error_prolog and parser_error - -version.h,support/mkversion - - don't put extern function declarations into created version.h any - more - -version.c,externs.h - - add extern declarations for show_shell_version() and - shell_version_string(), since they're no longer in version.h - (this backs out change from 9/10/2001) - -shell.h - - don't include version.h - -Makefile.in - - remove unneeded dependencies on version.h -- only version.o - needs it now - -builtins/shopt.def - - new option `gnu_errfmt', changes error messages with line numbers - to use the `standard' gnu format - -pcomplete.h - - new COPT_BASHDEFAULT and COPT_PLUSDIRS defines - -bashline.c - - if the COPT_BASHDEFAULT flag is set, try the rest of the bash - default completions if a compspec with that flag set generates - no matches - - broke bash completions out into separate function: - bash_default_completion(const char *text, int start, int end, - int qc, int in_command_position); change attempt_shell_completion - to call it - -bashline.h - - new extern declaration for bash_default_completion - -builtins/complete.def - - added code to compgen to call bash_default_completion if a compspec - with the COPT_BASHDEFAULT flag set generates no matches from the - programmable completion options - -doc/{bash.1,bashref.texi} - - document new `gnu_errfmt' shopt option - -doc/bash.1,lib/readline/doc/rluser.texi - - document new `-o bashdefault' option to complete and compgen - - 4/26 - ---- -pcomplete.c - - if a compspec has the COPT_PLUSDIRS flag set, generate any - directory name completions and add them to the set of possible - completions as the last thing in gen_compspec_completions - -builtins/complete.def - - add new `-o plusdirs' option to complete and compgen; means to - do directory name completion in addition to other actions - specified by the compspec, and do it last - - 5/12 - ---- -copy_cmd.c - - fix copy_{for,select,case}_command to copy the line member - - 5/13 - ---- -lib/readline/rlmbutil.h,include/shmbutil.h - - new #define MB_INVALIDCH, evaluates to true if return value from - mbrtowc or mbrlen denotes an invalid multibyte character - - new #define MB_NULLWCH, evaluates to true if return value from - mbrtowc or mbrlen denotes a null multibyte character - -lib/readline/complete.c - - new function, fnwidth(), returns printed length of a filename, - correctly handling multibyte characters - - new function, fnprint(), displays a filename on rl_outstream - correctly handling multibyte characters - - use fnwidth() instead of simple strlen() for length calculations - in display_matches - -lib/readline/{display,mbutil}.c - - use MB_INVALIDCH and MB_NULLWCH as appropriate - - 5/21 - ---- -configure.in - - turn off the builtin malloc on GNU/FreeBSD systems (GNU userland, - FreeBSD kernel) - - 5/24 - ---- -pcomplete.c - - in programmable_completions, copy the compspec before using it to - generate the possible completions, allowing the completion for the - command to be changed by the compspec itself without causing a - core dump because the shell frees freed memory (reported by - marcus.harnish@gmx.net) - -parse.y - - in shell_getc, don't call notify_and_cleanup in an interactive shell - unless the shell is currently reading from the terminal and would - print a prompt. This fixes programmable completions printing job - notifications (reported by r.d.green@lancaster.ac.uk) - - use SHOULD_PROMPT macro consistently - -shell.c - - use get_string_value instead of getenv when looking up $TERM and - $EMACS to see whether the shell is running under emacs - - check for `TERM=dumb' as well as `EMACS=t' to decide whether or - not to turn off command-line editing in emacs shell windows - (reported by jik@kamens.brookline.ma.us) - - 5/28 - ---- -expr.c - - save and restore the `evalbuf' context, since evalexp can be - called recursively (e.g. a[b[c]]) - - 5/29 - ---- -builtins/common.c - - in display_signal_list, when displaying for `kill -l' in posix mode, - display signal names without the `SIG' prefix - -doc/bashref.texi - - documented changed to posix mode behavior of kill -l - -builtins/kill.def - - changed the error message printed when argument is not a pid or - job id - -doc/{bash.1,bashref.texi} - - fixed a slight inconsistency in the different sections describing - the `promptvars' option - -doc/Makefile.in - - new rule to create `bash.info' from `bashref.info' by running sed - to change the internal references. This makes the installed - bash.info work right - - make the install target install bash.info after it's been modified - from bashref.info - - 5/30 - ---- -builtins/cd.def - - after testing with ferror(), call clearerr if ferror() evaluates - to true - -execute_cmd.c - - call clearerr(stdout) after executing a builtin or function, - before restoring any redirections - -bashhist.c - - initialize history_comment_char in bash_history_initialize - -builtins/alias.def - - if posix mode is enabled, and the `-p' option is not supplied, don't - list aliases with a preceding `alias ', as POSIX.2 specifies - -doc/bashref.texi - - note new posix mode behavior of displaying alias names and values - - note new posix mode behavior of trap builtin not checking first - argument to be a possible signal specification - - note new posix mode behavior of `kill' not accepting signal names - with a leading `SIG' - -include/stdc.h,lib/readline/rlstdc.h - - don't check the __STRICT_ANSI__ define when deciding whether or not - to #undef __attribute__ - -trap.[ch] - - decode_signal and signal_object_p take an additional flags arg to - satisfy POSIX.2 signal name translation requirements - - change decode_signal to honor the new DSIG_NOCASE (match case- - insensitively) and DSIG_SIGPREFIX (allow signal specifications - with the `SIG' prefix) flags - -builtins/{common.c,{trap,kill}.def} - - change calls to decode_signal to add the new argument with - appropriate values. For kill, POSIX.2 says case-insensitive without - the `SIG' prefix. For trap, POSIX.2 says applications may decode - case-insensitively and with the SIG prefix - -builtins/trap.def - - when in posix mode, don't check for the first argument being a - possible signal spec and revert the signal handling to the - original disposition - - 6/1 - --- -shell.h - - new MATCH_STARSUB define, to tell the callers of the various pattern - substitution and removal functions that call string_list to treat - "$*" and "${array[*]}" appropriately -subst.c - - if get_var_and_type encounters an array variable subscripted by `*' - or `$*', return VT_STARSUB or'd into the variable type value - - callers of get_var_and_type check for VT_STARSUB in the returned type - this will fix problems with ${*...} not being separated with the - first character of $IFS when double-quoted - - in parameter_brace_patsub, set MATCH_STARSUB if VT_STARSUB is set by - get_var_and_type - - change pos_params_pat_subst to call string_list_dollar_star if - the match flags include MATCH_STARSUB - - change parameter_brace_substring to call array_subrange with an - additional argument indicating the character indexing the array - -array.c - - change array_patsub to join the modified array elements with the - first character of $IFS if MATCH_STARSUB is set in the match flags - passed in - - array_subrange now takes an additional argument indicating the - index type -- used to separate with first char of $IFS if the - index char is `*' and the expression is double-quoted - -array.h - - change prototype declaration of array_subrange to add additional arg - - 6/2 - --- -doc/FAQ - - merged in some updates about POSIX from Andrew Josey - - 6/3 - --- -bashjmp.h - - new value for jump_to_top_level: ERREXIT - -{eval,shell,subst,trap}.c,builtins/evalstring.c - - ERREXIT is (for now) equivalent to EXITPROG as a value from - jump_to_top_level - - 6/9 - --- -doc/bash.1,lib/readline/doc/readline.3 - - documented new `show-all-if-unmodified' readline variable - - 6/14 - ---- -lib/readline/history.c - - new function, histdata_t free_history_entry (HIST_ENTRY *h), - frees H and its line, returning the application-specific data - - use free_history_entry where appropriate - -lib/readline/history.h - - extern declaration for free_history_entry() - -lib/readline/doc/{history.3,hstech.texi} - - document free_history_entry - - 6/16 - ---- -lib/readline/readline.[ch] - - changed varions defines for readline/history library versions to 5.0 - -subst.c - - pass information about whether or not an indirectly-expanded variable - contains ${array[@]}, ${array[*]}, $@, or $* - - new function, chk_atstar, performs checks for ${array[@]}, - ${array[*]}, $@, or $* for the parameter_brace_expand* functions and - sets flags (passed as args) to the results - - call chk_atstar from parameter_brace_expand_indir and - parameter_brace_expand - - 6/28 - ---- -doc/{bash.1,bashref.texi} - - clarified that (...) commands are executed in a subshell environment - - 6/30 - ---- -lib/readline/bind.c - - fix a problem with parsing nested if statements in inputrc files - (fix from dimakar@yahoo.com) - - 7/3 - --- -{jobs,nojobs}.c - - fix places that use the return value from strsignal() to check - for NULL return values using a new function, j_strsignal() - -builtins/kill.def - - removed JOB_CONTROL restriction; kill is now available as a builtin - when the shell is built without job control - - 7/10 - ---- -jobs.c - - some systems have WIFCONTINUED but not WCONTINUED; separate the - #defines - - 7/14 - ---- -lib/readline/history.h - - new `timestamp' member of a HIST_ENTRY - - extern declarations for add_history_time and history_get_time - -lib/readline/doc/{history.3,hstech.texi} - - document add_history_time and history_get_time - -lib/readline/history.c - - implementations of history_get_time and add_history_time - - change add_history to initialize the timestamp information - - change free_history_entry to free the timestamp - - change replace_history_entry to duplicate the timestamp - - change history_total_bytes to add the memory taken by the time - stamps - -bashhist.c,builtins/history.def - - use free_history_entry where appropriate - -lib/readline/histfile.c - - changes to read_history_range to deal with new history file format - including timestamps - - changes to history_do_write to write out the timestamp information - - changes to history_truncate_file to understand the timestamp - information - - 7/22 - ---- -doc/{bash.1,bashref.texi} - - fixed function declaration documentation to specify that any compound - command may be used as the function body, not just a group command - - 7/23 - ---- -lib/readline/histfile.c - - don't allocate space for null timestamps in history_do_write, and - don't write out null timestamp entries - -parse.y - - fix CHECK_FOR_RESERVED_WORD to call time_command_acceptable() and - return TIME if the token is "time" and `time' is legal in that - context - - 7/29 - ---- -lib/sh/fmtulong.c - - include <inttypes.h> for possible definitions of intmax_t, uintmax_t - (reported by ro@techfak.uni-bielefeld.de) - - 7/30 - ---- -parse.y - - remove checking for `time' reserved word from special_case_tokens(); - use regular mechanism in CHECK_FOR_RESERVED_WORD. This allows `time' - to be aliased. (Reported by Glenn Morris - <gmorris+gmane@ast.cam.ac.uk>) - - 7/31 - ---- -lib/readline/history.h - - extern declaration for history_write_timestamps - -lib/readline/histfile.c - - don't write timestamps to the history file in history_do_write - unless history_write_timestamps is set to non-zero by the application - (set to 0 by default) - -lib/readline/doc/{hstech.texi,history.3} - - document history_write_timestamps - -variables.[ch] - - new special variable function, HISTTIMEFORMAT; special function - sets history_write_timestamps to 1 if HISTTIMEFORMAT is set - - 8/4 - --- -builtins/history.def - - added support for printing time stamps based on the value of the - HISTTIMEFORMAT variable when displaying history entries - -doc/{bash.1,bashref.texi} - - added description of new HISTTIMEFORMAT variable - - 8/5 - --- -config-top.h - - remove /usr/ucb from any default paths - -mailcheck.c - - make_default_mailpath now returns NULL if DEFAULT_MAIL_DIRECTORY - is not defined - - remember_mail_dates now returns if make_default_mailpath returns - NULL - -config-bot.h - - reorganized the sections; provide an explicit placeholder for - builders to #undef any feature defines they don't want that - configure creates for them, like the default mail path - - 8/9 - --- -config.h.in - - add HAVE_REGEX_H, HAVE_REGCOMP, HAVE_REGEXEC for detection of POSIX.2 - regular expression functions - - add COND_REGEXP define to enable and disable the =~ operator for - matching extended regular expressions in [[...]] commands - -configure.in - - new option, --enable-cond-regexp, enables =~ and code to perform - regular expression matching in [[...]] - -config-bot.h - - undef COND_REGEXP if the OS doesn't provide posix regexp support - -doc/bashref.texi - - documnent new --enable-cond-regexp option to configure - - 8/18 - ---- -support/shobj-conf - - support for shared objects on FreeBSD-gnu (from Robert Millan) - - 8/25 - ---- -lib/sh/shmatch.c - - new file, shell interface to posix extended regular expression - matching - -externs.h - - new extern declarations for functions in shmatch.c - -execute_cmd.c - - incorporate code into execute_cond_node that does extended regular - expression matching for the =~ operator - -parse.y - - add `=~' to the list of binary operators accepted by the conditional - command parser - -doc/{bash.1,bashref.texi} - - documented =~ conditional binary operator and the BASH_REMATCH - variable - - 8/27 - ---- -lib/readline/display.c - - take multibyte characters into account when looking for quoted - substrings on which to do completion (fix from jir@yamato.ibm.com) - -lib/readline/util.c - - fix typo in _rl_strpbrk - -lib/readline/rldefs.h - - use function version of _rl_strpbrk in multibyte locales, because - it understands to skip over special characters in multibyte - character sequences - - 8/28 - ---- -jobs.c - - in wait_for, check for window size changes if a job that exits due - to a signal or is stopped was in the foreground, not just if it's - the current job - - 9/10 - ---- -support/config.{guess,sub} - - add support to recognize FreeBSD running on the amd64 - -subst.c - - if the new `fail_glob_expansion' variable is non-zero, globbing that - fails to match anything causes an expansion error - -builtins/shopt.def - - new `failglob' expansion: if enabled, failed globs cause an error - -test/shopt.right - - take `failglob' into account - -doc/{bash.1,bashref.texi} - - documented new `failglob' option and its effects - - 9/12 - ---- -findcmd.c - - fix file_status to treat the mode bits and uid right -- in particular, - don't assume the `other' bits always apply. Bug reported by - <moseley@hank.org>; fix inspired by <carlo@alinoe.com> - -command.h - - new word flag: W_NOCOMSUB, meaning to not perform command - substitution on a word - -subst.c - - new flag for param_expand: PF_NOCOMSUB. If non-zero, $(...) - command substitutions are not expanded, but returned unchanged - - change expand_word_internal to pass through `` command substitutions - unchanged if (word->flags & W_NOCOMSUB) != 0 - - change expand_word_internal to pass PF_NOCOMSUB to param_expand - if (word->flags & W_NOCOMSUB) != 0 - -builtins/shopt.def - - rename set_interactive_comments to set_shellopts_after_change, which - more accurately reflects its purpose - -syntax.h - - add a define for isblank() in case the system doesn't provide one - -jobs.c - - change raw_job_exit_status to understand `pipefail', using the new - `pipefail_opt' variable - -flags.[ch] - - declare pipefail_opt - - reset pipefail_opt to 0 in reset_shell_flags - -builtins/set.def - - add `set -o pipefail' and document it in help output - -doc/{bash.1,bashref.texi} - - document `set -o pipefail' and the effect of the pipefail option - -mksyntax.c,syntax.h - - sh_syntaxtab is no longer `const' - - new generated variable, sh_syntabsiz, set to number of entries in - sh_syntaxtab, written to generated syntax.c - -locale.c - - new function, locale_setblanks(), sets each member of the current - locale's <blank> class to have the CSHBRK flag in sh_syntaxtab - - 9/17 - ---- -arrayfunc.c - - change convert_var_to_array to not set array[0] to a NULL value - (if the scalar variable had no value; e.g., after being created - with `local arrayvar') - -lib/readline/display.c - - save and restore the value of prompt_invis_chars_first_line in - rl_{save,restore}_prompt, and reinitialize it to 0 before printing - something in the message area - -lib/readline/bind.c - - new functions: rl_bind_keyseq_if_unbound_in_map(ks, func, kmap); - binds key sequence KS to function FUNC in keymap KMAP, and - rl_bind_keyseq_if_unbound (ks, func); binds key sequence KS to - function FUNC in the current keymap - -lib/readline/readline.h - - extern function declarations for rl_bind_keyseq_if_unbound_in_map and - rl_bind_keyseq_if_unbound - -lib/readline/{readline,terminal}.c - - _rl_bind_if_unbound -> rl_bind_keyseq_if_unbound - -lib/readline/{bind.c,rlprivate.h} - - remove _rl_bind_if_unbound - - 9/18 - ---- -lib/readline/doc/rltech.texi - - document rl_bind_keyseq_if_unbound and - rl_bind_keyseq_if_unbound_in_map - - 9/19 - ---- -lib/readline/bind.c - - new functions rl_bind_key_if_unbound_in_map and - rl_bind_key_if_unbound; analogous to (and implemented in terms of) - keyseq functions - - rl_bind_keyseq_in_map: a new function, equivalent to rl_set_key - (which remains for backwards compatibility); changed callers to - use it - - new function, rl_bind_keyseq, equivalent to rl_bind_keyseq_in_map - with a third argument of _rl_keymap - -lib/readline/readline.h - - extern declarations for rl_bind_key_if_unbound_in_map and - rl_bind_key_if_unbound - - extern declarations for rl_bind_keyseq_in_map and rl_bind_keyseq - -lib/readline/doc/rltech.texi - - document rl_bind_keyseq and rl_bind_keyseq_in_map - -configure.in - - require at least readline-5.0 - -config-bot.h - - define SYS_SIGLIST_DECLARED if it's not defined, but - HAVE_DECL_SYS_SIGLIST is, to deal with differences between - autoconf versions - -bashline.c - - use rl_bind_key_if_unbound_in_map when binding bash keybindings in - initialize_readline(), so inputrc files can override them - - 9/22 - ---- -lib/readline/histsearch.c - - do better bounds checking for history_offset and history_length in - history_search_internal - -builtins/history.def - - in delete_last_history(), make sure we don't leave the history - offset longer than the history length after calling delete_histent - - 9/23 - ---- -jobs.c - - small change to notify_of_job_status so job status messages get - printed even if the shell was started to run `-c command'. The - old behavior was intentional, but I cannot remember why, so we'll - try it the other way for a while (debian bash bug #211693) - - 9/24 - ---- -jobs.c - - slightly modify change from 9/23 so that jobs started to run - command substitutions don't print job status messages - - 9/25 - ---- -lib/readline/search.c - - when reading a non-incremental search string from the terminal, - use a separate undo list rather than chaining it to the undo list - from the rest of the line, since the whole undo list will get - freed when the search string is complete - -lib/readline/readline.h - - changed the defines guarding the stdarg prototype for rl_message to - match what's actually used in display.c, where it's defined - - 9/26 - ---- -[bash-3.0-alpha released] - - 9/29 - ---- -lib/sh/shmatch.c - - fix to build correctly when arrays are not compiled into the shell - -subst.c - - fix command substitution to run any exit trap defined in the - command substitution before returning; the exit trap is not inherited - from the calling shell - -lib/readline/shell.c - - change sh_set_lines_and_columns to free the memory allocated and - passed to setenv(), since setenv is specified by POSIX to allocate - new memory and copy its arguments - -jobs.c - - change logic in make_child so that every child process attempts to - set the terminal's process group to the pipeline's process group - when PGRP_PIPE is defined, just like when it's undefined. This is - reported to fix some tricky synchronization problems on Red Hat - Enterprise Linux 3. Fix from Ernie Petrides <petrides@redhat.com>. - - 9/30 - ---- -builtins/printf.def - - tescape no longer needs a `trans_squote' argument, since it's the - same as the `sawc' argument. The `sawc' argument now means to do - the %b argument processing if non-null - - fix processing of octal constants for %b arguments (\0 followed by - up to three octal digits) and other escape sequences (\ followed by - up to three octal digits) - - hex constants `\xHHH' are now allowed to contain any positive - number of digits; previously they were restricted to two [removed] - - allow two new escape sequences: \" and \?, for compatibility with - ksh93 and ANSI C - -doc/{bash.1,bashref.texi} - - documented processing that printf performs for arguments to %b - escape sequences - -lib/sh/strtrans.c - - add \" and \? to escape sequences recognized by `echo -e' - - 10/1 - ---- -version.c - - use snprintf instead of sprintf if configure tells us we have it - - 10/3 - ---- -subst.c - - in list_remove_pattern, take into account the fact that one of the - list elements may be NULL, and don't free the result of - remove_pattern() without checking - - in remove_pattern, return savestring(param) if *param == '\0', - since callers expect to free() non-null return values - - 10/4 - ---- -subst.c - - change verify_substring_values to make it clearer that the first - offset deals with array indices and the second deals with numbers - of elements, when doing array subranges with ${a[@]:e1:e2} - -array.c - - change array_subrange to make it explicit that the second offset - argument is a count of the desired number of elements, not an - ending index. This deals with sparse arrays correctly. - - 10/6 - ---- -variables.c - - fix memory leak in assign_in_env - - 10/8 - ---- -subst.c - - in parameter_brace_expand, check that the last characters are `]}' - before checking for ${!array[@]} - -execute_cmd.c,builtins/source.def - - push and pop the args (BASH_ARGV and BASH_ARGC) when executing a - shell function or sourcing a script only when in debugging mode - - 10/11 - ----- -arrayfunc.c - - make sure array_variable_name returns values for the SUBP and LENP - arguments if they're non-null, since callers expect to use them - even if the array subscript is bad - -error.c - - call exit_shell instead of sh_exit from parser_error and - report_error so the right things happen (running exit trap, doing - the right interactive cleanup, etc.) - -lib/readline/complete.c - - new variable, rl_completion_quote_character, set to any quote char - readline thinks it finds before any application completion - function is called - - new variable, rl_completion_suppress_quote, settable by an - application-specific completion function. If set to non-zero, the - completion code does not append a closing quote in append_to_match - -lib/readline/readline.h - - extern declarations for rl_completion_quote_character and - rl_completion_suppress_quote - -bashline.c - - set rl_completion_suppress_quote in command_subst_completion_function - because that would be inserted before any closing "`" or ")", which - is somewhat disconcerting - -lib/readline/doc/rltech.texi - - documented rl_completion_suppress_quote and - rl_completion_quote_character - - 10/13 - ----- -bashhist.c - - use sv_histchars instead of setting history_comment_char directly in - bash_initialize_history so assignments to $histchars made in - ~/.bashrc are honored - - 10/21 - ----- -trap.c - - make sure run_exit_trap sets `running_trap' appropriately - - new variable, trap_saved_exit_value, set to last_command_exit_value - before running any trap commands; available to the rest of the - shell; use trap_saved_exit_value to replace some function-local - variables - -builtins/exit.def - - if the shell is running the exit trap, and no argument is given - to `exit', use trap_saved_exit_value as the exit status instead - of the last command exit value (which could be the previous command - run in the exit trap), as required by POSIX.2 - - 10/25 - ----- -doc/{bash.1,bashref.texi} - - add `alias' to the list of documented `assignment statement' builtins - - 11/1 - ---- -doc/bash.1 - - remove the `.' from the sample $PATH value - -parse.y - - make sure parse_compound_assignment prompts with $PS2 if it reads - a newline while parsing the compound assignment statement. Bug - reported by Stephane Chazelas - - parse_string_to_word_list now takes a new second argument: `int flags' - - new parser state flag: PST_COMPASSIGN; indicates that the shell is - parsing a compound assignment statement - - parse_string_to_word_list turns on PST_COMPASSIGN if `flags' arg - has low bit set - - turn PST_COMPASSIGN on and off in parse_compound_assignment - -externs.h - - change prototype declaration for parse_string_to_word_list - -arrayfunc.c - - change call to parse_string_to_word_list to add new flags arg - -general.c - - assignment() takes a new `flags' second argument - - if `flags' is non-zero, accept `[' as a legal assignment statement - starter character (for parsing compound array assignments) - -general.h - - add new argument to prototype declaration for assignment() - -parse.y,{subst,variables}.c, builtins/{setattr,declare}.def - - change calls to assignment() (parse.y calls with flags == 1 when - parser_state inlcudes PST_COMPASSIGN) - -arrayfunc.c - - in assign_array_var_from_string(), don't treat an expanded word - of the form [ind]=value specially unless the W_ASSIGNMENT flag is - set. This means that words that are the result of expansions but - happen to have the same format as compound assignment statement - words will not be treated as such. For instance - - v='[12]=foobar' - a=( $v ) - - will result in a[0]='[12]=foobar' instead of a[12]=foobar. This - is closer to how `regular' assignment statements are treated and - compatible with ksh93. Bug reported by Stephane Chazelas - -shell.c - - new --protected argument, disables command substitution when used - with --wordexp (like --wordexp, it remains undocumented) - - change run_wordexp to turn on the W_NOCOMSUB flag in each word - to be expanded if protected_mode is set - - 11/7 - ---- -doc/{bash.1,bashref.texi} - - clarified the language concerning inherited signal dispositions and - when traps are run - -support/shobj-conf - - slight changes to the darwin (Mac OS X) stanza for MacOS X 10.3 - (for the readline shared library builds, which shares this script) - -lib/readline/histexpand.c - - change to make `^' behave as equivalent to word one, as csh does, - and as the documentation states - -lib/readline/display.c - - in update_line, make sure to use col_lendiff in all calculations - where the cursor position is concerned (like when calculating - the value of _rl_last_c_pos). Fixes bug reported by Andreas - Schwab - - 11/12 - ----- -trap.c - - make _run_trap_internal catch `return' builtin longjmps and clean - up before longjmping on to where the return was intended to go - (fixes bug with not turning off SIG_INPROGRESS flag when `return' - executed in trap command) - - 11/18 - ----- -builtins/cd.def - - in posix mode, set errno to ENOTDIR if canonicalization fails, - unless the canonicalization functions leave it set to ENOENT - - 11/25 - ----- -make_cmd.c - - in make_simple_command, don't blindly dereference element.redirect - -parse.y - - the list_terminator production now has an `int' value so it can be - used in other grammar productions - - add a rule that makes `time' on a line by itself time a null - command (this is iffy) - - 11/28 - ----- -subst.c - - change the pattern substitution code (${var//pat/rep}) to use the - same pattern expansion function (getpattern()) as the pattern - removal expansions. This has the effect of no longer performing - quote removal on the pattern before trying to match it. This - fixes an incompatibility with ksh93 reported on comp.unix.shell - -nojobs.c - - add replacement function for siginterrupt on the off chance that a - system has posix signals but lacks siginterrrupt - -lib/readline/display.c - - fix from Tim Waugh at Red Hat to speed up inserting characters into - long lines in a UTF-8 environment by optimizing the calculation of - the first difference between old and new lines by checking to see - whether the old line is a subset of the new - - 11/29 - ----- -lib/malloc/stats.c - - break code that opens file (and interprets %p) into separate function - _imalloc_fopen(char *s, char *fn, char *def, char *defbuf, size_t defsiz) - for use by rest of library - - default stats file is now `stats.PID' - -lib/malloc/trace.c - - new function, malloc_set_tracefn (char *s, char *fn), sets tracing - to the file named by FN (with %p interpolated as the pid), using - some default if FN is NULL - -lib/malloc/shmalloc.h - - new extern declaration for malloc_set_tracefn - - 12/4 - ---- -execute_cmd.c - - combined several common strings from do_piping() into one - dup_error() function - -builtins/common.[ch] - - new function, `sh_notbuiltin(s)' prints error message about s not - being a shell builtin - -builtins/{builtin,enable}.def - - call sh_notbuiltin instead of using literal string - -{arrayfunc,expr,error}.c - - use one string variable for `bad array subscript' error message; use - in calls to various error reporting functions - -Makefile.in - - add variables for localedir and the PACKAGE_* variables, auto-set - by configure - -configure.in - - un-cache values for gettext, textdomain, and bindtextdomain if they're - not in libc but in libintl so the right variables get set - -bashintl.h - - add necessary defines for marking strings to be translated using - gettext - -locale.c - - set textdomain and directory in set_default_locale - - don't call textdomain with the value of $TEXTDOMAIN, since we don't - want to override the default domain ("bash") - - don't call bindtextdomain unless default_domain already has a value - - when translating $"..." strings, use dgettext with the script's - default domain (value of $TEXTDOMAIN) - - 12/9 - ---- -builtins/mkbuiltins.c - - include "bashintl.h" in the generated "builtins.c" - -support/{config.rpath,mkinstalldirs} - - new files to support gettext i18n - -ABOUT-NLS - - new readme file for gettext internationalization - -po/{Makefile.in.in,Rules-quot,boldquot.sed,en@boldquot.header,en@quot.header,insert-header.sin,quot.sed,remove-potcdate.sin} -po/{POTFILES.in,bash.pot} - - new files for gettext - -lib/intl - - new directory, with libintl stuff from gettext - -aclocal.m4 - - add m4 files from gettext distribution needed by libintl - -configure.in - - create po/Makefile.in and lib/intl/Makefile in AC_OUTPUT - - add call to AM_GNU_GETTEXT to initialize gettext stuff - -Makefile.in - - use mkinstalldirs instead of mkdirs in the `installdirs' target - - changes for intl/ and po/ subdirectories in build and install - - changes to have libintl linked in, as determined by configure - - changes to have libintl built, just in case it's used (though I'd - rather not) - - 12/10 - ----- -config.h.in - - additional #defines required by the libintl library - - add ENABLE_NLS define for AM_GNU_GETTEXT - - take out defines for HAVE_{BINDTEXTDOMAIN,GETTEXT,TEXTDOMAIN} - -configure.in - - removed old tests for libintl and gettext/textdomain/bindtextdomain - -locale.c - - remove HAVE_GETTEXT code; we have gettext unconditionally now - -bashintl.h - - change to include "gettext.h" and remove the conditional code based - on whether or not gettext is present - - 12/16 - ----- -lib/readline/vi_mode.c - - fix problem with rl_vi_eWord that caused it to skip over the last - character of a word if invoked while point was on the next-to-last - character - - 12/18 - ----- -{arrayfunc,bashhist,bashline,error,eval,execute_cmd,expr,general,input,jobs}.c -{mailcheck,make_cmd,nojobs,pcomplete,pcomplib,print_cmd,redir,shell,sig}.c -{subst,test,trap,variables,version,xmalloc}.c -parse.y -builtins/{common,evalfile,getopt}.c -builtins/{bind,break,caller,cd,complete,declare,enable,exec,exit,fc,fg_bg}.def -builtins/{hash,help,history,jobs,kill,printf,pushd,read,return,set,setattr}.def -builtins/{shift,shopt,source,suspend,type,ulimit,umask}.def -lib/sh/{fmtulong,netopen}.c - - include "bashintl.h" for gettext defines - -Makefile.in - - add `-DBUILDTOOL' to CFLAGS for buildversion.o - -bashintl.h - - if `BUILDTOOL' is defined, define ENABLE_NLS to 0 so we don't have - to compile and link in the gettext stuff - -Makefile.in,lib/sh/Makefile.in,builtins/Makefile.in - - update dependencies on bashintl.h and include/gettext.h - - 12/19 - ----- -{arrayfunc,bashhist,bashline,error,eval,execute_cmd,expr,general,input,jobs}.c -{mailcheck,make_cmd,nojobs,pcomplete,pcomplib,print_cmd,redir,shell,sig}.c -{subst,test,trap,variables,version,xmalloc}.c -builtins/{common,evalfile,getopt}.c -builtins/{bind,break,caller,cd,complete,declare,enable,exec,exit,fc,fg_bg}.def -builtins/{hash,help,history,jobs,kill,let,printf,pushd,read,return,set}.def -builtins/{setattr,shift,shopt,source,suspend,type,ulimit,umask}.def -lib/sh/{fmtulong,netopen}.c -lib/malloc/{malloc,stats,table,watch}.c - - mark up strings in source files for gettext processing - -lib/malloc/imalloc.h - - include "bashintl.h" if SHELL is defined, otherwise make _(x) an - identity define - -lib/malloc/Makefile.in - - add dependencies on ${topdir}/bashintl.h and ${BASHINCDIR}/gettext.h - - 12/21 - ----- -bashline.c - - make sure we index into rl_line_buffer with indexes > 0 in - attempt_shell_completion - - 12/31 - ----- -Makefile.in - - descend into `po' and run make recursively for the various clean - targets - - 1/4 - --- -include/shmbutil.h - - two new macros: BACKUP_CHAR(str, strsize, i), which backs up one - multibyte character in STR starting at index I, and - BACKUP_CHAR_P(str, strsize, p), which backs up one multibyte - character in STR starting at P, which is a char * - - 1/6 - --- -pcomplete.c - - in pcomp_filename_completion_function, use the quote character - readline found (and assigned to rl_complete_quote_character) when - dequoting the filename by a completion call from readline (when - rl_dispatching != 0) - -bashline.c - - ditto for bash_directory_completion_matches - - 1/7 - --- -lib/readline/complete.c - - new variable, rl_completion_found_quote, set to non-zero value if - readline finds what it thinks is quoting in the word to be completed - -lib/readline/readline.h - - extern declaration for rl_completion_found_quote - - 1/8 - --- -lib/readline/doc/rltech.texi - - documented rl_completion_found_quote - -lib/readline/complete.c - - in compute_lcd_of_matches, if it looks like what the user typed was - dequoted before generating filename matches, dequote the user's - text again before figuring out the case-insensitive lcd - - 1/9 - --- -lib/readline/display.c - - fix from Edward Catmur <ed@catmur.co.uk> to logic that handles - invisible characters in prompt string. Original code was wrong - about local_prompt_prefix; it gave incorrect results when prompt - contained invisible characters after a line break - - 1/10 - ---- -subst.c - - new function, mb_substring(), does character (possibly multibyte) - oriented rather than strictly byte-oriented substring extraction. - The passed indices, rather than strictly indexing into the string, - indicate character positions that need to be calculated. From - Tim Waugh <twaugh@redhat.com> - - change parameter_brace_substring to use mb_substring if necessary - -included/shmbutil.h - - new define SADD_MBQCHAR_BODY, common code for adding a quoted - (preceded by CTLESC) multibyte character to an accumulating string - in the subst.c expansion code - -subst.c - - use SADD_MBQCHAR_BODY in expand_word_internal - - new static function, mb_getcharlens, allocates and returns an array - of character lengths for (possibly multibyte) characters in the - argument string - - change pattern matching operations to use while loops instead of - for loops to handle multibyte characters better (no more simple - increment or decrement) - - change pattern matching operations to use multibyte character - operations instead of simple increments and decrements. Don't - use BACKUP_CHAR_P -- use the mblen array instead, because that - avoids the N**2 behavior of having to count from the beginning - of the string each time you want to back up one character. Changes - to remove_pattern and match_pattern - - 1/12 - ---- -lib/readline/display.c - - make expand_prompt count multbyte characters in the prompt string - by using _rl_find_next_mbchar (and copying possibly more than one - byte) instead of a simple increment and single byte copy - - 1/13 - ---- -lib/readline/display.c - - expand_prompt takes a new reference argument -- it returns - the actual count of (possibly multibyte) characters displayed - on the screen - - don't short-circuit in expand_prompt unless we're not going to - be using any multibyte characters - - change calls to expand_prompt to pass an argument for the - number of physical characters the prompt occupies - (prompt_physical_chars) - - initialize `lpos' (the physical cursor position) from - prompt_physical_chars in rl_redisplay - -lib/readline/mbutil.c - - in _rl_find_prev_mbchar_internal, if mbrtowc returns -1 or -2, and - we assume that the character is a single-byte char, make sure we - update `prev' so it doesn't get lost. Fixes problems encountered - when a non-ascii char is the last char on the line and we're moving - back past it with ^B, and other display problems caused by the same - situation - - 1/15 - ---- -lib/readline/doc/rltech.texi - - document RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE in the - description of rl_expand_prompt() - - 1/20 - ---- -bashline.c - - in initialize_readline, make sure M-C-j and M-C-m are still bound to - vi-editing-mode before unbinding them -- they may have been rebound - in an inputrc - -variables.c - - in unbind_variable, unset attributes other than `local' and exported - (if the variable came from a temporary environment) when unsetting a - local variable inside a function - - 1/21 - ---- -configure.in - - add libintl build directory to the list of include directories if - it's being built (using INTL_BUILDDIR) - -Makefile.in,{builtins,lib/{sh,malloc}}/Makefile.in - - substitute LIBBUILD as ${BUILD_DIR}/${LIBSUBDIR} - - define INTL_BUILDDIR as ${LIBBUILD}/intl - -{builtins,lib/sh}/Makefile.in - - make sure INTL_INC is added to the list of include directories - - make sure INTL_LIBSRC is defined with the correct value - -{configure,Makefile,{builtins,lib/sh}/Makefile}.in - - substitute LIBINTL_H as ${INTL_BUILDDIR}/libintl.h - -Makefile.in,builtins/Makefile.iin - - all files depending on bashintl.h also depend on ${LIBINTL_H} - (which may be empty) - -Makefile.in - - make a rule telling how to build lib/intl/libintl.h if necessary - - 1/24 - ---- -builtins/read.def - - make sure that the array name supplied as an argument to -a is a - valid identifier - -parse.y - - make the \W expansion abbreviate $HOME with a ~ (seems to be more - useful) - -doc/{bash.1,bashref.texi} - - document new behavior of \W - -subst.c - - make sure parameter_brace_expand_rhs uses the first character of - $IFS when making the string to return from the expanded word - (which, in the case of "$@" or $@, contains multiple words that - need to be separated) - - 1/25 - ---- -builtins/common.c - - change get_job_spec to make `%' by itself or an empty argument - return NO_JOB - -jobs.h - - new possible value for a job spec return value: BAD_JOBSPEC - (for syntactically invalid specs, like the empty string) - -shell.c - - in open_shell_script, check to see whether or not we can find and - open the filename argument before setting dollar_vars[0] or - manipulating BASH_SOURCE, so the error messages come out better - -subst.c - - in string_list_internal, short-circuit right away to savestring() - if the list only has a single element - - 1/28 - ---- -lib/readline/rltypedefs.h - - new set of typedefs for functions returning char * with various - arguments (standard set) - -lib/readline/complete.c - - new function pointer, rl_completion_word_break_hook, called by - _rl_find_completion_word, used to set word break characters at - completion time, allowing them to be position-based - -lib/readline/doc/rltech.texi - - documented rl_completion_word_break_hook - -lib/readline/kill.c - - added new rl_unix_filename_rubout, which deletes one filename - component in a Unix pathname backward (delimiters are whitespace - and `/') - -lib/readline/readline.h - - extern declaration for rl_unix_filename_rubout - -lib/readline/funmap.c - - new bindable readline command `unix-filename-rubout' - -lib/readline/doc/{readline.3,rluser.texi},doc/bash.1 - - documented `unix-filename-rubout' - - 1/29 - ---- -lib/readline/histexpand.c - - change history_tokenize_internal to handle non-whitespace delimiter - characters by creating separate fields (like the shell does when - splitting on $IFS) - - 1/30 - ---- -lib/glob/xmbsrtowcs.c - - new function, xdupmbstowcs, for convenience: calls xmbsrtowcs - while allocating memory for the new wide character string - - some small efficiency improvments to xmbsrtowcs - -include/shmbutil.h - - extern declaration for xdupmbstowcs - -lib/glob/strmatch.h - - include config.h for definition of HANDLE_MULTIBYTE - - remove the HAVE_LIBC_FNM_EXTMATCH tests - - new extern declaration for wcsmatch(whchar_t *, wchar_t *, int) - -configure.in - - remove call to BASH_FUNC_FNMATCH_EXTMATCH; it's no longer used - -lib/glob/smatch.c - - simplify xstrmatch() by using xdupmbstowcs() instead of inline code - -lib/glob/glob.c - - modify mbskipname() to avoid the use of alloca - - simplify mbskipname() by using xdupmbstowcs() instead of inline code - - simplify glob_pattern_p() by using xdupmbstowcs() instead of - inline code - - fix memory leak in wdequote_pathname - - simplify wdequote_pathname() by using xdupmbstowcs() instead of - inline code - -lib/glob/strmatch.c - - new function, wcsmatch(), `exported' wide-character equivalent of - strmatch() - -subst.c - - old match_pattern is now match_upattern - - match_pattern now either calls match_upattern or converts - mbstrings to wide chars and calls match_wpattern - - match_upattern reverted to old non-multibyte code - - new function: match_pattern_wchar, wide character version of - match_pattern_char - - 2/1 - --- -subst.c - - old remove_pattern is now remove_upattern - - remove_upattern reverted to old non-multibyte code (pre-Waugh patch) - - new multibyte version of remove_pattern: remove_wpattern - - remove_pattern now calls either remove_upattern or converts a - multibyte string to a wide character string and calls - remove_wpattern - - new function, wcsdup, wide-character version of strdup(3) - - 2/4 - --- -print_cmd.c - - temporarily translate a >&filename redirection from - r_duplicating_output_word to r_err_and_out (as the expansion code - in redir.c does) so it prints without a leading `1' (file - descriptor) - - 2/5 - --- -aclocal.m4 - - add a check for wcsdup to BASH_CHECK_MULTIBYTE - -config.h.in - - add HAVE_WCSDUP define - - 2/9 - --- -builtins/shift.def - - fix a call to sh_erange that possibly dereferences a NULL pointer - - 2/12 - ---- -general.c - - start at a general set of file property checking functions: - file_isdir(), file_iswdir() (is writable directory) - -general.h - - extern declarations for new functions - -lib/sh/tmpfile.c - - use file_iswdir() to make sure the temporary directory used for - here documents and other temp files is writable in get_sys_tmpdir() - - 2/17 - ---- -bashline.c - - fix conditional binding of emacs-mode M-~ -- there is a default - binding for it (rl_tilde_expand), so a straight call to - rl_bind_key_if_unbound_in_map doesn't do the right thing - - 2/27 - ---- -[bash-3.0-beta1 released] - - 2/29 - ---- -subst.c - - fixed expansion so referencing $a, when a is an array variable - without an element assigned to index 0, exits the shell when - `-u' is enabled - -expr.c - - make the exponentiation operator (**) associative, so things like - 2**3**4 work right (change `if' to `while') - - 3/3 - --- -lib/sh/strftime.c - - SCO Unix 3.2, like Solaris, requires that the system's `timezone' - variable be declared as long - -lib/readline/{bind,histfile,input,parens}.c - - changes for Tandem (including `floss.h' (?)) - - 3/4 - --- -subst.c - - change param_expand to quote the entire expanded string instead - of just the escape characters if the expansion appears between - double quotes or in a here-document (for simple variable expansions - or expansions of positional parameters) - - 3/8 - --- -subst.c - - analogous changes to parameter_brace_expand_word to fix the same - quoting problem as on 3/4; fix callers to understand that the - value returned might be quoted now and should be dequoted if - necessary - - add a `quoted' argument to get_var_and_type, change callers - - change today's fix and fix from 3/4 to not call quote_string if the - value is "" (because quote_string turns that into CTLNUL\0) - - 3/9 - --- -builtins/cd.def - - resetpwd() now takes a `caller' argument so it can be used by pwd - as well as cd - - change pwd_builtin to call resetpwd() if sh_physpath() fails to - return a valid pathname - - 3/14 - ---- -expr.c - - reworked exp0 and readtok() to make post-increment and post-decrement - into real tokens, which may be separated from their accompanying - variables by whitesapce - - made analogous changes to readtok() to make pre-increment and - pre-decrement work when separated from their accompanying identifier - by whitespace - - 3/18 - ---- -lib/readline/misc.c - - in rl_maybe_unsave_line, don't force rl_replace_line to clear - the undo_list, since it might point directly at an undo list - from a history entry (to which we have no handle) - - 3/19 - ---- -lib/readline/display.c - - rl_save_prompt and rl_restore_prompt now save and restore the value - of prompt_physical_chars - - set prompt_physical_chars in rl_redisplay when expand_prompt has - not been called (e.g., when rl_display_prompt is set and is not - equal to rl_prompt, like when searching) - -lib/readline/histexpand.c - - don't call add_history in history_expand if the `:p' modifier is - supplied; leave that to the calling application. This means that - `history -p', for example, will not add anything to the history - list (as documented), nor will history expansions invoked by - emacs-mode M-C-e line editing - -config-bot.h - - check whether HAVE_DECL_SYS_SIGLIST is defined to 1 rather than just - defined, to work around newer versions of autoconf defining it to 0 - -config.h.in - - change default status of HAVE_MALLOC to #undef instead of #define - -bashhist.c - - extern declarations for rl_done and rl_dispatching - - don't call re_edit from pre_process_line unless rl_dispatcing is zero, - so we don't call it from something like shell-expand-line - - change pre_process_line to add an expanded history specification - that returned `print only' to the history list, since history_expand - no longer does it (and, when using readline, do it only when - rl_dispatching is zero) - - 3/22 - ---- -config.h.in,aclocal.m4 - - change bash-specific functions that look in struct dirent to define - HAVE_STRUCT_DIRENT_xxx, like AC_CHECK_MEMBERS does (though the - functions are otherwise the same) - - new function, BASH_STRUCT_DIRENT_D_NAMLEN, define - HAVE_STRUCT_DIRENT_D_NAMLEN if struct dirent has a `d_namlen' member - -configure.in - - call BASH_STRUCT_DIRENT_D_NAMLEN - -include/posixdir.h - - use new and renamed HAVE_STRUCT_DIRENT_D_xxx defines - - 4/7 - --- -builtins/cd.def - - ensure that we print out a non-null pathname after getting a - directory from CDPATH and canonicalizing it (e.g., if the result - exceeds PATH_MAX in length and the_current_working_directory is - set to NULL) - - 4/12 - ---- -print_cmd.c - - new function to print out assignment statements when `set -x' has - been enabled: xtrace_print_assignment - -externs.h - - extern declaration for xtrace_print_assignment - - 4/13 - ---- -{subst,variables}.c - - call xtrace_print_assignment instead of using inline code - -jobs.c - - if turning on job control when it was previously off, set - pipeline_pgrp to 0 in set_job_control so make_child puts - subsequent children in their own process group - - 4/14 - ---- -general.c - - new function, legal_alias_name, called to decide whether an - argument to add_alias is a valid alias name -- essentially any - character except one which must be quoted to the shell parser - and `/' - -general.h - - new extern declaration for legal_alias_name - -builtins/alias.def - - `unalias' now returns failure status if no NAME arguments are - supplied and -a is not given - - call legal_alias_name to make sure alias name is valid before - calling add_alias from alias_builtin - - 4/19 - ---- -include/shmbutil.h - - include <config.h> for definition of HANDLE_MULTIBYTE rather than - duplicating logic - - 4/20 - ---- - -doc/{bash.1,bashref.texi} - - make sure $0 is consistently referred to as a `special parameter' - - document which characters are now not allowed in alias names - - 4/23 - ---- - -builtins/{jobs,kill,wait}.def - - removed requirement that job control be enabled to use job control - notation, as SUSv3 implies - -subst.c - - based on a message from David Korn, change param_expand to not call - string_list_dollar_star if the only quoting is Q_HERE_DOCUMENT -- - quoted here documents are like double quoting, but not exactly - - analogous changes to list_remove_pattern and pos_params - - 4/24 - ---- -lib/readline/doc/rluser.texi - - fix error in description of emacs-mode C-xC-e command (uses $VISUAL - instead of $FCEDIT) - - 4/28 - ---- -support/bashbug.sh - - integrate a patch from Stefan Nordhausen - <nordhaus@informatik.hu-berlin.de> that reduces race conditions - by using a temporary directory inside $TMPDIR and creating the - temp files in that - - 4/30 - ---- -builtins/common.c - - use pathconf(".", _PC_PATH_MAX) where available to size the argument - to getcwd() rather than using a straight PATH_MAX - -builtins/cd.def - - if get_working_directory fails and returns null (causing resetpwd - to return NULL), use set_working_directory to set $PWD to the - absolute pathname for which chdir just succeeded - - 5/1 - --- -lib/readline/vi_mode.c - - in rl_vi_change_to, call _rl_vi_set_last with rl_numeric_arg instead - of `last', since they're equal at call time and rl_vi_domove can - change rl_numeric_arg (which vi apparently updates). Fixes redo bug - of `c2....' reported by Marion Berryman <mwberryman@copper.net> - - 5/4 - --- -parse.y - - fix decode_prompt_string to properly deal with strftime() returning 0 - - 5/6 - --- -variables.c - - in make_local_array_variable, return an already-existing local array - variable immediately rather than creating a new array (causing a - memory leak) - - 5/8 - --- -lib/readline/vi_mode.c - - change rl_vi_domove to set rl_explicit_arg before calling - rl_digit_loop1 so that multi-digit numeric arguments work right - - _rl_vi_last_command is no longer static - -lib/readline/rlprivate.h - - new extern declaration for _rl_vi_last_command - -lib/readline/text.c - - change rl_newline to only call _rl_vi_reset_last if the last command - (_rl_vi_last_command) is not a text modification command. This lets - the last-command and last-argument work across command lines - - 5/13 - ---- -builtins/common.c - - use getcwd(0,0) rather than providing a fixed pathname with a fixed - length (PATH_MAX) so getcwd() will allocate sufficient memory - -aclocal.m4 - - change BASH_FUNC_GETCWD to check whether or not getcwd(0,0) will - allocate memory for the returned value -- nobody implements that - and getcwd-via-popen, so it should capture the old test as well - - 5/27 - ---- - -builtins/trap.def - - the historical behavior of assuming that a signal's handling should - be set to its original disposition is only in effect if a single - argument is given, otherwise the first argument is assumed to be a - command to execute - - when in posix mode, if trap gets a single argument, display an - error message and return EX_USAGE - - change the help message and usage string to better explain trap's - behavior - -doc/{bash.1,bashref.texi} - - describe the new default behavior when the first argument is a - signal spec - - note that signal names are case insensitive and the SIG prefix is - optional in arguments to `trap' - - note that signal name arguments to `kill' are case-insensitive - -lib/readline/display.c - - make sure rl_on_new_line_with_prompt sets rl_display_prompt to - rl_prompt (just to make sure it's set) - - have rl_on_new_line_with_prompt use local_prompt if it's set - - 6/2 - --- -subst.c - - in string_extract_double_quoted, cope with extract_delimited_string - returning NULL, as it can when attempting completion on an unclosed - command substitution - - 6/24 - ---- -lib/readline/complete.c - - change print_filename to add a `/' to listed directory names if - `mark-directories' has been enabled - -builtins/umask.def - - make sure that the mask passed to parse_symbolic_mode has all but - the operative low eight bits masked off, to avoid complementing - all 0s to -1, which is the error return code. This makes things - like `a=rwx' and `ugo=rwx' work and turn off the umask - - 6/26 - ---- -builtins/getopts.def - - when `getopts' reaches the end of options, unset OPTARG before - returning EOF. In response to a bug report from Apple - -configure.in - - when cross-compiling, don't set CPPFLAGS_FOR_BUILD and - LDFLAGS_FOR_BUILD from CPPFLAGS and LDFLAGS, respectively, since - those are for the target instead of the build platform (report - from robert@schwebel.de) - -shell.c - - a shell whose standard error (but not standard output) is directed - to a terminal should be interactive, according to POSIX/SUS. This - means that sh > sh.out will start an interactive shell. Bug report - from llattanzi@apple.com - -doc/{bash.1,bashref.texi} - - change mention of standard output to standard error in definition - of interactive shell - -lib/readline/vi_mode.c - - new convenience function, rl_vi_start_inserting, calls - _rl_vi_set_last to save the last textmod command state and then calls - rl_vi_insertion_mode to enter insert mode - - change functions to use rl_vi_start_inserting - -lib/readline/readline.h - - extern declaration for rl_vi_start_inserting - -bashline.c - - new function for vi-mode completion, bash_vi_complete. Does - filename expansion as POSIX specifies, unlike the default readline - bindings (which don't know about globbing). Bound to `\', `*', - and `=' in vi command keymap. Internals very similar to - rl_vi_complete; just calls bash glob expansion functions - -lib/readline/vi_mode.c - - change rl_vi_change_char so that an entire change is a single - undoable event, rather than each individual change in a [count]r - command - - fix rl_vi_change_char so that replacing characters up to EOL works - rather than generating rl_ding - - fix rl_vi_change_case so that replacing characters up to EOL works - rather than generating rl_ding - - 6/28 - ---- -builtins/echo.def - - call clearerr(stdout) before writing anything and testing its - failure or success - - 6/29 - ---- -bashline.c - - only set rl_explicit_arg in bash_glob_complete_word if readline is - in emacs mode; let bash_vi_complete take care of setting it in vi - mode - - fix bash_vi_complete to only set rl_explicit_arg unless the posix - conditions are met: no globbing characters in the vi `bigword' - being completed - - 6/30 - ---- -[bash-3.0-rc1 released] - - 7/1 - --- -lib/readline/complete.c - - make sure `extension_char' is initialized before deciding whether - or not the append a `/' to a possible completion when visible-stats - is not enabled - - 7/2 - --- -subst.c - - fix a boundary overrun in string_extract_double_quoted that could - occur when the word completion code attempts to expand an incomplete - construct (like a quoted unclosed command substitution) - - 7/4 - --- -subst.c - - set tempenv_assign_error to non-zero if an assignment to the - temporary environment fails for some reason (e.g., attempted - assignment to a readonly variable) - -execute_cmd.c - - fix execute_simple_command to force a non-interactive shell in - POSIX mode to exit if an assignment to the temporary environment - preceding a special builtin fails (bug report from - llattanzi@apple.com) - - 7/5 - --- -bashline.c - - in bash_directory_completion_hook, don't perform word expansions - if the filename appears to have been completed from the file - system rather than typed in by the user. Bug reported by Tim - Waugh <twaugh@redhat.com> - - 7/7 - --- -lib/readline/misc.c - - if _rl_maybe_save_line is being asked to save a line other than - what's already saved, free up the current saved line and save the - current contents of rl_line_buffer. Bug reported by - llattanzi@apple.com - - 7/12 - ---- -lib/readline/input.c - - do better EOF detection in rl_gather_tyi -- if a read returns 0 when - the fd is in non-blocking mode, stuff an EOF into the input stream - (reported by mattias@virtutech.se) - - 7/13 - ---- -lib/readline/vi_mode.c - - make sure rl_vi_put honors `count' arguments and yanks things - multiple times if requested - - 7/16 - ---- -builtins/umask.def - - make sure that the `who' part of the umask symbolic mode argument - defaults to `a' if it's missing - -flags.c - - make sure that maybe_make_restricted only gets called after the - shell is initialized, so `bash -r' doesn't result in inappropriate - error messages - -[bash-3.0 frozen] +CWRU.chlog
\ No newline at end of file diff --git a/CWRU/old/set.def.save b/CWRU/old/set.def.save new file mode 100644 index 00000000..87b78d7c --- /dev/null +++ b/CWRU/old/set.def.save @@ -0,0 +1,544 @@ +This file is set.def, from which is created set.c. +It implements the "set" and "unset" builtins in Bash. + +Copyright (C) 1987, 1989, 1991 Free Software Foundation, Inc. + +This file is part of GNU Bash, the Bourne Again SHell. + +Bash is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 1, or (at your option) any later +version. + +Bash is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with Bash; see the file COPYING. If not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +$PRODUCES set.c + +#include <stdio.h> +#include "../shell.h" +#include "../flags.h" + +#include "bashgetopt.h" + +extern int interactive; +extern int noclobber, posixly_correct; +#if defined (READLINE) +extern int rl_editing_mode, no_line_editing; +#endif /* READLINE */ + +$BUILTIN set +$FUNCTION set_builtin +$SHORT_DOC set [--abefhkmnptuvxldBCHP] [-o option] [arg ...] + -a Mark variables which are modified or created for export. + -b Notify of job termination immediately. + -e Exit immediately if a command exits with a non-zero status. + -f Disable file name generation (globbing). + -h Locate and remember function commands as functions are + defined. Function commands are normally looked up when + the function is executed. + -i Force the shell to be an "interactive" one. Interactive shells + always read `~/.bashrc' on startup. + -k All keyword arguments are placed in the environment for a + command, not just those that precede the command name. + -m Job control is enabled. + -n Read commands but do not execute them. + -o option-name + Set the variable corresponding to option-name: + allexport same as -a + braceexpand same as -B +#if defined (READLINE) + emacs use an emacs-style line editing interface +#endif /* READLINE */ + errexit same as -e + histexpand same as -H + ignoreeof the shell will not exit upon reading EOF + interactive-comments + allow comments to appear in interactive commands + monitor same as -m + noclobber disallow redirection to existing files + noexec same as -n + noglob same as -f + nohash same as -d + notify save as -b + nounset same as -u + physical same as -P + posix change the behavior of bash where the default + operation differs from the 1003.2 standard to + match the standard + privileged same as -p + verbose same as -v +#if defined (READLINE) + vi use a vi-style line editing interface +#endif /* READLINE */ + xtrace same as -x + -p Turned on whenever the real and effective user ids do not match. + Disables processing of the $ENV file and importing of shell + functions. Turning this option off causes the effective uid and + gid to be set to the real uid and gid. + -t Exit after reading and executing one command. + -u Treat unset variables as an error when substituting. + -v Print shell input lines as they are read. + -x Print commands and their arguments as they are executed. + -l Save and restore the binding of the NAME in a FOR command. + -d Disable the hashing of commands that are looked up for execution. + Normally, commands are remembered in a hash table, and once + found, do not have to be looked up again. +#if defined (BRACE_EXPANSION) + -B the shell will perform brace expansion +#endif /* BRACE_EXPANSION */ +#if defined (BANG_HISTORY) + -H Enable ! style history substitution. This flag is on + by default. +#endif /* BANG_HISTORY */ + -C If set, disallow existing regular files to be overwritten + by redirection of output. + -P If set, do not follow symbolic links when executing commands + such as cd which change the current directory. + +Using + rather than - causes these flags to be turned off. The +flags can also be used upon invocation of the shell. The current +set of flags may be found in $-. The remaining n ARGs are positional +parameters and are assigned, in order, to $1, $2, .. $n. If no +ARGs are given, all shell variables are printed. +$END + +/* An a-list used to match long options for set -o to the corresponding + option letter. */ +struct { + char *name; + int letter; +} o_options[] = { + { "allexport", 'a' }, +#if defined (BRACE_EXPANSION) + { "braceexpand",'B' }, +#endif + { "errexit", 'e' }, + { "histexpand", 'H' }, + { "monitor", 'm' }, + { "noexec", 'n' }, + { "noglob", 'f' }, + { "nohash", 'd' }, +#if defined (JOB_CONTROL) + { "notify", 'b' }, +#endif /* JOB_CONTROL */ + {"nounset", 'u' }, + {"physical", 'P' }, + {"privileged", 'p' }, + {"verbose", 'v' }, + {"xtrace", 'x' }, + {(char *)NULL, 0}, +}; + +#define MINUS_O_FORMAT "%-15s\t%s\n" + +void +list_minus_o_opts () +{ + register int i; + char *on = "on", *off = "off"; + + printf (MINUS_O_FORMAT, "noclobber", (noclobber == 1) ? on : off); + + if (find_variable ("ignoreeof") || find_variable ("IGNOREEOF")) + printf (MINUS_O_FORMAT, "ignoreeof", on); + else + printf (MINUS_O_FORMAT, "ignoreeof", off); + + printf (MINUS_O_FORMAT, "interactive-comments", + interactive_comments ? on : off); + + printf (MINUS_O_FORMAT, "posix", posixly_correct ? on : off); + +#if defined (READLINE) + if (no_line_editing) + { + printf (MINUS_O_FORMAT, "emacs", off); + printf (MINUS_O_FORMAT, "vi", off); + } + else + { + /* Magic. This code `knows' how readline handles rl_editing_mode. */ + printf (MINUS_O_FORMAT, "emacs", (rl_editing_mode == 1) ? on : off); + printf (MINUS_O_FORMAT, "vi", (rl_editing_mode == 0) ? on : off); + } +#endif /* READLINE */ + + for (i = 0; o_options[i].name; i++) + { + int *on_or_off, zero = 0; + + on_or_off = find_flag (o_options[i].letter); + if (on_or_off == FLAG_UNKNOWN) + on_or_off = &zero; + printf (MINUS_O_FORMAT, o_options[i].name, (*on_or_off == 1) ? on : off); + } +} + +set_minus_o_option (on_or_off, option_name) + int on_or_off; + char *option_name; +{ + int option_char = -1; + + if (STREQ (option_name, "noclobber")) + { + if (on_or_off == FLAG_ON) + bind_variable ("noclobber", ""); + else + unbind_variable ("noclobber"); + stupidly_hack_special_variables ("noclobber"); + } + else if (STREQ (option_name, "ignoreeof")) + { + unbind_variable ("ignoreeof"); + unbind_variable ("IGNOREEOF"); + if (on_or_off == FLAG_ON) + bind_variable ("IGNOREEOF", "10"); + stupidly_hack_special_variables ("IGNOREEOF"); + } + +#if defined (READLINE) + else if ((STREQ (option_name, "emacs")) || (STREQ (option_name, "vi"))) + { + if (on_or_off == FLAG_ON) + { + rl_variable_bind ("editing-mode", option_name); + + if (interactive) + with_input_from_stdin (); + no_line_editing = 0; + } + else + { + int isemacs = (rl_editing_mode == 1); + if ((isemacs && STREQ (option_name, "emacs")) || + (!isemacs && STREQ (option_name, "vi"))) + { + if (interactive) + with_input_from_stream (stdin, "stdin"); + no_line_editing = 1; + } + else + builtin_error ("not in %s editing mode", option_name); + } + } +#endif /* READLINE */ + else if (STREQ (option_name, "interactive-comments")) + interactive_comments = (on_or_off == FLAG_ON); + else if (STREQ (option_name, "posix")) + { + posixly_correct = (on_or_off == FLAG_ON); + unbind_variable ("POSIXLY_CORRECT"); + unbind_variable ("POSIX_PEDANTIC"); + if (on_or_off == FLAG_ON) + { + bind_variable ("POSIXLY_CORRECT", ""); + stupidly_hack_special_variables ("POSIXLY_CORRECT"); + } + } + else + { + register int i; + for (i = 0; o_options[i].name; i++) + { + if (STREQ (option_name, o_options[i].name)) + { + option_char = o_options[i].letter; + break; + } + } + if (option_char == -1) + { + builtin_error ("%s: unknown option name", option_name); + return (EXECUTION_FAILURE); + } + if (change_flag (option_char, on_or_off) == FLAG_ERROR) + { + bad_option (option_name); + return (EXECUTION_FAILURE); + } + } + return (EXECUTION_SUCCESS); +} + +/* Set some flags from the word values in the input list. If LIST is empty, + then print out the values of the variables instead. If LIST contains + non-flags, then set $1 - $9 to the successive words of LIST. */ +set_builtin (list) + WORD_LIST *list; +{ + int on_or_off, flag_name, force_assignment = 0; + + if (!list) + { + SHELL_VAR **vars; + + vars = all_shell_variables (); + if (vars) + { + print_var_list (vars); + free (vars); + } + + vars = all_shell_functions (); + if (vars) + { + print_var_list (vars); + free (vars); + } + + return (EXECUTION_SUCCESS); + } + + /* Check validity of flag arguments. */ + if (*list->word->word == '-' || *list->word->word == '+') + { + register char *arg; + WORD_LIST *save_list = list; + + while (list && (arg = list->word->word)) + { + char c; + + if (arg[0] != '-' && arg[0] != '+') + break; + + /* `-' or `--' signifies end of flag arguments. */ + if (arg[0] == '-' && + (!arg[1] || (arg[1] == '-' && !arg[2]))) + break; + + while (c = *++arg) + { + if (find_flag (c) == FLAG_UNKNOWN && c != 'o') + { + char s[2]; + s[0] = c; s[1] = '\0'; + bad_option (s); + if (c == '?') + builtin_usage (); + return (c == '?' ? EXECUTION_SUCCESS : EXECUTION_FAILURE); + } + } + list = list->next; + } + list = save_list; + } + + /* Do the set command. While the list consists of words starting with + '-' or '+' treat them as flags, otherwise, start assigning them to + $1 ... $n. */ + while (list) + { + char *string = list->word->word; + + /* If the argument is `--' or `-' then signal the end of the list + and remember the remaining arguments. */ + if (string[0] == '-' && (!string[1] || (string[1] == '-' && !string[2]))) + { + list = list->next; + + /* `set --' unsets the positional parameters. */ + if (string[1] == '-') + force_assignment = 1; + + /* Until told differently, the old shell behaviour of + `set - [arg ...]' being equivalent to `set +xv [arg ...]' + stands. Posix.2 says the behaviour is marked as obsolescent. */ + else + { + change_flag ('x', '+'); + change_flag ('v', '+'); + } + + break; + } + + if ((on_or_off = *string) && + (on_or_off == '-' || on_or_off == '+')) + { + int i = 1; + while (flag_name = string[i++]) + { + if (flag_name == '?') + { + builtin_usage (); + return (EXECUTION_SUCCESS); + } + else if (flag_name == 'o') /* -+o option-name */ + { + char *option_name; + WORD_LIST *opt; + + opt = list->next; + + if (!opt) + { + list_minus_o_opts (); + continue; + } + + option_name = opt->word->word; + + if (!option_name || !*option_name || (*option_name == '-')) + { + list_minus_o_opts (); + continue; + } + list = list->next; /* Skip over option name. */ + + if (set_minus_o_option (on_or_off, option_name) != EXECUTION_SUCCESS) + return (EXECUTION_FAILURE); + } + else + { + if (change_flag (flag_name, on_or_off) == FLAG_ERROR) + { + char opt[3]; + opt[0] = on_or_off; + opt[1] = flag_name; + opt[2] = '\0'; + bad_option (opt); + builtin_usage (); + return (EXECUTION_FAILURE); + } + } + } + } + else + { + break; + } + list = list->next; + } + + /* Assigning $1 ... $n */ + if (list || force_assignment) + remember_args (list, 1); + return (EXECUTION_SUCCESS); +} + +$BUILTIN unset +$FUNCTION unset_builtin +$SHORT_DOC unset [-f] [-v] [name ...] +For each NAME, remove the corresponding variable or function. Given +the `-v', unset will only act on variables. Given the `-f' flag, +unset will only act on functions. With neither flag, unset first +tries to unset a variable, and if that fails, then tries to unset a +function. Some variables (such as PATH and IFS) cannot be unset; also +see readonly. +$END + +#define NEXT_VARIABLE() any_failed++; list = list->next; continue; + +unset_builtin (list) + WORD_LIST *list; +{ + int unset_function, unset_variable, unset_array, opt, any_failed; + char *name; + + unset_function = unset_variable = unset_array = any_failed = 0; + + reset_internal_getopt (); + while ((opt = internal_getopt (list, "fv")) != -1) + { + switch (opt) + { + case 'f': + unset_function = 1; + break; + case 'v': + unset_variable = 1; + break; + default: + builtin_usage (); + return (EXECUTION_FAILURE); + } + } + + list = loptend; + + if (unset_function && unset_variable) + { + builtin_error ("cannot simultaneously unset a function and a variable"); + return (EXECUTION_FAILURE); + } + + while (list) + { + SHELL_VAR *var; + int tem; +#if defined (ARRAY_VARS) + char *t; +#endif + + name = list->word->word; + +#if defined (ARRAY_VARS) + if (!unset_function && valid_array_reference (name)) + { + t = strchr (name, '['); + *t++ = '\0'; + unset_array++; + } +#endif + + var = unset_function ? find_function (name) : find_variable (name); + + if (var && !unset_function && non_unsettable_p (var)) + { + builtin_error ("%s: cannot unset", name); + NEXT_VARIABLE (); + } + + /* Posix.2 says that unsetting readonly variables is an error. */ + if (var && readonly_p (var)) + { + builtin_error ("%s: cannot unset: readonly %s", + name, unset_function ? "function" : "variable"); + NEXT_VARIABLE (); + } + + /* Unless the -f option is supplied, the name refers to a variable. */ +#if defined (ARRAY_VARS) + if (var && unset_array) + { + if (array_p (var) == 0) + { + builtin_error ("%s: not an array variable", name); + NEXT_VARIABLE (); + } + else + tem = unbind_array_element (var, t); + } + else +#endif /* ARRAY_VARS */ + tem = makunbound (name, unset_function ? shell_functions : shell_variables); + + /* This is what Posix.2 draft 11+ says. ``If neither -f nor -v + is specified, the name refers to a variable; if a variable by + that name does not exist, a function by that name, if any, + shall be unset.'' */ + if ((tem == -1) && !unset_function && !unset_variable) + tem = makunbound (name, shell_functions); + + if (tem == -1) + any_failed++; + else if (!unset_function) + stupidly_hack_special_variables (name); + + list = list->next; + } + + if (any_failed) + return (EXECUTION_FAILURE); + else + return (EXECUTION_SUCCESS); +} diff --git a/CWRU/save/unwind_prot.h.save b/CWRU/save/unwind_prot.h.save new file mode 100644 index 00000000..998fd72b --- /dev/null +++ b/CWRU/save/unwind_prot.h.save @@ -0,0 +1,50 @@ +/* unwind_prot.h - Macros and functions for hacking unwind protection. */ + +/* Copyright (C) 1993 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. + + Bash is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + Bash is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License along + with Bash; see the file COPYING. If not, write to the Free Software + Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#if !defined (_UNWIND_PROT_H) +#define _UNWIND_PROT_H + +/* Run a function without interrupts. */ +extern void begin_unwind_frame (); +extern void discard_unwind_frame (); +extern void run_unwind_frame (); +extern void add_unwind_protect (); +extern void remove_unwind_protect (); +extern void run_unwind_protects (); +extern void unwind_protect_var (); + +/* Define for people who like their code to look a certain way. */ +#define end_unwind_frame() + +/* How to protect an integer. */ +#define unwind_protect_int(X) unwind_protect_var (&(X), (char *)(X), sizeof (int)) + +/* How to protect a pointer to a string. */ +#define unwind_protect_string(X) \ + unwind_protect_var ((int *)&(X), (X), sizeof (char *)) + +/* How to protect any old pointer. */ +#define unwind_protect_pointer(X) unwind_protect_string (X) + +/* How to protect the contents of a jmp_buf. */ +#define unwind_protect_jmp_buf(X) \ + unwind_protect_var ((int *)(X), (char *)(X), sizeof (procenv_t)) + +#endif /* _UNWIND_PROT_H */ @@ -463,7 +463,6 @@ po/Rules-builtins f po/Rules-quot f po/bash.pot f po/boldquot.sed f -po/builtins.pot f po/en@quot.header f po/en@boldquot.header f po/en@quot.po f @@ -451,7 +451,7 @@ char *v; */ array_dispose_element(new); free(element_value(ae)); - ae->value = savestring(v); + ae->value = v ? savestring(v) : (char *)NULL; return(0); } else if (element_index(ae) > i) { ADD_BEFORE(ae, new); diff --git a/autom4te.cache/output.0 b/autom4te.cache/output.0 index 141a689b..703bc0bd 100644 --- a/autom4te.cache/output.0 +++ b/autom4te.cache/output.0 @@ -1,5 +1,5 @@ @%:@! /bin/sh -@%:@ From configure.in for Bash 3.0, version 3.165, from autoconf version AC_ACVERSION. +@%:@ From configure.in for Bash 3.0, version 3.166, from autoconf version AC_ACVERSION. @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.57 for bash 3.0-release. @%:@ @@ -13074,223 +13074,6 @@ done -for ac_header in stdlib.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -@%:@include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -@%:@include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc in - yes:no ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - ( - cat <<\_ASBOX -@%:@@%:@ ------------------------------------ @%:@@%:@ -@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@ -@%:@@%:@ ------------------------------------ @%:@@%:@ -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; - no:yes ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - ( - cat <<\_ASBOX -@%:@@%:@ ------------------------------------ @%:@@%:@ -@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@ -@%:@@%:@ ------------------------------------ @%:@@%:@ -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5 -echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6 -if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_malloc_0_nonnull=no -else - cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if STDC_HEADERS || HAVE_STDLIB_H -# include <stdlib.h> -#else -char *malloc (); -#endif - -int -main () -{ -exit (malloc (0) ? 0 : 1); - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_malloc_0_nonnull=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_malloc_0_nonnull=no -fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5 -echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6 -if test $ac_cv_func_malloc_0_nonnull = yes; then - -cat >>confdefs.h <<\_ACEOF -@%:@define HAVE_MALLOC 1 -_ACEOF - -else - cat >>confdefs.h <<\_ACEOF -@%:@define HAVE_MALLOC 0 -_ACEOF - - LIB@&t@OBJS="$LIB@&t@OBJS malloc.$ac_objext" - -cat >>confdefs.h <<\_ACEOF -@%:@define malloc rpl_malloc -_ACEOF - -fi - - - - for ac_header in stdlib.h unistd.h do diff --git a/autom4te.cache/requests b/autom4te.cache/requests index f2d7826a..9f0cac67 100644 --- a/autom4te.cache/requests +++ b/autom4te.cache/requests @@ -15,96 +15,96 @@ 'configure.in' ], { - 'AC_HEADER_DIRENT' => 1, - 'AC_PROG_CC' => 1, + 'AC_STRUCT_TM' => 1, 'AC_TYPE_PID_T' => 1, - 'AC_FUNC_MALLOC' => 1, - 'AC_FUNC_MBRTOWC' => 1, - 'AC_FUNC_LSTAT' => 1, - 'AC_HEADER_TIME' => 1, - 'AH_OUTPUT' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'm4_pattern_forbid' => 1, + 'AC_FUNC_OBSTACK' => 1, + 'AC_PROG_LEX' => 1, 'AC_FUNC_GETMNTENT' => 1, - 'AC_PROG_CPP' => 1, + 'AC_FUNC_REALLOC' => 1, + 'AC_FUNC_MEMCMP' => 1, + 'AC_FUNC_GETPGRP' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AC_HEADER_DIRENT' => 1, + 'AC_PROG_AWK' => 1, + 'AC_HEADER_SYS_WAIT' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_FUNC_ALLOCA' => 1, + 'AC_FUNC_MMAP' => 1, 'AC_TYPE_MODE_T' => 1, - 'm4_pattern_allow' => 1, - 'AC_PROG_YACC' => 1, + 'AC_TYPE_SIZE_T' => 1, + 'AC_C_INLINE' => 1, + 'AC_FUNC_GETGROUPS' => 1, + 'AC_FUNC_FSEEKO' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AC_FUNC_STRCOLL' => 1, + 'AC_INIT' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AM_PROG_CC_C_O' => 1, + 'AC_FUNC_STRFTIME' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_TYPE_OFF_T' => 1, + 'AC_PROG_LN_S' => 1, 'AC_FUNC_MKTIME' => 1, - 'AC_CHECK_TYPES' => 1, - 'AC_PROG_CXX' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AC_TYPE_UID_T' => 1, + 'AC_FUNC_MALLOC' => 1, 'AC_HEADER_MAJOR' => 1, - 'AC_CHECK_FUNCS' => 1, + 'AC_FUNC_MBRTOWC' => 1, + 'AC_PROG_CPP' => 1, + 'AC_FUNC_UTIME_NULL' => 1, + 'AC_DECL_SYS_SIGLIST' => 1, 'AC_CHECK_HEADERS' => 1, - 'AC_INIT' => 1, - 'AC_STRUCT_TIMEZONE' => 1, - 'AM_MAINTAINER_MODE' => 1, - 'AC_PROG_MAKE_SET' => 1, - 'AC_FUNC_CHOWN' => 1, - 'AC_FUNC_ERROR_AT_LINE' => 1, - 'AC_CONFIG_FILES' => 1, - 'AC_CANONICAL_HOST' => 1, - 'AC_LIBSOURCE' => 1, + 'm4_include' => 1, + 'AC_HEADER_STAT' => 1, + 'AC_FUNC_GETLOADAVG' => 1, + 'AC_PROG_GCC_TRADITIONAL' => 1, + 'AC_TYPE_SIGNAL' => 1, 'AC_PROG_RANLIB' => 1, - 'AC_FUNC_MMAP' => 1, - 'AC_CHECK_MEMBERS' => 1, - 'AC_FUNC_STRTOD' => 1, - 'AM_PROG_CC_C_O' => 1, - 'AC_FUNC_CLOSEDIR_VOID' => 1, 'AC_FUNC_VPRINTF' => 1, - 'AC_PROG_LEX' => 1, - 'AC_FUNC_STAT' => 1, - 'AC_REPLACE_FNMATCH' => 1, - 'AC_STRUCT_TM' => 1, - 'AC_FUNC_STRCOLL' => 1, + 'AC_PROG_YACC' => 1, 'AC_FUNC_STRNLEN' => 1, - 'm4_include' => 1, - 'AC_CONFIG_AUX_DIR' => 1, - 'AC_FUNC_STRERROR_R' => 1, - 'AC_CANONICAL_SYSTEM' => 1, - 'AC_CHECK_LIB' => 1, - 'AC_STRUCT_ST_BLOCKS' => 1, - 'AC_PATH_X' => 1, + 'AC_FUNC_FORK' => 1, + 'AH_OUTPUT' => 1, + 'AC_STRUCT_TIMEZONE' => 1, + 'AC_HEADER_TIME' => 1, + 'AC_FUNC_STAT' => 1, 'AC_FUNC_SELECT_ARGTYPES' => 1, - 'AC_FUNC_MEMCMP' => 1, + 'AC_PROG_CC' => 1, 'include' => 1, - 'AC_C_VOLATILE' => 1, + 'AC_CHECK_MEMBERS' => 1, + 'AC_PROG_INSTALL' => 1, + 'AC_FUNC_ERROR_AT_LINE' => 1, 'AM_GNU_GETTEXT' => 1, - 'AC_DECL_SYS_SIGLIST' => 1, + 'AC_FUNC_STRTOD' => 1, + 'AC_HEADER_STDC' => 1, + 'AC_CHECK_FUNCS' => 1, + 'AC_LIBSOURCE' => 1, + 'AC_REPLACE_FNMATCH' => 1, + 'AC_CONFIG_FILES' => 1, + 'AC_CHECK_TYPES' => 1, + 'AC_CONFIG_HEADERS' => 1, + 'AC_FUNC_CLOSEDIR_VOID' => 1, + 'AC_C_CONST' => 1, + 'AC_FUNC_STRERROR_R' => 1, + 'AC_FUNC_CHOWN' => 1, 'AC_FUNC_SETPGRP' => 1, - 'AC_FUNC_OBSTACK' => 1, - 'AM_CONDITIONAL' => 1, - 'AC_FUNC_REALLOC' => 1, - 'AC_FUNC_WAIT3' => 1, - 'AC_FUNC_STRFTIME' => 1, - 'AC_SUBST' => 1, - 'AC_PROG_LIBTOOL' => 1, - 'AC_FUNC_FSEEKO' => 1, - 'AC_HEADER_STAT' => 1, - 'AC_C_INLINE' => 1, - 'AC_DEFINE_TRACE_LITERAL' => 1, - 'AC_FUNC_GETGROUPS' => 1, - 'AC_FUNC_GETLOADAVG' => 1, - 'AC_PROG_INSTALL' => 1, - 'm4_pattern_forbid' => 1, 'AC_FUNC_SETVBUF_REVERSED' => 1, - 'AC_TYPE_SIGNAL' => 1, - 'AC_PROG_GCC_TRADITIONAL' => 1, - 'AC_PROG_LN_S' => 1, - 'AM_INIT_AUTOMAKE' => 1, - 'AM_AUTOMAKE_VERSION' => 1, - 'AC_FUNC_ALLOCA' => 1, - 'AC_PROG_AWK' => 1, - 'AC_CONFIG_HEADERS' => 1, - 'AC_FUNC_GETPGRP' => 1, - 'AC_TYPE_OFF_T' => 1, - 'AC_FUNC_UTIME_NULL' => 1, - 'AC_TYPE_SIZE_T' => 1, + 'AC_CHECK_LIB' => 1, + 'AC_FUNC_WAIT3' => 1, + 'AC_PROG_MAKE_SET' => 1, 'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' => 1, - 'AC_CONFIG_SUBDIRS' => 1, - 'AC_FUNC_FORK' => 1, - 'AC_TYPE_UID_T' => 1, - 'AC_HEADER_SYS_WAIT' => 1, - 'AC_HEADER_STDC' => 1, - 'AC_C_CONST' => 1 + 'AC_FUNC_LSTAT' => 1, + 'm4_pattern_allow' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + 'AC_PROG_CXX' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'AC_C_VOLATILE' => 1, + 'AC_PATH_X' => 1, + 'AC_STRUCT_ST_BLOCKS' => 1, + 'AC_SUBST' => 1 } ], 'Request' ) ); diff --git a/autom4te.cache/traces.0 b/autom4te.cache/traces.0 index 64b184d2..542a0a61 100644 --- a/autom4te.cache/traces.0 +++ b/autom4te.cache/traces.0 @@ -823,20 +823,6 @@ m4trace:configure.in:682: -1- AH_OUTPUT([HAVE_MALLOC_H], [/* Define to 1 if you #undef HAVE_MALLOC_H]) m4trace:configure.in:682: -1- AH_OUTPUT([HAVE_STDIO_EXT_H], [/* Define to 1 if you have the <stdio_ext.h> header file. */ #undef HAVE_STDIO_EXT_H]) -m4trace:configure.in:684: -1- AC_FUNC_MALLOC -m4trace:configure.in:684: -1- AC_CHECK_HEADERS([stdlib.h]) -m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H]) -m4trace:configure.in:684: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) -m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_MALLOC], [/* Define to 1 if your system has a GNU libc compatible `malloc\' function, and - to 0 otherwise. */ -#undef HAVE_MALLOC]) -m4trace:configure.in:684: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) -m4trace:configure.in:684: -1- AC_LIBSOURCE([malloc.c]) -m4trace:configure.in:684: -1- AC_SUBST([LIB@&t@OBJS]) -m4trace:configure.in:684: -1- AC_DEFINE_TRACE_LITERAL([malloc]) -m4trace:configure.in:684: -1- AH_OUTPUT([malloc], [/* Define to rpl_malloc if the replacement function should be used. */ -#undef malloc]) m4trace:configure.in:685: -1- AC_FUNC_MMAP m4trace:configure.in:685: -1- AC_CHECK_HEADERS([stdlib.h unistd.h]) m4trace:configure.in:685: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */ @@ -292,7 +292,7 @@ enable_hostname_completion (on_or_off) /* See if we have anything to do. */ at = strchr (rl_completer_word_break_characters, '@'); if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0)) - return; + return old_value; /* We have something to do. Do it. */ nval = (char *)xmalloc (strlen (rl_completer_word_break_characters) + 1 + on_or_off); diff --git a/builtins/evalfile.c b/builtins/evalfile.c index c17e547b..c87991a7 100644 --- a/builtins/evalfile.c +++ b/builtins/evalfile.c @@ -39,6 +39,7 @@ #include "../flags.h" #include "../input.h" #include "../execute_cmd.h" +#include "../trap.h" #if defined (HISTORY) # include "../bashhist.h" diff --git a/builtins/reserved.def b/builtins/reserved.def index 0f293d39..50a942f8 100644 --- a/builtins/reserved.def +++ b/builtins/reserved.def @@ -145,9 +145,8 @@ $BUILTIN variables $DOCNAME variable_help $SHORT_DOC variables - Some variable names and meanings BASH_VERSION Version information for this Bash. -CDPATH A colon separated list of directories to search - when the argument to `cd' is not found in the current - directory. +CDPATH A colon-separated list of directories to search + for directries given as arguments to `cd'. GLOBIGNORE A colon-separated list of patterns describing filenames to be ignored by pathname expansion. #if defined (HISTORY) diff --git a/doc/FAQ-2.05b b/doc/FAQ-2.05b new file mode 100644 index 00000000..f0f3d1b6 --- /dev/null +++ b/doc/FAQ-2.05b @@ -0,0 +1,1771 @@ +This is the Bash FAQ, version 3.26, for Bash version 2.05b. + +This document contains a set of frequently-asked questions concerning +Bash, the GNU Bourne-Again Shell. Bash is a freely-available command +interpreter with advanced features for both interactive use and shell +programming. + +Another good source of basic information about shells is the collection +of FAQ articles periodically posted to comp.unix.shell. + +Questions and comments concerning this document should be sent to +chet@po.cwru.edu. + +This document is available for anonymous FTP with the URL + +ftp://ftp.cwru.edu/pub/bash/FAQ + +The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html + +---------- +Contents: + +Section A: The Basics + +A1) What is it? +A2) What's the latest version? +A3) Where can I get it? +A4) On what machines will bash run? +A5) Will bash run on operating systems other than Unix? +A6) How can I build bash with gcc? +A7) How can I make bash my login shell? +A8) I just changed my login shell to bash, and now I can't FTP into my + machine. Why not? +A9) What's the `POSIX Shell and Utilities standard'? +A10) What is the bash `posix mode'? + +Section B: The latest version + +B1) What's new in version 2.05b? +B2) Are there any user-visible incompatibilities between bash-2.05b and + bash-1.14.7? + +Section C: Differences from other Unix shells + +C1) How does bash differ from sh, the Bourne shell? +C2) How does bash differ from the Korn shell, version ksh88? +C3) Which new features in ksh-93 are not in bash, and which are? + +Section D: Why does bash do some things differently than other Unix shells? + +D1) Why does bash run a different version of `command' than + `which command' says it will? +D2) Why doesn't bash treat brace expansions exactly like csh? +D3) Why doesn't bash have csh variable modifiers? +D4) How can I make my csh aliases work when I convert to bash? +D5) How can I pipe standard output and standard error from one command to + another, like csh does with `|&'? +D6) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? + +Section E: Why does bash do certain things the way it does? + +E1) Why is the bash builtin `test' slightly different from /bin/test? +E2) Why does bash sometimes say `Broken pipe'? +E3) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? +E4) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? +E5) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? +E6) Why doesn't a while or for loop get suspended when I type ^Z? +E7) What about empty for loops in Makefiles? +E8) Why does the arithmetic evaluation code complain about `08'? +E9) Why does the pattern matching expression [A-Z]* match files beginning + with every letter except `z'? +E10) Why does `cd //' leave $PWD as `//'? +E11) If I resize my xterm while another program is running, why doesn't bash + notice the change? +E12) Why don't negative offsets in substring expansion work like I expect? + +Section F: Things to watch out for on certain Unix versions + +F1) Why can't I use command line editing in my `cmdtool'? +F2) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? +F3) Why does bash dump core after I interrupt username completion or + `~user' tilde expansion on a machine running NIS? +F4) I'm running SVR4.2. Why is the line erased every time I type `@'? +F5) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? +F6) Why can't I use vi-mode editing on Red Hat Linux 6.1? +F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on + HP/UX 11.x? + +Section G: How can I get bash to do certain common things? + +G1) How can I get bash to read and display eight-bit characters? +G2) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? +G3) How can I find the value of a shell variable whose name is the value + of another shell variable? +G4) How can I make the bash `time' reserved word print timing output that + looks like the output from my system's /usr/bin/time? +G5) How do I get the current directory into my prompt? +G6) How can I rename "*.foo" to "*.bar"? +G7) How can I translate a filename from uppercase to lowercase? +G8) How can I write a filename expansion (globbing) pattern that will match + all files in the current directory except "." and ".."? + +Section H: Where do I go from here? + +H1) How do I report bugs in bash, and where should I look for fixes and + advice? +H2) What kind of bash documentation is there? +H3) What's coming in future versions? +H4) What's on the bash `wish list'? +H5) When will the next release appear? + +---------- +Section A: The Basics + +A1) What is it? + +Bash is a Unix command interpreter (shell). It is an implementation of +the Posix 1003.2 shell standard, and resembles the Korn and System V +shells. + +Bash contains a number of enhancements over those shells, both +for interactive use and shell programming. Features geared +toward interactive use include command line editing, command +history, job control, aliases, and prompt expansion. Programming +features include additional variable expansions, shell +arithmetic, and a number of variables and options to control +shell behavior. + +Bash was originally written by Brian Fox of the Free Software +Foundation. The current developer and maintainer is Chet Ramey +of Case Western Reserve University. + +A2) What's the latest version? + +The latest version is 2.05b, first made available on Wednesday, 17 +July, 2002. + +A3) Where can I get it? + +Bash is the GNU project's shell, and so is available from the +master GNU archive site, ftp.gnu.org, and its mirrors. The +latest version is also available for FTP from ftp.cwru.edu. +The following URLs tell how to get version 2.05b: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz + +Formatted versions of the documentation are available with the URLs: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz + +A4) On what machines will bash run? + +Bash has been ported to nearly every version of UNIX. All you +should have to do to build it on a machine for which a port +exists is to type `configure' and then `make'. The build process +will attempt to discover the version of UNIX you have and tailor +itself accordingly, using a script created by GNU autoconf. + +More information appears in the file `INSTALL' in the distribution. + +The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html) +explains how to obtain binary versions of bash for most of the major +commercial Unix systems. + +A5) Will bash run on operating systems other than Unix? + +Configuration specifics for Unix-like systems such as QNX and +LynxOS are included in the distribution. Bash-2.05 and later +versions should compile and run on Minix 2.0 (patches were +contributed), but I don't believe anyone has built bash-2.x on +earlier Minix versions yet. + +Bash has been ported to versions of Windows implementing the Win32 +programming interface. This includes Windows 95 and Windows NT. +The port was done by Cygnus Solutions as part of their CYGWIN +project. For more information about the project, look at the URLs + +http://www.cygwin.com/ +http://sourceware.cygnus.com/cygwin + +Cygnus originally ported bash-1.14.7, and that port was part of their +early GNU-Win32 (the original name) releases. Cygnus has also done a +port of bash-2.05 to the CYGWIN environment, and it is available as +part of their current release. + +Bash-2.05b should require no local Cygnus changes to build and run under +CYGWIN. + +The Cygnus port works only on Intel machines. There is a port of bash +(I don't know which version) to the alpha/NT environment available from + +ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz + +DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part +of the DJGPP project. For more information on the project, see + +http://www.delorie.com/djgpp/ + +I have been told that the original DJGPP port was done by Daisuke Aoyama. + +Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04 +is available for DJGPP V2. The files are available as: + +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source + +Mark has begun to work with bash-2.05, but I don't know the status. + +Ports of bash-1.12 and bash-2.0 are available for OS/2 from + +ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip +ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip + +I haven't looked at either, but the second appears to be a binary-only +distribution. Beware. + +I have received word that Bash (I'm not sure which version, but I +believe that it's at least bash-2.02.1) is the standard shell on +BeOS. + +A6) How can I build bash with gcc? + +Bash configures to use gcc by default if it is available. Read the +file INSTALL in the distribution for more information. + +A7) How can I make bash my login shell? + +Some machines let you use `chsh' to change your login shell. Other +systems use `passwd -s' or `passwd -e'. If one of these works for +you, that's all you need. Note that many systems require the full +pathname to a shell to appear in /etc/shells before you can make it +your login shell. For this, you may need the assistance of your +friendly local system administrator. + +If you cannot do this, you can still use bash as your login shell, but +you need to perform some tricks. The basic idea is to add a command +to your login shell's startup file to replace your login shell with +bash. + +For example, if your login shell is csh or tcsh, and you have installed +bash in /usr/gnu/bin/bash, add the following line to ~/.login: + + if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login + +(the `--login' tells bash that it is a login shell). + +It's not a good idea to put this command into ~/.cshrc, because every +csh you run without the `-f' option, even ones started to run csh scripts, +reads that file. If you must put the command in ~/.cshrc, use something +like + + if ( $?prompt ) exec /usr/gnu/bin/bash --login + +to ensure that bash is exec'd only when the csh is interactive. + +If your login shell is sh or ksh, you have to do two things. + +First, create an empty file in your home directory named `.bash_profile'. +The existence of this file will prevent the exec'd bash from trying to +read ~/.profile, and re-execing itself over and over again. ~/.bash_profile +is the first file bash tries to read initialization commands from when +it is invoked as a login shell. + +Next, add a line similar to the above to ~/.profile: + + [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \ + exec /usr/gnu/bin/bash --login + +This will cause login shells to replace themselves with bash running as +a login shell. Once you have this working, you can copy your initialization +code from ~/.profile to ~/.bash_profile. + +I have received word that the recipe supplied above is insufficient for +machines running CDE. CDE has a maze of twisty little startup files, all +slightly different. + +If you cannot change your login shell in the password file to bash, you +will have to (apparently) live with CDE using the shell in the password +file to run its startup scripts. If you have changed your shell to bash, +there is code in the CDE startup files (on Solaris, at least) that attempts +to do the right thing. It is, however, often broken, and may require that +you use the $BASH_ENV trick described below. + +`dtterm' claims to use $SHELL as the default program to start, so if you +can change $SHELL in the CDE startup files, you should be able to use bash +in your terminal windows. + +Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program +to read your login shell's startup files. You may be able to use bash for +the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as +well, but I have not tried this. + +You can use the above `exec' recipe to start bash when not logging in with +CDE by testing the value of the DT variable: + + if [ -n "$DT" ]; then + [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login + fi + +If CDE starts its shells non-interactively during login, the login shell +startup files (~/.profile, ~/.bash_profile) will not be sourced at login. +To get around this problem, append a line similar to the following to your +~/.dtprofile: + + BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV + +and add the following line to the beginning of ~/.bash_profile: + + unset BASH_ENV + +A8) I just changed my login shell to bash, and now I can't FTP into my + machine. Why not? + +You must add the full pathname to bash to the file /etc/shells. As +noted in the answer to the previous question, many systems require +this before you can make bash your login shell. + +Most versions of ftpd use this file to prohibit `special' users +such as `uucp' and `news' from using FTP. + +A9) What's the `POSIX Shell and Utilities standard'? + +POSIX is a name originally coined by Richard Stallman for a +family of open system standards based on UNIX. There are a +number of aspects of UNIX under consideration for +standardization, from the basic system services at the system +call and C library level to applications and tools to system +administration and management. Each area of standardization is +assigned to a working group in the 1003 series. + +The POSIX Shell and Utilities standard was originally developed by +IEEE Working Group 1003.2 (POSIX.2). Today it has been merged with +the original 1003.1 Working Group and is maintained by the Austin +Group (a joint working group of the IEEE, The Open Group and +ISO/IEC SC22/WG15). Today the Shell and Utilities are a volume +within the set of documents that make up IEEE Std 1003.1-2001, and +thus now the former POSIX.2 (from 1992) is now part of the current +POSIX.1 standard (POSIX 1003.1-2001). + +The Shell and Utilities volume concentrates on the command +interpreter interface and utility programs commonly executed from +the command line or by other programs. The standard is freely +available on the web at http://www.UNIX-systems.org/version3/ . +Work continues at the Austin Group on maintenance issues; see +http://www.opengroup.org/austin/ to join the discussions. + +Bash is concerned with the aspects of the shell's behavior defined +by the POSIX Shell and Utilities volume. The shell command +language has of course been standardized, including the basic flow +control and program execution constructs, I/O redirection and +pipelining, argument handling, variable expansion, and quoting. + +The `special' builtins, which must be implemented as part of the +shell to provide the desired functionality, are specified as +being part of the shell; examples of these are `eval' and +`export'. Other utilities appear in the sections of POSIX not +devoted to the shell which are commonly (and in some cases must +be) implemented as builtin commands, such as `read' and `test'. +POSIX also specifies aspects of the shell's interactive +behavior as part of the UPE, including job control and command +line editing. Only vi-style line editing commands have been +standardized; emacs editing commands were left out due to +objections. + +The latest version of the POSIX Shell and Utilities standard is +available (now updated to the 2003 Edition incorporating the +Technical Corrigendum 1), as part of the Single UNIX Specification +Version 3 at + +http://www.UNIX-systems.org/version3/ + +A10) What is the bash `posix mode'? + +Although bash is an implementation of the POSIX shell +specification, there are areas where the bash default behavior +differs from that spec. The bash `posix mode' changes the bash +behavior in these areas so that it obeys the spec more closely. + +Posix mode is entered by starting bash with the --posix or +'-o posix' option or executing `set -o posix' after bash is running. + +The specific aspects of bash which change when posix mode is +active are listed in the file POSIX in the bash distribution. +They are also listed in a section in the Bash Reference Manual +(from which that file is generated). + +Section B: The latest version + +B1) What's new in version 2.05b? + +The raison d'etre for bash-2.05b is to make a second intermediate +release containing the first of the new features to be available +in bash-3.0 and get feedback on those features before proceeding. +The major new feature is multibyte character support in both Bash +and Readline. + +Bash-2.05b contains the following new features (see the manual page for +complete descriptions and the CHANGES and NEWS files in the bash-2.05b +distribution): + +o support for multibyte characters has been added to both bash and readline + +o the DEBUG trap is now run *before* simple commands, ((...)) commands, + [[...]] conditional commands, and for ((...)) loops + +o the shell now performs arithmetic in the largest integer size the machine + supports (intmax_t) + +o there is a new \D{...} prompt expansion; passes the `...' to strftime(3) + and inserts the result into the expanded prompt + +o there is a new `here-string' redirection operator: <<< word + +o when displaying variables, function attributes and definitions are shown + separately, allowing them to be re-used as input (attempting to re-use + the old output would result in syntax errors). + +o `read' has a new `-u fd' option to read from a specified file descriptor + +o the bash debugger in examples/bashdb has been modified to work with the + new DEBUG trap semantics, the command set has been made more gdb-like, + and the changes to $LINENO make debugging functions work better + +o the expansion of $LINENO inside a shell function is only relative to the + function start if the shell is interactive -- if the shell is running a + script, $LINENO expands to the line number in the script. This is as + POSIX-2001 requires + + +A short feature history dating from Bash-2.0: + +Bash-2.05a introduced the following new features: + +o The `printf' builtin has undergone major work + +o There is a new read-only `shopt' option: login_shell, which is set by + login shells and unset otherwise + +o New `\A' prompt string escape sequence; expanding to time in 24-hour + HH:MM format + +o New `-A group/-g' option to complete and compgen; goes group name + completion + +o New [+-]O invocation option to set and unset `shopt' options at startup + +o ksh-like `ERR' trap + +o `for' loops now allow empty word lists after the `in' reserved word + +o new `hard' and `soft' arguments for the `ulimit' builtin + +o Readline can be configured to place the user at the same point on the line + when retrieving commands from the history list + +o Readline can be configured to skip `hidden' files (filenames with a leading + `.' on Unix) when performing completion + +Bash-2.05 introduced the following new features: + +o This version has once again reverted to using locales and strcoll(3) when + processing pattern matching bracket expressions, as POSIX requires. +o Added a new `--init-file' invocation argument as a synonym for `--rcfile', + per the new GNU coding standards. +o The /dev/tcp and /dev/udp redirections now accept service names as well as + port numbers. +o `complete' and `compgen' now take a `-o value' option, which controls some + of the aspects of that compspec. Valid values are: + + default - perform bash default completion if programmable + completion produces no matches + dirnames - perform directory name completion if programmable + completion produces no matches + filenames - tell readline that the compspec produces filenames, + so it can do things like append slashes to + directory names and suppress trailing spaces +o A new loadable builtin, realpath, which canonicalizes and expands symlinks + in pathname arguments. +o When `set' is called without options, it prints function defintions in a + way that allows them to be reused as input. This affects `declare' and + `declare -p' as well. This only happens when the shell is not in POSIX + mode, since POSIX.2 forbids this behavior. + +Bash-2.04 introduced the following new features: + +o Programmable word completion with the new `complete' and `compgen' builtins; + examples are provided in examples/complete/complete-examples +o `history' has a new `-d' option to delete a history entry +o `bind' has a new `-x' option to bind key sequences to shell commands +o The prompt expansion code has new `\j' and `\l' escape sequences +o The `no_empty_cmd_completion' shell option, if enabled, inhibits + command completion when TAB is typed on an empty line +o `help' has a new `-s' option to print a usage synopsis +o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma) +o New ksh93-style arithmetic for command: + for ((expr1 ; expr2; expr3 )); do list; done +o `read' has new options: `-t', `-n', `-d', `-s' +o The redirection code handles several filenames specially: /dev/fd/N, + /dev/stdin, /dev/stdout, /dev/stderr +o The redirection code now recognizes /dev/tcp/HOST/PORT and + /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively, + to the specified port on the specified host +o The ${!prefix*} expansion has been implemented +o A new FUNCNAME variable, which expands to the name of a currently-executing + function +o The GROUPS variable is no longer readonly +o A new shopt `xpg_echo' variable, to control the behavior of echo with + respect to backslash-escape sequences at runtime +o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned + +The version of Readline released with Bash-2.04, Readline-4.1, had several +new features as well: + +o Parentheses matching is always compiled into readline, and controllable + with the new `blink-matching-paren' variable +o The history-search-forward and history-search-backward functions now leave + point at the end of the line when the search string is empty, like + reverse-search-history, and forward-search-history +o A new function for applications: rl_on_new_line_with_prompt() +o New variables for applications: rl_already_prompted, and rl_gnu_readline_p + + +Bash-2.03 had very few new features, in keeping with the convention +that odd-numbered releases provide mainly bug fixes. A number of new +features were added to Readline, mostly at the request of the Cygnus +folks. + +A new shopt option, `restricted_shell', so that startup files can test + whether or not the shell was started in restricted mode +Filename generation is now performed on the words between ( and ) in + compound array assignments (this is really a bug fix) +OLDPWD is now auto-exported, as POSIX.2 requires +ENV and BASH_ENV are read-only variables in a restricted shell +Bash may now be linked against an already-installed Readline library, + as long as the Readline library is version 4 or newer +All shells begun with the `--login' option will source the login shell + startup files, even if the shell is not interactive + +There were lots of changes to the version of the Readline library released +along with Bash-2.03. For a complete list of the changes, read the file +CHANGES in the Bash-2.03 distribution. + +Bash-2.02 contained the following new features: + +a new version of malloc (based on the old GNU malloc code in previous + bash versions) that is more page-oriented, more conservative + with memory usage, does not `orphan' large blocks when they + are freed, is usable on 64-bit machines, and has allocation + checking turned on unconditionally +POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.) +POSIX.2-style globbing equivalence classes +POSIX.2-style globbing collating symbols +the ksh [[...]] extended conditional command +the ksh egrep-style extended pattern matching operators +a new `printf' builtin +the ksh-like $(<filename) command substitution, which is equivalent to + $(cat filename) +new tilde prefixes that expand to directories from the directory stack +new `**' arithmetic operator to do exponentiation +case-insensitive globbing (filename expansion) +menu completion a la tcsh +`magic-space' history expansion function like tcsh +the readline inputrc `language' has a new file inclusion directive ($include) + +Bash-2.01 contained only a few new features: + +new `GROUPS' builtin array variable containing the user's group list +new bindable readline commands: history-and-alias-expand-line and + alias-expand-line + +Bash-2.0 contained extensive changes and new features from bash-1.14.7. +Here's a short list: + +new `time' reserved word to time pipelines, shell builtins, and + shell functions +one-dimensional arrays with a new compound assignment statement, + appropriate expansion constructs and modifications to some + of the builtins (read, declare, etc.) to use them +new quoting syntaxes for ANSI-C string expansion and locale-specific + string translation +new expansions to do substring extraction, pattern replacement, and + indirect variable expansion +new builtins: `disown' and `shopt' +new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE, + MACHTYPE, BASH_VERSINFO +special handling of many unused or redundant variables removed + (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec) +dynamic loading of new builtin commands; many loadable examples provided +new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V +history and aliases available in shell scripts +new readline variables: enable-keypad, mark-directories, input-meta, + visible-stats, disable-completion, comment-begin +new readline commands to manipulate the mark and operate on the region +new readline emacs mode commands and bindings for ksh-88 compatibility +updated and extended builtins +new DEBUG trap +expanded (and now documented) restricted shell mode + +implementation stuff: +autoconf-based configuration +nearly all of the bugs reported since version 1.14 have been fixed +most builtins converted to use builtin `getopt' for consistency +most builtins use -p option to display output in a reusable form + (for consistency) +grammar tighter and smaller (66 reduce-reduce conflicts gone) +lots of code now smaller and faster +test suite greatly expanded + +B2) Are there any user-visible incompatibilities between bash-2.05b and + bash-1.14.7? + +There are a few incompatibilities between version 1.14.7 and version 2.05b. +They are detailed in the file COMPAT in the bash distribution. That file +is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org +if if you find something that's not mentioned there. + +Section C: Differences from other Unix shells + +C1) How does bash differ from sh, the Bourne shell? + +This is a non-comprehensive list of features that differentiate bash +from the SVR4.2 shell. The bash manual page explains these more +completely. + +Things bash has that sh does not: + long invocation options + [+-]O invocation option + -l invocation option + `!' reserved word to invert pipeline return value + `time' reserved word to time pipelines and shell builtins + the `function' reserved word + the `select' compound command and reserved word + arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done + new $'...' and $"..." quoting + the $(...) form of command substitution + the $(<filename) form of command substitution, equivalent to + $(cat filename) + the ${#param} parameter value length operator + the ${!param} indirect parameter expansion operator + the ${!param*} prefix expansion operator + the ${param:offset[:length]} parameter substring operator + the ${param/pat[/string]} parameter pattern substitution operator + expansions to perform substring removal (${p%[%]w}, ${p#[#]w}) + expansion of positional parameters beyond $9 with ${num} + variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY, + TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS, + LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME, + ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE, + HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS, + PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC, + SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars, + auto_resume + DEBUG trap + ERR trap + variable arrays with new compound assignment syntax + redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word- + prompt string special char translation and variable expansion + auto-export of variables in initial environment + command search finds functions before builtins + bash return builtin will exit a file sourced with `.' + builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t. + export -n/-f/-p/name=value, pwd -L/-P, + read -e/-p/-a/-t/-n/-d/-s/-u, + readonly -a/-f/name=value, trap -l, set +o, + set -b/-m/-o option/-h/-p/-B/-C/-H/-P, + unset -f/-v, ulimit -m/-p/-u, + type -a/-p/-t/-f/-P, suspend -f, kill -n, + test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S + bash reads ~/.bashrc for interactive shells, $ENV for non-interactive + bash restricted shell mode is more extensive + bash allows functions and variables with the same name + brace expansion + tilde expansion + arithmetic expansion with $((...)) and `let' builtin + the `[[...]]' extended conditional command + process substitution + aliases and alias/unalias builtins + local variables in functions and `local' builtin + readline and command-line editing with programmable completion + command history and history/fc builtins + csh-like history expansion + other new bash builtins: bind, command, compgen, complete, builtin, + declare/typeset, dirs, enable, fc, help, + history, logout, popd, pushd, disown, shopt, + printf + exported functions + filename generation when using output redirection (command >a*) + POSIX.2-style globbing character classes + POSIX.2-style globbing equivalence classes + POSIX.2-style globbing collating symbols + egrep-like extended pattern matching operators + case-insensitive pattern matching and globbing + variable assignments preceding commands affect only that command, + even for builtins and functions + posix mode + redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr, + /dev/tcp/host/port, /dev/udp/host/port + +Things sh has that bash does not: + uses variable SHACCT to do shell accounting + includes `stop' builtin (bash can use alias stop='kill -s STOP') + `newgrp' builtin + turns on job control if called as `jsh' + $TIMEOUT (like bash $TMOUT) + `^' is a synonym for `|' + new SVR4.2 sh builtins: mldmode, priv + +Implementation differences: + redirection to/from compound commands causes sh to create a subshell + bash does not allow unbalanced quotes; sh silently inserts them at EOF + bash does not mess with signal 11 + sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100 + bash splits only the results of expansions on IFS, using POSIX.2 + field splitting rules; sh splits all words on IFS + sh does not allow MAILCHECK to be unset (?) + sh does not allow traps on SIGALRM or SIGCHLD + bash allows multiple option arguments when invoked (e.g. -x -v); + sh allows only a single option argument (`sh -x -v' attempts + to open a file named `-v', and, on SunOS 4.1.4, dumps core. + On Solaris 2.4 and earlier versions, sh goes into an infinite + loop.) + sh exits a script if any builtin fails; bash exits only if one of + the POSIX.2 `special' builtins fails + +C2) How does bash differ from the Korn shell, version ksh88? + +Things bash has or uses that ksh88 does not: + long invocation options + [-+]O invocation option + -l invocation option + `!' reserved word + arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done + arithmetic in largest machine-supported size (intmax_t) + posix mode and posix conformance + command hashing + tilde expansion for assignment statements that look like $PATH + process substitution with named pipes if /dev/fd is not available + the ${!param} indirect parameter expansion operator + the ${!param*} prefix expansion operator + the ${param:offset[:length]} parameter substring operator + the ${param/pat[/string]} parameter pattern substitution operator + variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL, + TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, + HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND, + IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK, + PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE, + GROUPS, FUNCNAME, histchars, auto_resume + prompt expansion with backslash escapes and command substitution + redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word- + more extensive and extensible editing and programmable completion + builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable, + exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history, + jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd, + read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p, + set -o braceexpand/-o histexpand/-o interactive-comments/ + -o notify/-o physical/-o posix/-o hashall/-o onecmd/ + -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type, + typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt, + disown, printf, complete, compgen + `!' csh-style history expansion + POSIX.2-style globbing character classes + POSIX.2-style globbing equivalence classes + POSIX.2-style globbing collating symbols + egrep-like extended pattern matching operators + case-insensitive pattern matching and globbing + `**' arithmetic operator to do exponentiation + redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr + arrays of unlimited size + TMOUT is default timeout for `read' and `select' + +Things ksh88 has or uses that bash does not: + tracked aliases (alias -t) + variables: ERRNO, FPATH, EDITOR, VISUAL + co-processes (|&, >&p, <&p) + weirdly-scoped functions + typeset +f to list all function names without definitions + text of command history kept in a file, not memory + builtins: alias -x, cd old new, fc -e -, newgrp, print, + read -p/-s/var?prompt, set -A/-o gmacs/ + -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s, + typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence + using environment to pass attributes of exported variables + arithmetic evaluation done on arguments to some builtins + reads .profile from $PWD when invoked as login shell + +Implementation differences: + ksh runs last command of a pipeline in parent shell context + bash has brace expansion by default (ksh88 compile-time option) + bash has fixed startup file for all interactive shells; ksh reads $ENV + bash has exported functions + bash command search finds functions before builtins + bash waits for all commands in pipeline to exit before returning status + emacs-mode editing has some slightly different key bindings + +C3) Which new features in ksh-93 are not in bash, and which are? + +New things in ksh-93 not in bash-2.05b: + associative arrays + floating point arithmetic and variables + math library functions + ${!name[sub]} name of subscript for associative array + `.' is allowed in variable names to create a hierarchical namespace + more extensive compound assignment syntax + discipline functions + `sleep' and `getconf' builtins (bash has loadable versions) + typeset -n and `nameref' variables + KEYBD trap + variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version, + .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT + backreferences in pattern matching (\N) + `&' operator in pattern lists for matching + print -f (bash uses printf) + `fc' has been renamed to `hist' + `.' can execute shell functions + exit statuses between 0 and 255 + set -o pipefail + `+=' variable assignment operator + FPATH and PATH mixing + getopts -a + -I invocation option + DEBUG trap now executed before each simple command, instead of after + printf %H, %P, %T, %Z modifiers, output base for %d + lexical scoping for local variables in `ksh' functions + no scoping for local variables in `POSIX' functions + +New things in ksh-93 present in bash-2.05b: + [n]<&word- and [n]>&word- redirections (combination dup and close) + for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command + ?:, ++, --, `expr1 , expr2' arithmetic operators + expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]}, + ${!param*} + compound array assignment + the `!' reserved word + loadable builtins -- but ksh uses `builtin' while bash uses `enable' + `command', `builtin', `disown' builtins + new $'...' and $"..." quoting + FIGNORE (but bash uses GLOBIGNORE), HISTCMD + set -o notify/-C + changes to kill builtin + read -A (bash uses read -a) + read -t/-d + trap -p + exec -c/-a + `.' restores the positional parameters when it completes + POSIX.2 `test' + umask -S + unalias -a + command and arithmetic substitution performed on PS1, PS4, and ENV + command name completion + ENV processed only for interactive shells + +Section D: Why does bash do some things differently than other Unix shells? + +D1) Why does bash run a different version of `command' than + `which command' says it will? + +On many systems, `which' is actually a csh script that assumes +you're running csh. In tcsh, `which' and its cousin `where' +are builtins. On other Unix systems, `which' is a perl script +that uses the PATH environment variable. + +The csh script version reads the csh startup files from your +home directory and uses those to determine which `command' will +be invoked. Since bash doesn't use any of those startup files, +there's a good chance that your bash environment differs from +your csh environment. The bash `type' builtin does everything +`which' does, and will report correct results for the running +shell. If you're really wedded to the name `which', try adding +the following function definition to your .bashrc: + + which() + { + builtin type "$@" + } + +If you're moving from tcsh and would like to bring `where' along +as well, use this function: + + where() + { + builtin type -a "$@" + } + +D2) Why doesn't bash treat brace expansions exactly like csh? + +The only difference between bash and csh brace expansion is that +bash requires a brace expression to contain at least one unquoted +comma if it is to be expanded. Any brace-surrounded word not +containing an unquoted comma is left unchanged by the brace +expansion code. This affords the greatest degree of sh +compatibility. + +Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. + +D3) Why doesn't bash have csh variable modifiers? + +Posix has specified a more powerful, albeit somewhat more cryptic, +mechanism cribbed from ksh, and bash implements it. + +${parameter%word} + Remove smallest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the suffix matched by the pattern deleted. + + x=file.c + echo ${x%.c}.o + -->file.o + +${parameter%%word} + + Remove largest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the suffix matched by the pattern deleted. + + x=posix/src/std + echo ${x%%/*} + -->posix + +${parameter#word} + Remove smallest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the prefix matched by the pattern deleted. + + x=$HOME/src/cmd + echo ${x#$HOME} + -->/src/cmd + +${parameter##word} + Remove largest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the prefix matched by the pattern deleted. + + x=/one/two/three + echo ${x##*/} + -->three + + +Given + a=/a/b/c/d + b=b.xxx + + csh bash result + --- ---- ------ + $a:h ${a%/*} /a/b/c + $a:t ${a##*/} d + $b:r ${b%.*} b + $b:e ${b##*.} xxx + + +D4) How can I make my csh aliases work when I convert to bash? + +Bash uses a different syntax to support aliases than csh does. +The details can be found in the documentation. We have provided +a shell script which does most of the work of conversion for you; +this script can be found in ./examples/misc/aliasconv.sh. Here is +how you use it: + +Start csh in the normal way for you. (e.g., `csh') + +Pipe the output of `alias' through `aliasconv.sh', saving the +results into `bash_aliases': + + alias | bash aliasconv.sh >bash_aliases + +Edit `bash_aliases', carefully reading through any created +functions. You will need to change the names of some csh specific +variables to the bash equivalents. The script converts $cwd to +$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt +to $PS1. You may also have to add quotes to avoid unwanted +expansion. + +For example, the csh alias: + + alias cd 'cd \!*; echo $cwd' + +is converted to the bash function: + + cd () { command cd "$@"; echo $PWD ; } + +The only thing that needs to be done is to quote $PWD: + + cd () { command cd "$@"; echo "$PWD" ; } + +Merge the edited file into your ~/.bashrc. + +There is an additional, more ambitious, script in +examples/misc/cshtobash that attempts to convert your entire csh +environment to its bash equivalent. This script can be run as +simply `cshtobash' to convert your normal interactive +environment, or as `cshtobash ~/.login' to convert your login +environment. + +D5) How can I pipe standard output and standard error from one command to + another, like csh does with `|&'? + +Use + command 2>&1 | command2 + +The key is to remember that piping is performed before redirection, so +file descriptor 1 points to the pipe when it is duplicated onto file +descriptor 2. + +D6) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? + +There are features in ksh-88 and ksh-93 that do not have direct bash +equivalents. Most, however, can be emulated with very little trouble. + +ksh-88 feature Bash equivalent +-------------- --------------- +compiled-in aliases set up aliases in .bashrc; some ksh aliases are + bash builtins (hash, history, type) +coprocesses named pipe pairs (one for read, one for write) +typeset +f declare -F +cd, print, whence function substitutes in examples/functions/kshenv +autoloaded functions examples/functions/autoload is the same as typeset -fu +read var?prompt read -p prompt var + +ksh-93 feature Bash equivalent +-------------- --------------- +sleep, getconf Bash has loadable versions in examples/loadables +${.sh.version} $BASH_VERSION +print -f printf +hist alias hist=fc +$HISTEDIT $FCEDIT + +Section E: How can I get bash to do certain things, and why does bash do + things the way it does? + +E1) Why is the bash builtin `test' slightly different from /bin/test? + +The specific example used here is [ ! x -o x ], which is false. + +Bash's builtin `test' implements the Posix.2 spec, which can be +summarized as follows (the wording is due to David Korn): + +Here is the set of rules for processing test arguments. + + 0 Args: False + 1 Arg: True iff argument is not null. + 2 Args: If first arg is !, True iff second argument is null. + If first argument is unary, then true if unary test is true + Otherwise error. + 3 Args: If second argument is a binary operator, do binary test of $1 $3 + If first argument is !, negate two argument test of $2 $3 + If first argument is `(' and third argument is `)', do the + one-argument test of the second argument. + Otherwise error. + 4 Args: If first argument is !, negate three argument test of $2 $3 $4. + Otherwise unspecified + 5 or more Args: unspecified. (Historical shells would use their + current algorithm). + +The operators -a and -o are considered binary operators for the purpose +of the 3 Arg case. + +As you can see, the test becomes (not (x or x)), which is false. + +E2) Why does bash sometimes say `Broken pipe'? + +If a sequence of commands appears in a pipeline, and one of the +reading commands finishes before the writer has finished, the +writer receives a SIGPIPE signal. Many other shells special-case +SIGPIPE as an exit status in the pipeline and do not report it. +For example, in: + + ps -aux | head + +`head' can finish before `ps' writes all of its output, and ps +will try to write on a pipe without a reader. In that case, bash +will print `Broken pipe' to stderr when ps is killed by a +SIGPIPE. + +You can build a version of bash that will not report SIGPIPE errors +by uncommenting the definition of DONT_REPORT_SIGPIPE in the file +config-top.h. + +E3) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? + +Readline, the line editing library that bash uses, does not know +that the terminal escape sequences do not take up space on the +screen. The redisplay code assumes, unless told otherwise, that +each character in the prompt is a `printable' character that +takes up one character position on the screen. + +You can use the bash prompt expansion facility (see the PROMPTING +section in the manual page) to tell readline that sequences of +characters in the prompt strings take up no screen space. + +Use the \[ escape to begin a sequence of non-printing characters, +and the \] escape to signal the end of such a sequence. + +E4) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? + +This has to do with the parent-child relationship between Unix +processes. It affects all commands run in pipelines, not just +simple calls to `read'. For example, piping a command's output +into a `while' loop that repeatedly calls `read' will result in +the same behavior. + +Each element of a pipeline runs in a separate process, a child of +the shell running the pipeline. A subprocess cannot affect its +parent's environment. When the `read' command sets the variable +to the input, that variable is set only in the subshell, not the +parent shell. When the subshell exits, the value of the variable +is lost. + +Many pipelines that end with `read variable' can be converted +into command substitutions, which will capture the output of +a specified command. The output can then be assigned to a +variable: + + grep ^gnu /usr/lib/news/active | wc -l | read ngroup + +can be converted into + + ngroup=$(grep ^gnu /usr/lib/news/active | wc -l) + +This does not, unfortunately, work to split the text among +multiple variables, as read does when given multiple variable +arguments. If you need to do this, you can either use the +command substitution above to read the output into a variable +and chop up the variable using the bash pattern removal +expansion operators or use some variant of the following +approach. + +Say /usr/local/bin/ipaddr is the following shell script: + +#! /bin/sh +host `hostname` | awk '/address/ {print $NF}' + +Instead of using + + /usr/local/bin/ipaddr | read A B C D + +to break the local machine's IP address into separate octets, use + + OIFS="$IFS" + IFS=. + set -- $(/usr/local/bin/ipaddr) + IFS="$OIFS" + A="$1" B="$2" C="$3" D="$4" + +Beware, however, that this will change the shell's positional +parameters. If you need them, you should save them before doing +this. + +This is the general approach -- in most cases you will not need to +set $IFS to a different value. + +Some other user-supplied alternatives include: + +read A B C D << HERE + $(IFS=.; echo $(/usr/local/bin/ipaddr)) +HERE + +and, where process substitution is available, + +read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr)) + +E5) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? + +This is the behavior of echo on most Unix System V machines. + +The bash builtin `echo' is modeled after the 9th Edition +Research Unix version of `echo'. It does not interpret +backslash-escaped characters in its argument strings by default; +it requires the use of the -e option to enable the +interpretation. The System V echo provides no way to disable the +special characters; the bash echo has a -E option to disable +them. + +There is a configuration option that will make bash behave like +the System V echo and interpret things like `\t' by default. Run +configure with the --enable-xpg-echo-default option to turn this +on. Be aware that this will cause some of the tests run when you +type `make tests' to fail. + +There is a shell option, `xpg_echo', settable with `shopt', that will +change the behavior of echo at runtime. Enabling this option turns +on expansion of backslash-escape sequences. + +E6) Why doesn't a while or for loop get suspended when I type ^Z? + +This is a consequence of how job control works on Unix. The only +thing that can be suspended is the process group. This is a single +command or pipeline of commands that the shell forks and executes. + +When you run a while or for loop, the only thing that the shell forks +and executes are any commands in the while loop test and commands in +the loop bodies. These, therefore, are the only things that can be +suspended when you type ^Z. + +If you want to be able to stop the entire loop, you need to put it +within parentheses, which will force the loop into a subshell that +may be stopped (and subsequently restarted) as a single unit. + +E7) What about empty for loops in Makefiles? + +It's fairly common to see constructs like this in automatically-generated +Makefiles: + +SUBDIRS = @SUBDIRS@ + + ... + +subdirs-clean: + for d in ${SUBDIRS}; do \ + ( cd $$d && ${MAKE} ${MFLAGS} clean ) \ + done + +When SUBDIRS is empty, this results in a command like this being passed to +bash: + + for d in ; do + ( cd $d && ${MAKE} ${MFLAGS} clean ) + done + +In versions of bash before bash-2.05a, this was a syntax error. If the +reserved word `in' was present, a word must follow it before the semicolon +or newline. The language in the manual page referring to the list of words +being empty referred to the list after it is expanded. These versions of +bash required that there be at least one word following the `in' when the +construct was parsed. + +The idiomatic Makefile solution is something like: + +SUBDIRS = @SUBDIRS@ + +subdirs-clean: + subdirs=$SUBDIRS ; for d in $$subdirs; do \ + ( cd $$d && ${MAKE} ${MFLAGS} clean ) \ + done + +The latest drafts of the updated POSIX standard have changed this: the +word list is no longer required. Bash versions 2.05a and later accept +the new syntax. + +E8) Why does the arithmetic evaluation code complain about `08'? + +The bash arithmetic evaluation code (used for `let', $(()), (()), and in +other places), interprets a leading `0' in numeric constants as denoting +an octal number, and a leading `0x' as denoting hexadecimal. This is +in accordance with the POSIX.2 spec, section 2.9.2.1, which states that +arithmetic constants should be handled as signed long integers as defined +by the ANSI/ISO C standard. + +The POSIX.2 interpretation committee has confirmed this: + +http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html + +E9) Why does the pattern matching expression [A-Z]* match files beginning + with every letter except `z'? + +Bash-2.03, Bash-2.05 and later versions honor the current locale setting +when processing ranges within pattern matching bracket expressions ([A-Z]). +This is what POSIX.2 and SUSv3/XPG6 specify. + +The behavior of the matcher in bash-2.05 and later versions depends on the +current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will +result in the traditional behavior ([A-Z] matches all uppercase ASCII +characters). Many other locales, including the en_US locale (the default +on many US versions of Linux) collate the upper and lower case letters like +this: + + AaBb...Zz + +which means that [A-Z] matches every letter except `z'. Others collate like + + aAbBcC...zZ + +which means that [A-Z] matches every letter except `a'. + +The portable way to specify upper case letters is [:upper:] instead of +A-Z; lower case may be specified as [:lower:] instead of a-z. + +Look at the manual pages for setlocale(3), strcoll(3), and, if it is +present, locale(1). If you have locale(1), you can use it to find +your current locale information even if you do not have any of the +LC_ variables set. + +My advice is to put + + export LC_COLLATE=C + +into /etc/profile and inspect any shell scripts run from cron for +constructs like [A-Z]. This will prevent things like + + rm [A-Z]* + +from removing every file in the current directory except those beginning +with `z' and still allow individual users to change the collation order. +Users may put the above command into their own profiles as well, of course. + +E10) Why does `cd //' leave $PWD as `//'? + +POSIX.2, in its description of `cd', says that *three* or more leading +slashes may be replaced with a single slash when canonicalizing the +current working directory. + +This is, I presume, for historical compatibility. Certain versions of +Unix, and early network file systems, used paths of the form +//hostname/path to access `path' on server `hostname'. + +E11) If I resize my xterm while another program is running, why doesn't bash + notice the change? + +This is another issue that deals with job control. + +The kernel maintains a notion of a current terminal process group. Members +of this process group (processes whose process group ID is equal to the +current terminal process group ID) receive terminal-generated signals like +SIGWINCH. (For more details, see the JOB CONTROL section of the bash +man page.) + +If a terminal is resized, the kernel sends SIGWINCH to each member of +the terminal's current process group (the `foreground' process group). + +When bash is running with job control enabled, each pipeline (which may be +a single command) is run in its own process group, different from bash's +process group. This foreground process group receives the SIGWINCH; bash +does not. Bash has no way of knowing that the terminal has been resized. + +There is a `checkwinsize' option, settable with the `shopt' builtin, that +will cause bash to check the window size and adjust its idea of the +terminal's dimensions each time a process stops or exits and returns control +of the terminal to bash. Enable it with `shopt -s checkwinsize'. + +E12) Why don't negative offsets in substring expansion work like I expect? + +When substring expansion of the form ${param:offset[:length} is used, +an `offset' that evaluates to a number less than zero counts back from +the end of the expanded value of $param. + +When a negative `offset' begins with a minus sign, however, unexpected things +can happen. Consider + + a=12345678 + echo ${a:-4} + +intending to print the last four characters of $a. The problem is that +${param:-word} already has a well-defined meaning: expand to word if the +expanded value of param is unset or null, and $param otherwise. + +To use negative offsets that begin with a minus sign, separate the +minus sign and the colon with a space. + +Section F: Things to watch out for on certain Unix versions + +F1) Why can't I use command line editing in my `cmdtool'? + +The problem is `cmdtool' and bash fighting over the input. When +scrolling is enabled in a cmdtool window, cmdtool puts the tty in +`raw mode' to permit command-line editing using the mouse for +applications that cannot do it themselves. As a result, bash and +cmdtool each try to read keyboard input immediately, with neither +getting enough of it to be useful. + +This mode also causes cmdtool to not implement many of the +terminal functions and control sequences appearing in the +`sun-cmd' termcap entry. For a more complete explanation, see +that file examples/suncmd.termcap in the bash distribution. + +`xterm' is a better choice, and gets along with bash much more +smoothly. + +If you must use cmdtool, you can use the termcap description in +examples/suncmd.termcap. Set the TERMCAP variable to the terminal +description contained in that file, i.e. + +TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:' + +Then export TERMCAP and start a new cmdtool window from that shell. +The bash command-line editing should behave better in the new +cmdtool. If this works, you can put the assignment to TERMCAP +in your bashrc file. + +F2) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? + +This is the consequence of building bash on SunOS 5 and linking +with the libraries in /usr/ucblib, but using the definitions +and structures from files in /usr/include. + +The actual conflict is between the dirent structure in +/usr/include/dirent.h and the struct returned by the version of +`readdir' in libucb.a (a 4.3-BSD style `struct direct'). + +Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH +when configuring and building bash. This will ensure that you +use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you +link with libc before libucb. + +If you have installed the Sun C compiler, you may also need to +put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before +/usr/ucb. + +F3) Why does bash dump core after I interrupt username completion or + `~user' tilde expansion on a machine running NIS? + +This is a famous and long-standing bug in the SunOS YP (sorry, NIS) +client library, which is part of libc. + +The YP library code keeps static state -- a pointer into the data +returned from the server. When YP initializes itself (setpwent), +it looks at this pointer and calls free on it if it's non-null. +So far, so good. + +If one of the YP functions is interrupted during getpwent (the +exact function is interpretwithsave()), and returns NULL, the +pointer is freed without being reset to NULL, and the function +returns. The next time getpwent is called, it sees that this +pointer is non-null, calls free, and the bash free() blows up +because it's being asked to free freed memory. + +The traditional Unix mallocs allow memory to be freed multiple +times; that's probably why this has never been fixed. You can +run configure with the `--without-gnu-malloc' option to use +the C library malloc and avoid the problem. + +F4) I'm running SVR4.2. Why is the line erased every time I type `@'? + +The `@' character is the default `line kill' character in most +versions of System V, including SVR4.2. You can change this +character to whatever you want using `stty'. For example, to +change the line kill character to control-u, type + + stty kill ^U + +where the `^' and `U' can be two separate characters. + +F5) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? + +The actual command in question is something like + + < file ( command ) + +According to the grammar given in the POSIX.2 standard, this construct +is, in fact, a syntax error. Redirections may only precede `simple +commands'. A subshell construct such as the above is one of the shell's +`compound commands'. A redirection may only follow a compound command. + +This affects the mechanical transformation of commands that use `cat' +to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on +comp.unix.shell). While most commands of the form + + cat file | command + +can be converted to `< file command', shell control structures such as +loops and subshells require `command < file'. + +The file CWRU/sh-redir-hack in the bash-2.05a distribution is an +(unofficial) patch to parse.y that will modify the grammar to +support this construct. It will not apply with `patch'; you must +modify parse.y by hand. Note that if you apply this, you must +recompile with -DREDIRECTION_HACK. This introduces a large +number of reduce/reduce conflicts into the shell grammar. + +F6) Why can't I use vi-mode editing on Red Hat Linux 6.1? + +The short answer is that Red Hat screwed up. + +The long answer is that they shipped an /etc/inputrc that only works +for emacs mode editing, and then screwed all the vi users by setting +INPUTRC to /etc/inputrc in /etc/profile. + +The short fix is to do one of the following: remove or rename +/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile, +but make sure you export it if you do), remove the assignment to +INPUTRC from /etc/profile, add + + set keymap emacs + +to the beginning of /etc/inputrc, or bracket the key bindings in +/etc/inputrc with these lines + + $if mode=emacs + [...] + $endif + +F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on + HP/UX 11.x? + +HP/UX's support for long double is imperfect at best. + +GCC will support it without problems, but the HP C library functions +like strtold(3) and printf(3) don't actually work with long doubles. +HP implemented a `long_double' type as a 4-element array of 32-bit +ints, and that is what the library functions use. The ANSI C +`long double' type is a 128-bit floating point scalar. + +The easiest fix, until HP fixes things up, is to edit the generated +config.h and #undef the HAVE_LONG_DOUBLE line. After doing that, +the compilation should complete successfully. + +Section G: How can I get bash to do certain common things? + +G1) How can I get bash to read and display eight-bit characters? + +This is a process requiring several steps. + +First, you must ensure that the `physical' data path is a full eight +bits. For xterms, for example, the `vt100' resources `eightBitInput' +and `eightBitOutput' should be set to `true'. + +Once you have set up an eight-bit path, you must tell the kernel and +tty driver to leave the eighth bit of characters alone when processing +keyboard input. Use `stty' to do this: + + stty cs8 -istrip -parenb + +For old BSD-style systems, you can use + + stty pass8 + +You may also need + + stty even odd + +Finally, you need to tell readline that you will be inputting and +displaying eight-bit characters. You use readline variables to do +this. These variables can be set in your .inputrc or using the bash +`bind' builtin. Here's an example using `bind': + + bash$ bind 'set convert-meta off' + bash$ bind 'set meta-flag on' + bash$ bind 'set output-meta on' + +The `set' commands between the single quotes may also be placed +in ~/.inputrc. + +G2) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? + +This is why the `command' and `builtin' builtins exist. The +`command' builtin executes the command supplied as its first +argument, skipping over any function defined with that name. The +`builtin' builtin executes the builtin command given as its first +argument directly. + +For example, to write a function to replace `cd' that writes the +hostname and current directory to an xterm title bar, use +something like the following: + + cd() + { + builtin cd "$@" && xtitle "$HOST: $PWD" + } + +This could also be written using `command' instead of `builtin'; +the version above is marginally more efficient. + +G3) How can I find the value of a shell variable whose name is the value + of another shell variable? + +Versions of Bash newer than Bash-2.0 support this directly. You can use + + ${!var} + +For example, the following sequence of commands will echo `z': + + var1=var2 + var2=z + echo ${!var1} + +For sh compatibility, use the `eval' builtin. The important +thing to remember is that `eval' expands the arguments you give +it again, so you need to quote the parts of the arguments that +you want `eval' to act on. + +For example, this expression prints the value of the last positional +parameter: + + eval echo \"\$\{$#\}\" + +The expansion of the quoted portions of this expression will be +deferred until `eval' runs, while the `$#' will be expanded +before `eval' is executed. In versions of bash later than bash-2.0, + + echo ${!#} + +does the same thing. + +This is not the same thing as ksh93 `nameref' variables, though the syntax +is similar. I may add namerefs in a future bash version. + +G4) How can I make the bash `time' reserved word print timing output that + looks like the output from my system's /usr/bin/time? + +The bash command timing code looks for a variable `TIMEFORMAT' and +uses its value as a format string to decide how to display the +timing statistics. + +The value of TIMEFORMAT is a string with `%' escapes expanded in a +fashion similar in spirit to printf(3). The manual page explains +the meanings of the escape sequences in the format string. + +If TIMEFORMAT is not set, bash acts as if the following assignment had +been performed: + + TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' + +The POSIX.2 default time format (used by `time -p command') is + + TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S' + +The BSD /usr/bin/time format can be emulated with: + + TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys' + +The System V /usr/bin/time format can be emulated with: + + TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S' + +The ksh format can be emulated with: + + TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS' + +G5) How do I get the current directory into my prompt? + +Bash provides a number of backslash-escape sequences which are expanded +when the prompt string (PS1 or PS2) is displayed. The full list is in +the manual page. + +The \w expansion gives the full pathname of the current directory, with +a tilde (`~') substituted for the current value of $HOME. The \W +expansion gives the basename of the current directory. To put the full +pathname of the current directory into the path without any tilde +subsitution, use $PWD. Here are some examples: + + PS1='\w$ ' # current directory with tilde + PS1='\W$ ' # basename of current directory + PS1='$PWD$ ' # full pathname of current directory + +The single quotes are important in the final example to prevent $PWD from +being expanded when the assignment to PS1 is performed. + +G6) How can I rename "*.foo" to "*.bar"? + +Use the pattern removal functionality described in D3. The following `for' +loop will do the trick: + + for f in *.foo; do + mv $f ${f%foo}bar + done + +G7) How can I translate a filename from uppercase to lowercase? + +The script examples/functions/lowercase, originally written by John DuBois, +will do the trick. The converse is left as an exercise. + +G8) How can I write a filename expansion (globbing) pattern that will match + all files in the current directory except "." and ".."? + +You must have set the `extglob' shell option using `shopt -s extglob' to use +this: + + echo .!(.|) * + +A solution that works without extended globbing is given in the Unix Shell +FAQ, posted periodically to comp.unix.shell. + +Section H: Where do I go from here? + +H1) How do I report bugs in bash, and where should I look for fixes and + advice? + +Use the `bashbug' script to report bugs. It is built and +installed at the same time as bash. It provides a standard +template for reporting a problem and automatically includes +information about your configuration and build environment. + +`bashbug' sends its reports to bug-bash@gnu.org, which +is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. + +Bug fixes, answers to questions, and announcements of new releases +are all posted to gnu.bash.bug. Discussions concerning bash features +and problems also take place there. + +To reach the bash maintainers directly, send mail to +bash-maintainers@gnu.org. + +H2) What kind of bash documentation is there? + +First, look in the doc directory in the bash distribution. It should +contain at least the following files: + +bash.1 an extensive, thorough Unix-style manual page +builtins.1 a manual page covering just bash builtin commands +bashref.texi a reference manual in GNU tex`info format +bashref.info an info version of the reference manual +FAQ this file +article.ms text of an article written for The Linux Journal +readline.3 a man page describing readline + +Postscript, HTML, and ASCII files created from the above source are +available in the documentation distribution. + +There is additional documentation available for anonymous FTP from host +ftp.cwru.edu in the `pub/bash' directory. + +Cameron Newham and Bill Rosenblatt have written a book on bash, published +by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn +Shell book. The title is ``Learning the Bash Shell'', and the ISBN number +is 1-56592-147-X. Look for it in fine bookstores near you. This book +covers bash-1.14, but has an appendix describing some of the new features +in bash-2.0. + +A second edition of this book is available, published in January, 1998. +The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores +or on the web. + +The GNU Bash Reference Manual has been published as a printed book by +Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers +bash-2.0 and is available from most online bookstores (see +http://www.network-theory.co.uk/bash/manual/ for details). The publisher +will donate $1 to the Free Software Foundation for each copy sold. + +H3) What's coming in future versions? + +These are features I hope to include in a future version of bash. + +a better bash debugger (a minimally-tested version is included with bash-2.05b) +associative arrays +co-processes, but with a new-style syntax that looks like function declaration + +H4) What's on the bash `wish list' for future versions? + +These are features that may or may not appear in a future version of bash. + +breaking some of the shell functionality into embeddable libraries +a module system like zsh's, using dynamic loading like builtins +better internationalization using GNU `gettext' +date-stamped command history +a bash programmer's guide with a chapter on creating loadable builtins +a better loadable interface to perl with access to the shell builtins and + variables (contributions gratefully accepted) +ksh93-like `nameref' variables +ksh93-like `+=' variable assignment operator +ksh93-like `xx.yy' variables (including some of the .sh.* variables) and + associated disipline functions +Some of the new ksh93 pattern matching operators, like backreferencing + +H5) When will the next release appear? + +The next version will appear sometime in 2003. Never make predictions. + + +This document is Copyright 1995-2003 by Chester Ramey. + +Permission is hereby granted, without written agreement and +without license or royalty fees, to use, copy, and distribute +this document for any purpose, provided that the above copyright +notice appears in all copies of this document and that the +contents of this document remain unaltered. diff --git a/doc/FAQ.orig b/doc/FAQ.orig new file mode 100644 index 00000000..1cff3c8e --- /dev/null +++ b/doc/FAQ.orig @@ -0,0 +1,1745 @@ +This is the Bash FAQ, version 3.24, for Bash version 2.05b. + +This document contains a set of frequently-asked questions concerning +Bash, the GNU Bourne-Again Shell. Bash is a freely-available command +interpreter with advanced features for both interactive use and shell +programming. + +Another good source of basic information about shells is the collection +of FAQ articles periodically posted to comp.unix.shell. + +Questions and comments concerning this document should be sent to +chet@po.cwru.edu. + +This document is available for anonymous FTP with the URL + +ftp://ftp.cwru.edu/pub/bash/FAQ + +The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html + +---------- +Contents: + +Section A: The Basics + +A1) What is it? +A2) What's the latest version? +A3) Where can I get it? +A4) On what machines will bash run? +A5) Will bash run on operating systems other than Unix? +A6) How can I build bash with gcc? +A7) How can I make bash my login shell? +A8) I just changed my login shell to bash, and now I can't FTP into my + machine. Why not? +A9) What's the `POSIX 1003.2 standard'? +A10) What is the bash `posix mode'? + +Section B: The latest version + +B1) What's new in version 2.05b? +B2) Are there any user-visible incompatibilities between bash-2.05b and + bash-1.14.7? + +Section C: Differences from other Unix shells + +C1) How does bash differ from sh, the Bourne shell? +C2) How does bash differ from the Korn shell, version ksh88? +C3) Which new features in ksh-93 are not in bash, and which are? + +Section D: Why does bash do some things differently than other Unix shells? + +D1) Why does bash run a different version of `command' than + `which command' says it will? +D2) Why doesn't bash treat brace expansions exactly like csh? +D3) Why doesn't bash have csh variable modifiers? +D4) How can I make my csh aliases work when I convert to bash? +D5) How can I pipe standard output and standard error from one command to + another, like csh does with `|&'? +D6) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? + +Section E: Why does bash do certain things the way it does? + +E1) Why is the bash builtin `test' slightly different from /bin/test? +E2) Why does bash sometimes say `Broken pipe'? +E3) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? +E4) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? +E5) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? +E6) Why doesn't a while or for loop get suspended when I type ^Z? +E7) What about empty for loops in Makefiles? +E8) Why does the arithmetic evaluation code complain about `08'? +E9) Why does the pattern matching expression [A-Z]* match files beginning + with every letter except `z'? +E10) Why does `cd //' leave $PWD as `//'? +E11) If I resize my xterm while another program is running, why doesn't bash + notice the change? + +Section F: Things to watch out for on certain Unix versions + +F1) Why can't I use command line editing in my `cmdtool'? +F2) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? +F3) Why does bash dump core after I interrupt username completion or + `~user' tilde expansion on a machine running NIS? +F4) I'm running SVR4.2. Why is the line erased every time I type `@'? +F5) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? +F6) Why can't I use vi-mode editing on Red Hat Linux 6.1? +F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on + HP/UX 11.x? + +Section G: How can I get bash to do certain common things? + +G1) How can I get bash to read and display eight-bit characters? +G2) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? +G3) How can I find the value of a shell variable whose name is the value + of another shell variable? +G4) How can I make the bash `time' reserved word print timing output that + looks like the output from my system's /usr/bin/time? +G5) How do I get the current directory into my prompt? +G6) How can I rename "*.foo" to "*.bar"? +G7) How can I translate a filename from uppercase to lowercase? +G8) How can I write a filename expansion (globbing) pattern that will match + all files in the current directory except "." and ".."? + +Section H: Where do I go from here? + +H1) How do I report bugs in bash, and where should I look for fixes and + advice? +H2) What kind of bash documentation is there? +H3) What's coming in future versions? +H4) What's on the bash `wish list'? +H5) When will the next release appear? + +---------- +Section A: The Basics + +A1) What is it? + +Bash is a Unix command interpreter (shell). It is an implementation of +the Posix 1003.2 shell standard, and resembles the Korn and System V +shells. + +Bash contains a number of enhancements over those shells, both +for interactive use and shell programming. Features geared +toward interactive use include command line editing, command +history, job control, aliases, and prompt expansion. Programming +features include additional variable expansions, shell +arithmetic, and a number of variables and options to control +shell behavior. + +Bash was originally written by Brian Fox of the Free Software +Foundation. The current developer and maintainer is Chet Ramey +of Case Western Reserve University. + +A2) What's the latest version? + +The latest version is 2.05b, first made available on Wednesday, 17 +July, 2002. + +A3) Where can I get it? + +Bash is the GNU project's shell, and so is available from the +master GNU archive site, ftp.gnu.org, and its mirrors. The +latest version is also available for FTP from ftp.cwru.edu. +The following URLs tell how to get version 2.05b: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz + +Formatted versions of the documentation are available with the URLs: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz + +A4) On what machines will bash run? + +Bash has been ported to nearly every version of UNIX. All you +should have to do to build it on a machine for which a port +exists is to type `configure' and then `make'. The build process +will attempt to discover the version of UNIX you have and tailor +itself accordingly, using a script created by GNU autoconf. + +More information appears in the file `INSTALL' in the distribution. + +The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html) +explains how to obtain binary versions of bash for most of the major +commercial Unix systems. + +A5) Will bash run on operating systems other than Unix? + +Configuration specifics for Unix-like systems such as QNX and +LynxOS are included in the distribution. Bash-2.05 and later +versions should compile and run on Minix 2.0 (patches were +contributed), but I don't believe anyone has built bash-2.x on +earlier Minix versions yet. + +Bash has been ported to versions of Windows implementing the Win32 +programming interface. This includes Windows 95 and Windows NT. +The port was done by Cygnus Solutions as part of their CYGWIN +project. For more information about the project, look at the URLs + +http://www.cygwin.com/ +http://sourceware.cygnus.com/cygwin + +Cygnus originally ported bash-1.14.7, and that port was part of their +early GNU-Win32 (the original name) releases. Cygnus has also done a +port of bash-2.05 to the CYGWIN environment, and it is available as +part of their current release. + +Bash-2.05b should require no local Cygnus changes to build and run under +CYGWIN. + +The Cygnus port works only on Intel machines. There is a port of bash +(I don't know which version) to the alpha/NT environment available from + +ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz + +DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part +of the DJGPP project. For more information on the project, see + +http://www.delorie.com/djgpp/ + +I have been told that the original DJGPP port was done by Daisuke Aoyama. + +Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04 +is available for DJGPP V2. The files are available as: + +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source + +Mark has begun to work with bash-2.05, but I don't know the status. + +Ports of bash-1.12 and bash-2.0 are available for OS/2 from + +ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip +ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip + +I haven't looked at either, but the second appears to be a binary-only +distribution. Beware. + +I have received word that Bash (I'm not sure which version, but I +believe that it's at least bash-2.02.1) is the standard shell on +BeOS. + +A6) How can I build bash with gcc? + +Bash configures to use gcc by default if it is available. Read the +file INSTALL in the distribution for more information. + +A7) How can I make bash my login shell? + +Some machines let you use `chsh' to change your login shell. Other +systems use `passwd -s' or `passwd -e'. If one of these works for +you, that's all you need. Note that many systems require the full +pathname to a shell to appear in /etc/shells before you can make it +your login shell. For this, you may need the assistance of your +friendly local system administrator. + +If you cannot do this, you can still use bash as your login shell, but +you need to perform some tricks. The basic idea is to add a command +to your login shell's startup file to replace your login shell with +bash. + +For example, if your login shell is csh or tcsh, and you have installed +bash in /usr/gnu/bin/bash, add the following line to ~/.login: + + if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login + +(the `--login' tells bash that it is a login shell). + +It's not a good idea to put this command into ~/.cshrc, because every +csh you run without the `-f' option, even ones started to run csh scripts, +reads that file. If you must put the command in ~/.cshrc, use something +like + + if ( $?prompt ) exec /usr/gnu/bin/bash --login + +to ensure that bash is exec'd only when the csh is interactive. + +If your login shell is sh or ksh, you have to do two things. + +First, create an empty file in your home directory named `.bash_profile'. +The existence of this file will prevent the exec'd bash from trying to +read ~/.profile, and re-execing itself over and over again. ~/.bash_profile +is the first file bash tries to read initialization commands from when +it is invoked as a login shell. + +Next, add a line similar to the above to ~/.profile: + + [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \ + exec /usr/gnu/bin/bash --login + +This will cause login shells to replace themselves with bash running as +a login shell. Once you have this working, you can copy your initialization +code from ~/.profile to ~/.bash_profile. + +I have received word that the recipe supplied above is insufficient for +machines running CDE. CDE has a maze of twisty little startup files, all +slightly different. + +If you cannot change your login shell in the password file to bash, you +will have to (apparently) live with CDE using the shell in the password +file to run its startup scripts. If you have changed your shell to bash, +there is code in the CDE startup files (on Solaris, at least) that attempts +to do the right thing. It is, however, often broken, and may require that +you use the $BASH_ENV trick described below. + +`dtterm' claims to use $SHELL as the default program to start, so if you +can change $SHELL in the CDE startup files, you should be able to use bash +in your terminal windows. + +Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program +to read your login shell's startup files. You may be able to use bash for +the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as +well, but I have not tried this. + +You can use the above `exec' recipe to start bash when not logging in with +CDE by testing the value of the DT variable: + + if [ -n "$DT" ]; then + [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login + fi + +If CDE starts its shells non-interactively during login, the login shell +startup files (~/.profile, ~/.bash_profile) will not be sourced at login. +To get around this problem, append a line similar to the following to your +~/.dtprofile: + + BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV + +and add the following line to the beginning of ~/.bash_profile: + + unset BASH_ENV + +A8) I just changed my login shell to bash, and now I can't FTP into my + machine. Why not? + +You must add the full pathname to bash to the file /etc/shells. As +noted in the answer to the previous question, many systems require +this before you can make bash your login shell. + +Most versions of ftpd use this file to prohibit `special' users +such as `uucp' and `news' from using FTP. + +A9) What's the `POSIX 1003.2 standard'? + +POSIX is a name originally coined by Richard Stallman for a +family of open system standards based on UNIX. There are a +number of aspects of UNIX under consideration for +standardization, from the basic system services at the system +call and C library level to applications and tools to system +administration and management. Each area of standardization is +assigned to a working group in the 1003 series. + +The POSIX Shell and Utilities standard has been developed by IEEE +Working Group 1003.2 (POSIX.2). It concentrates on the command +interpreter interface and utility programs commonly executed from +the command line or by other programs. An initial version of the +standard has been approved and published by the IEEE, and work is +currently underway to update it. + +Bash is concerned with the aspects of the shell's behavior +defined by POSIX.2. The shell command language has of course +been standardized, including the basic flow control and program +execution constructs, I/O redirection and pipelining, argument +handling, variable expansion, and quoting. + +The `special' builtins, which must be implemented as part of the +shell to provide the desired functionality, are specified as +being part of the shell; examples of these are `eval' and +`export'. Other utilities appear in the sections of POSIX.2 not +devoted to the shell which are commonly (and in some cases must +be) implemented as builtin commands, such as `read' and `test'. +POSIX.2 also specifies aspects of the shell's interactive +behavior as part of the UPE, including job control and command +line editing. Only vi-style line editing commands have been +standardized; emacs editing commands were left out due to +objections. + +The Open Group has made an older version of its Single Unix +Specification (version 2), which is very similar to POSIX.2, +available on the web at + +http://www.opengroup.org/onlinepubs/007908799/ + +The Single Unix Specification, version 3, is available on the web at + +http://www.opengroup.org/onlinepubs/007904975/ + +A10) What is the bash `posix mode'? + +Although bash is an implementation of the POSIX.2 shell +specification, there are areas where the bash default behavior +differs from that spec. The bash `posix mode' changes the bash +behavior in these areas so that it obeys the spec more closely. + +Posix mode is entered by starting bash with the --posix or +'-o posix' option or executing `set -o posix' after bash is running. + +The specific aspects of bash which change when posix mode is +active are listed in the file POSIX in the bash distribution. +They are also listed in a section in the Bash Reference Manual +(from which that file is generated). + +Section B: The latest version + +B1) What's new in version 2.05b? + +The raison d'etre for bash-2.05b is to make a second intermediate +release containing the first of the new features to be available +in bash-3.0 and get feedback on those features before proceeding. +The major new feature is multibyte character support in both Bash +and Readline. + +Bash-2.05b contains the following new features (see the manual page for +complete descriptions and the CHANGES and NEWS files in the bash-2.05b +distribution): + +o support for multibyte characters has been added to both bash and readline + +o the DEBUG trap is now run *before* simple commands, ((...)) commands, + [[...]] conditional commands, and for ((...)) loops + +o the shell now performs arithmetic in the largest integer size the machine + supports (intmax_t) + +o there is a new \D{...} prompt expansion; passes the `...' to strftime(3) + and inserts the result into the expanded prompt + +o there is a new `here-string' redirection operator: <<< word + +o when displaying variables, function attributes and definitions are shown + separately, allowing them to be re-used as input (attempting to re-use + the old output would result in syntax errors). + +o `read' has a new `-u fd' option to read from a specified file descriptor + +o the bash debugger in examples/bashdb has been modified to work with the + new DEBUG trap semantics, the command set has been made more gdb-like, + and the changes to $LINENO make debugging functions work better + +o the expansion of $LINENO inside a shell function is only relative to the + function start if the shell is interactive -- if the shell is running a + script, $LINENO expands to the line number in the script. This is as + POSIX-2001 requires + + +A short feature history dating from Bash-2.0: + +Bash-2.05a introduced the following new features: + +o The `printf' builtin has undergone major work + +o There is a new read-only `shopt' option: login_shell, which is set by + login shells and unset otherwise + +o New `\A' prompt string escape sequence; expanding to time in 24-hour + HH:MM format + +o New `-A group/-g' option to complete and compgen; goes group name + completion + +o New [+-]O invocation option to set and unset `shopt' options at startup + +o ksh-like `ERR' trap + +o `for' loops now allow empty word lists after the `in' reserved word + +o new `hard' and `soft' arguments for the `ulimit' builtin + +o Readline can be configured to place the user at the same point on the line + when retrieving commands from the history list + +o Readline can be configured to skip `hidden' files (filenames with a leading + `.' on Unix) when performing completion + +Bash-2.05 introduced the following new features: + +o This version has once again reverted to using locales and strcoll(3) when + processing pattern matching bracket expressions, as POSIX requires. +o Added a new `--init-file' invocation argument as a synonym for `--rcfile', + per the new GNU coding standards. +o The /dev/tcp and /dev/udp redirections now accept service names as well as + port numbers. +o `complete' and `compgen' now take a `-o value' option, which controls some + of the aspects of that compspec. Valid values are: + + default - perform bash default completion if programmable + completion produces no matches + dirnames - perform directory name completion if programmable + completion produces no matches + filenames - tell readline that the compspec produces filenames, + so it can do things like append slashes to + directory names and suppress trailing spaces +o A new loadable builtin, realpath, which canonicalizes and expands symlinks + in pathname arguments. +o When `set' is called without options, it prints function defintions in a + way that allows them to be reused as input. This affects `declare' and + `declare -p' as well. This only happens when the shell is not in POSIX + mode, since POSIX.2 forbids this behavior. + +Bash-2.04 introduced the following new features: + +o Programmable word completion with the new `complete' and `compgen' builtins; + examples are provided in examples/complete/complete-examples +o `history' has a new `-d' option to delete a history entry +o `bind' has a new `-x' option to bind key sequences to shell commands +o The prompt expansion code has new `\j' and `\l' escape sequences +o The `no_empty_cmd_completion' shell option, if enabled, inhibits + command completion when TAB is typed on an empty line +o `help' has a new `-s' option to print a usage synopsis +o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma) +o New ksh93-style arithmetic for command: + for ((expr1 ; expr2; expr3 )); do list; done +o `read' has new options: `-t', `-n', `-d', `-s' +o The redirection code handles several filenames specially: /dev/fd/N, + /dev/stdin, /dev/stdout, /dev/stderr +o The redirection code now recognizes /dev/tcp/HOST/PORT and + /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively, + to the specified port on the specified host +o The ${!prefix*} expansion has been implemented +o A new FUNCNAME variable, which expands to the name of a currently-executing + function +o The GROUPS variable is no longer readonly +o A new shopt `xpg_echo' variable, to control the behavior of echo with + respect to backslash-escape sequences at runtime +o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned + +The version of Readline released with Bash-2.04, Readline-4.1, had several +new features as well: + +o Parentheses matching is always compiled into readline, and controllable + with the new `blink-matching-paren' variable +o The history-search-forward and history-search-backward functions now leave + point at the end of the line when the search string is empty, like + reverse-search-history, and forward-search-history +o A new function for applications: rl_on_new_line_with_prompt() +o New variables for applications: rl_already_prompted, and rl_gnu_readline_p + + +Bash-2.03 had very few new features, in keeping with the convention +that odd-numbered releases provide mainly bug fixes. A number of new +features were added to Readline, mostly at the request of the Cygnus +folks. + +A new shopt option, `restricted_shell', so that startup files can test + whether or not the shell was started in restricted mode +Filename generation is now performed on the words between ( and ) in + compound array assignments (this is really a bug fix) +OLDPWD is now auto-exported, as POSIX.2 requires +ENV and BASH_ENV are read-only variables in a restricted shell +Bash may now be linked against an already-installed Readline library, + as long as the Readline library is version 4 or newer +All shells begun with the `--login' option will source the login shell + startup files, even if the shell is not interactive + +There were lots of changes to the version of the Readline library released +along with Bash-2.03. For a complete list of the changes, read the file +CHANGES in the Bash-2.03 distribution. + +Bash-2.02 contained the following new features: + +a new version of malloc (based on the old GNU malloc code in previous + bash versions) that is more page-oriented, more conservative + with memory usage, does not `orphan' large blocks when they + are freed, is usable on 64-bit machines, and has allocation + checking turned on unconditionally +POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.) +POSIX.2-style globbing equivalence classes +POSIX.2-style globbing collating symbols +the ksh [[...]] extended conditional command +the ksh egrep-style extended pattern matching operators +a new `printf' builtin +the ksh-like $(<filename) command substitution, which is equivalent to + $(cat filename) +new tilde prefixes that expand to directories from the directory stack +new `**' arithmetic operator to do exponentiation +case-insensitive globbing (filename expansion) +menu completion a la tcsh +`magic-space' history expansion function like tcsh +the readline inputrc `language' has a new file inclusion directive ($include) + +Bash-2.01 contained only a few new features: + +new `GROUPS' builtin array variable containing the user's group list +new bindable readline commands: history-and-alias-expand-line and + alias-expand-line + +Bash-2.0 contained extensive changes and new features from bash-1.14.7. +Here's a short list: + +new `time' reserved word to time pipelines, shell builtins, and + shell functions +one-dimensional arrays with a new compound assignment statement, + appropriate expansion constructs and modifications to some + of the builtins (read, declare, etc.) to use them +new quoting syntaxes for ANSI-C string expansion and locale-specific + string translation +new expansions to do substring extraction, pattern replacement, and + indirect variable expansion +new builtins: `disown' and `shopt' +new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE, + MACHTYPE, BASH_VERSINFO +special handling of many unused or redundant variables removed + (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec) +dynamic loading of new builtin commands; many loadable examples provided +new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V +history and aliases available in shell scripts +new readline variables: enable-keypad, mark-directories, input-meta, + visible-stats, disable-completion, comment-begin +new readline commands to manipulate the mark and operate on the region +new readline emacs mode commands and bindings for ksh-88 compatibility +updated and extended builtins +new DEBUG trap +expanded (and now documented) restricted shell mode + +implementation stuff: +autoconf-based configuration +nearly all of the bugs reported since version 1.14 have been fixed +most builtins converted to use builtin `getopt' for consistency +most builtins use -p option to display output in a reusable form + (for consistency) +grammar tighter and smaller (66 reduce-reduce conflicts gone) +lots of code now smaller and faster +test suite greatly expanded + +B2) Are there any user-visible incompatibilities between bash-2.05b and + bash-1.14.7? + +There are a few incompatibilities between version 1.14.7 and version 2.05b. +They are detailed in the file COMPAT in the bash distribution. That file +is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org +if if you find something that's not mentioned there. + +Section C: Differences from other Unix shells + +C1) How does bash differ from sh, the Bourne shell? + +This is a non-comprehensive list of features that differentiate bash +from the SVR4.2 shell. The bash manual page explains these more +completely. + +Things bash has that sh does not: + long invocation options + [+-]O invocation option + -l invocation option + `!' reserved word to invert pipeline return value + `time' reserved word to time pipelines and shell builtins + the `function' reserved word + the `select' compound command and reserved word + arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done + new $'...' and $"..." quoting + the $(...) form of command substitution + the $(<filename) form of command substitution, equivalent to + $(cat filename) + the ${#param} parameter value length operator + the ${!param} indirect parameter expansion operator + the ${!param*} prefix expansion operator + the ${param:offset[:length]} parameter substring operator + the ${param/pat[/string]} parameter pattern substitution operator + expansions to perform substring removal (${p%[%]w}, ${p#[#]w}) + expansion of positional parameters beyond $9 with ${num} + variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY, + TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS, + LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME, + ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE, + HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS, + PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC, + SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars, + auto_resume + DEBUG trap + ERR trap + variable arrays with new compound assignment syntax + redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word- + prompt string special char translation and variable expansion + auto-export of variables in initial environment + command search finds functions before builtins + bash return builtin will exit a file sourced with `.' + builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t. + export -n/-f/-p/name=value, pwd -L/-P, + read -e/-p/-a/-t/-n/-d/-s/-u, + readonly -a/-f/name=value, trap -l, set +o, + set -b/-m/-o option/-h/-p/-B/-C/-H/-P, + unset -f/-v, ulimit -m/-p/-u, + type -a/-p/-t/-f/-P, suspend -f, kill -n, + test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S + bash reads ~/.bashrc for interactive shells, $ENV for non-interactive + bash restricted shell mode is more extensive + bash allows functions and variables with the same name + brace expansion + tilde expansion + arithmetic expansion with $((...)) and `let' builtin + the `[[...]]' extended conditional command + process substitution + aliases and alias/unalias builtins + local variables in functions and `local' builtin + readline and command-line editing with programmable completion + command history and history/fc builtins + csh-like history expansion + other new bash builtins: bind, command, compgen, complete, builtin, + declare/typeset, dirs, enable, fc, help, + history, logout, popd, pushd, disown, shopt, + printf + exported functions + filename generation when using output redirection (command >a*) + POSIX.2-style globbing character classes + POSIX.2-style globbing equivalence classes + POSIX.2-style globbing collating symbols + egrep-like extended pattern matching operators + case-insensitive pattern matching and globbing + variable assignments preceding commands affect only that command, + even for builtins and functions + posix mode + redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr, + /dev/tcp/host/port, /dev/udp/host/port + +Things sh has that bash does not: + uses variable SHACCT to do shell accounting + includes `stop' builtin (bash can use alias stop='kill -s STOP') + `newgrp' builtin + turns on job control if called as `jsh' + $TIMEOUT (like bash $TMOUT) + `^' is a synonym for `|' + new SVR4.2 sh builtins: mldmode, priv + +Implementation differences: + redirection to/from compound commands causes sh to create a subshell + bash does not allow unbalanced quotes; sh silently inserts them at EOF + bash does not mess with signal 11 + sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100 + bash splits only the results of expansions on IFS, using POSIX.2 + field splitting rules; sh splits all words on IFS + sh does not allow MAILCHECK to be unset (?) + sh does not allow traps on SIGALRM or SIGCHLD + bash allows multiple option arguments when invoked (e.g. -x -v); + sh allows only a single option argument (`sh -x -v' attempts + to open a file named `-v', and, on SunOS 4.1.4, dumps core. + On Solaris 2.4 and earlier versions, sh goes into an infinite + loop.) + sh exits a script if any builtin fails; bash exits only if one of + the POSIX.2 `special' builtins fails + +C2) How does bash differ from the Korn shell, version ksh88? + +Things bash has or uses that ksh88 does not: + long invocation options + [-+]O invocation option + -l invocation option + `!' reserved word + arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done + arithmetic in largest machine-supported size (intmax_t) + posix mode and posix conformance + command hashing + tilde expansion for assignment statements that look like $PATH + process substitution with named pipes if /dev/fd is not available + the ${!param} indirect parameter expansion operator + the ${!param*} prefix expansion operator + the ${param:offset[:length]} parameter substring operator + the ${param/pat[/string]} parameter pattern substitution operator + variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL, + TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, + HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND, + IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK, + PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE, + GROUPS, FUNCNAME, histchars, auto_resume + prompt expansion with backslash escapes and command substitution + redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word- + more extensive and extensible editing and programmable completion + builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable, + exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history, + jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd, + read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p, + set -o braceexpand/-o histexpand/-o interactive-comments/ + -o notify/-o physical/-o posix/-o hashall/-o onecmd/ + -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type, + typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt, + disown, printf, complete, compgen + `!' csh-style history expansion + POSIX.2-style globbing character classes + POSIX.2-style globbing equivalence classes + POSIX.2-style globbing collating symbols + egrep-like extended pattern matching operators + case-insensitive pattern matching and globbing + `**' arithmetic operator to do exponentiation + redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr + arrays of unlimited size + TMOUT is default timeout for `read' and `select' + +Things ksh88 has or uses that bash does not: + tracked aliases (alias -t) + variables: ERRNO, FPATH, EDITOR, VISUAL + co-processes (|&, >&p, <&p) + weirdly-scoped functions + typeset +f to list all function names without definitions + text of command history kept in a file, not memory + builtins: alias -x, cd old new, fc -e -, newgrp, print, + read -p/-s/var?prompt, set -A/-o gmacs/ + -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s, + typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence + using environment to pass attributes of exported variables + arithmetic evaluation done on arguments to some builtins + reads .profile from $PWD when invoked as login shell + +Implementation differences: + ksh runs last command of a pipeline in parent shell context + bash has brace expansion by default (ksh88 compile-time option) + bash has fixed startup file for all interactive shells; ksh reads $ENV + bash has exported functions + bash command search finds functions before builtins + bash waits for all commands in pipeline to exit before returning status + emacs-mode editing has some slightly different key bindings + +C3) Which new features in ksh-93 are not in bash, and which are? + +New things in ksh-93 not in bash-2.05b: + associative arrays + floating point arithmetic and variables + math library functions + ${!name[sub]} name of subscript for associative array + `.' is allowed in variable names to create a hierarchical namespace + more extensive compound assignment syntax + discipline functions + `sleep' and `getconf' builtins (bash has loadable versions) + typeset -n and `nameref' variables + KEYBD trap + variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version, + .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT + backreferences in pattern matching (\N) + `&' operator in pattern lists for matching + print -f (bash uses printf) + `fc' has been renamed to `hist' + `.' can execute shell functions + exit statuses between 0 and 255 + set -o pipefail + `+=' variable assignment operator + FPATH and PATH mixing + getopts -a + -I invocation option + DEBUG trap now executed before each simple command, instead of after + printf %H, %P, %T, %Z modifiers, output base for %d + lexical scoping for local variables in `ksh' functions + no scoping for local variables in `POSIX' functions + +New things in ksh-93 present in bash-2.05b: + [n]<&word- and [n]>&word- redirections (combination dup and close) + for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command + ?:, ++, --, `expr1 , expr2' arithmetic operators + expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]}, + ${!param*} + compound array assignment + the `!' reserved word + loadable builtins -- but ksh uses `builtin' while bash uses `enable' + `command', `builtin', `disown' builtins + new $'...' and $"..." quoting + FIGNORE (but bash uses GLOBIGNORE), HISTCMD + set -o notify/-C + changes to kill builtin + read -A (bash uses read -a) + read -t/-d + trap -p + exec -c/-a + `.' restores the positional parameters when it completes + POSIX.2 `test' + umask -S + unalias -a + command and arithmetic substitution performed on PS1, PS4, and ENV + command name completion + ENV processed only for interactive shells + +Section D: Why does bash do some things differently than other Unix shells? + +D1) Why does bash run a different version of `command' than + `which command' says it will? + +On many systems, `which' is actually a csh script that assumes +you're running csh. In tcsh, `which' and its cousin `where' +are builtins. On other Unix systems, `which' is a perl script +that uses the PATH environment variable. + +The csh script version reads the csh startup files from your +home directory and uses those to determine which `command' will +be invoked. Since bash doesn't use any of those startup files, +there's a good chance that your bash environment differs from +your csh environment. The bash `type' builtin does everything +`which' does, and will report correct results for the running +shell. If you're really wedded to the name `which', try adding +the following function definition to your .bashrc: + + which() + { + builtin type "$@" + } + +If you're moving from tcsh and would like to bring `where' along +as well, use this function: + + where() + { + builtin type -a "$@" + } + +D2) Why doesn't bash treat brace expansions exactly like csh? + +The only difference between bash and csh brace expansion is that +bash requires a brace expression to contain at least one unquoted +comma if it is to be expanded. Any brace-surrounded word not +containing an unquoted comma is left unchanged by the brace +expansion code. This affords the greatest degree of sh +compatibility. + +Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. + +D3) Why doesn't bash have csh variable modifiers? + +Posix has specified a more powerful, albeit somewhat more cryptic, +mechanism cribbed from ksh, and bash implements it. + +${parameter%word} + Remove smallest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the suffix matched by the pattern deleted. + + x=file.c + echo ${x%.c}.o + -->file.o + +${parameter%%word} + + Remove largest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the suffix matched by the pattern deleted. + + x=posix/src/std + echo ${x%%/*} + -->posix + +${parameter#word} + Remove smallest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the prefix matched by the pattern deleted. + + x=$HOME/src/cmd + echo ${x#$HOME} + -->/src/cmd + +${parameter##word} + Remove largest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the prefix matched by the pattern deleted. + + x=/one/two/three + echo ${x##*/} + -->three + + +Given + a=/a/b/c/d + b=b.xxx + + csh bash result + --- ---- ------ + $a:h ${a%/*} /a/b/c + $a:t ${a##*/} d + $b:r ${b%.*} b + $b:e ${b##*.} xxx + + +D4) How can I make my csh aliases work when I convert to bash? + +Bash uses a different syntax to support aliases than csh does. +The details can be found in the documentation. We have provided +a shell script which does most of the work of conversion for you; +this script can be found in ./examples/misc/aliasconv.sh. Here is +how you use it: + +Start csh in the normal way for you. (e.g., `csh') + +Pipe the output of `alias' through `aliasconv.sh', saving the +results into `bash_aliases': + + alias | bash aliasconv.sh >bash_aliases + +Edit `bash_aliases', carefully reading through any created +functions. You will need to change the names of some csh specific +variables to the bash equivalents. The script converts $cwd to +$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt +to $PS1. You may also have to add quotes to avoid unwanted +expansion. + +For example, the csh alias: + + alias cd 'cd \!*; echo $cwd' + +is converted to the bash function: + + cd () { command cd "$@"; echo $PWD ; } + +The only thing that needs to be done is to quote $PWD: + + cd () { command cd "$@"; echo "$PWD" ; } + +Merge the edited file into your ~/.bashrc. + +There is an additional, more ambitious, script in +examples/misc/cshtobash that attempts to convert your entire csh +environment to its bash equivalent. This script can be run as +simply `cshtobash' to convert your normal interactive +environment, or as `cshtobash ~/.login' to convert your login +environment. + +D5) How can I pipe standard output and standard error from one command to + another, like csh does with `|&'? + +Use + command 2>&1 | command2 + +The key is to remember that piping is performed before redirection, so +file descriptor 1 points to the pipe when it is duplicated onto file +descriptor 2. + +D6) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? + +There are features in ksh-88 and ksh-93 that do not have direct bash +equivalents. Most, however, can be emulated with very little trouble. + +ksh-88 feature Bash equivalent +-------------- --------------- +compiled-in aliases set up aliases in .bashrc; some ksh aliases are + bash builtins (hash, history, type) +coprocesses named pipe pairs (one for read, one for write) +typeset +f declare -F +cd, print, whence function substitutes in examples/functions/kshenv +autoloaded functions examples/functions/autoload is the same as typeset -fu +read var?prompt read -p prompt var + +ksh-93 feature Bash equivalent +-------------- --------------- +sleep, getconf Bash has loadable versions in examples/loadables +${.sh.version} $BASH_VERSION +print -f printf +hist alias hist=fc +$HISTEDIT $FCEDIT + +Section E: How can I get bash to do certain things, and why does bash do + things the way it does? + +E1) Why is the bash builtin `test' slightly different from /bin/test? + +The specific example used here is [ ! x -o x ], which is false. + +Bash's builtin `test' implements the Posix.2 spec, which can be +summarized as follows (the wording is due to David Korn): + +Here is the set of rules for processing test arguments. + + 0 Args: False + 1 Arg: True iff argument is not null. + 2 Args: If first arg is !, True iff second argument is null. + If first argument is unary, then true if unary test is true + Otherwise error. + 3 Args: If second argument is a binary operator, do binary test of $1 $3 + If first argument is !, negate two argument test of $2 $3 + If first argument is `(' and third argument is `)', do the + one-argument test of the second argument. + Otherwise error. + 4 Args: If first argument is !, negate three argument test of $2 $3 $4. + Otherwise unspecified + 5 or more Args: unspecified. (Historical shells would use their + current algorithm). + +The operators -a and -o are considered binary operators for the purpose +of the 3 Arg case. + +As you can see, the test becomes (not (x or x)), which is false. + +E2) Why does bash sometimes say `Broken pipe'? + +If a sequence of commands appears in a pipeline, and one of the +reading commands finishes before the writer has finished, the +writer receives a SIGPIPE signal. Many other shells special-case +SIGPIPE as an exit status in the pipeline and do not report it. +For example, in: + + ps -aux | head + +`head' can finish before `ps' writes all of its output, and ps +will try to write on a pipe without a reader. In that case, bash +will print `Broken pipe' to stderr when ps is killed by a +SIGPIPE. + +You can build a version of bash that will not report SIGPIPE errors +by uncommenting the definition of DONT_REPORT_SIGPIPE in the file +config-top.h. + +E3) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? + +Readline, the line editing library that bash uses, does not know +that the terminal escape sequences do not take up space on the +screen. The redisplay code assumes, unless told otherwise, that +each character in the prompt is a `printable' character that +takes up one character position on the screen. + +You can use the bash prompt expansion facility (see the PROMPTING +section in the manual page) to tell readline that sequences of +characters in the prompt strings take up no screen space. + +Use the \[ escape to begin a sequence of non-printing characters, +and the \] escape to signal the end of such a sequence. + +E4) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? + +This has to do with the parent-child relationship between Unix +processes. It affects all commands run in pipelines, not just +simple calls to `read'. For example, piping a command's output +into a `while' loop that repeatedly calls `read' will result in +the same behavior. + +Each element of a pipeline runs in a separate process, a child of +the shell running the pipeline. A subprocess cannot affect its +parent's environment. When the `read' command sets the variable +to the input, that variable is set only in the subshell, not the +parent shell. When the subshell exits, the value of the variable +is lost. + +Many pipelines that end with `read variable' can be converted +into command substitutions, which will capture the output of +a specified command. The output can then be assigned to a +variable: + + grep ^gnu /usr/lib/news/active | wc -l | read ngroup + +can be converted into + + ngroup=$(grep ^gnu /usr/lib/news/active | wc -l) + +This does not, unfortunately, work to split the text among +multiple variables, as read does when given multiple variable +arguments. If you need to do this, you can either use the +command substitution above to read the output into a variable +and chop up the variable using the bash pattern removal +expansion operators or use some variant of the following +approach. + +Say /usr/local/bin/ipaddr is the following shell script: + +#! /bin/sh +host `hostname` | awk '/address/ {print $NF}' + +Instead of using + + /usr/local/bin/ipaddr | read A B C D + +to break the local machine's IP address into separate octets, use + + OIFS="$IFS" + IFS=. + set -- $(/usr/local/bin/ipaddr) + IFS="$OIFS" + A="$1" B="$2" C="$3" D="$4" + +Beware, however, that this will change the shell's positional +parameters. If you need them, you should save them before doing +this. + +This is the general approach -- in most cases you will not need to +set $IFS to a different value. + +Some other user-supplied alternatives include: + +read A B C D << HERE + $(IFS=.; echo $(/usr/local/bin/ipaddr)) +HERE + +and, where process substitution is available, + +read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr)) + +E5) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? + +This is the behavior of echo on most Unix System V machines. + +The bash builtin `echo' is modeled after the 9th Edition +Research Unix version of `echo'. It does not interpret +backslash-escaped characters in its argument strings by default; +it requires the use of the -e option to enable the +interpretation. The System V echo provides no way to disable the +special characters; the bash echo has a -E option to disable +them. + +There is a configuration option that will make bash behave like +the System V echo and interpret things like `\t' by default. Run +configure with the --enable-xpg-echo-default option to turn this +on. Be aware that this will cause some of the tests run when you +type `make tests' to fail. + +There is a shell option, `xpg_echo', settable with `shopt', that will +change the behavior of echo at runtime. Enabling this option turns +on expansion of backslash-escape sequences. + +E6) Why doesn't a while or for loop get suspended when I type ^Z? + +This is a consequence of how job control works on Unix. The only +thing that can be suspended is the process group. This is a single +command or pipeline of commands that the shell forks and executes. + +When you run a while or for loop, the only thing that the shell forks +and executes are any commands in the while loop test and commands in +the loop bodies. These, therefore, are the only things that can be +suspended when you type ^Z. + +If you want to be able to stop the entire loop, you need to put it +within parentheses, which will force the loop into a subshell that +may be stopped (and subsequently restarted) as a single unit. + +E7) What about empty for loops in Makefiles? + +It's fairly common to see constructs like this in automatically-generated +Makefiles: + +SUBDIRS = @SUBDIRS@ + + ... + +subdirs-clean: + for d in ${SUBDIRS}; do \ + ( cd $$d && ${MAKE} ${MFLAGS} clean ) \ + done + +When SUBDIRS is empty, this results in a command like this being passed to +bash: + + for d in ; do + ( cd $d && ${MAKE} ${MFLAGS} clean ) + done + +In versions of bash before bash-2.05a, this was a syntax error. If the +reserved word `in' was present, a word must follow it before the semicolon +or newline. The language in the manual page referring to the list of words +being empty referred to the list after it is expanded. These versions of +bash required that there be at least one word following the `in' when the +construct was parsed. + +The idiomatic Makefile solution is something like: + +SUBDIRS = @SUBDIRS@ + +subdirs-clean: + subdirs=$SUBDIRS ; for d in $$subdirs; do \ + ( cd $$d && ${MAKE} ${MFLAGS} clean ) \ + done + +The latest drafts of the updated POSIX standard have changed this: the +word list is no longer required. Bash versions 2.05a and later accept +the new syntax. + +E8) Why does the arithmetic evaluation code complain about `08'? + +The bash arithmetic evaluation code (used for `let', $(()), (()), and in +other places), interprets a leading `0' in numeric constants as denoting +an octal number, and a leading `0x' as denoting hexadecimal. This is +in accordance with the POSIX.2 spec, section 2.9.2.1, which states that +arithmetic constants should be handled as signed long integers as defined +by the ANSI/ISO C standard. + +The POSIX.2 interpretation committee has confirmed this: + +http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html + +E9) Why does the pattern matching expression [A-Z]* match files beginning + with every letter except `z'? + +Bash-2.03, Bash-2.05 and later versions honor the current locale setting +when processing ranges within pattern matching bracket expressions ([A-Z]). +This is what POSIX.2 and SUSv3/XPG6 specify. + +The behavior of the matcher in bash-2.05 and later versions depends on the +current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will +result in the traditional behavior ([A-Z] matches all uppercase ASCII +characters). Many other locales, including the en_US locale (the default +on many US versions of Linux) collate the upper and lower case letters like +this: + + AaBb...Zz + +which means that [A-Z] matches every letter except `z'. Others collate like + + aAbBcC...zZ + +which means that [A-Z] matches every letter except `a'. + +The portable way to specify upper case letters is [:upper:] instead of +A-Z; lower case may be specified as [:lower:] instead of a-z. + +Look at the manual pages for setlocale(3), strcoll(3), and, if it is +present, locale(1). If you have locale(1), you can use it to find +your current locale information even if you do not have any of the +LC_ variables set. + +My advice is to put + + export LC_COLLATE=C + +into /etc/profile and inspect any shell scripts run from cron for +constructs like [A-Z]. This will prevent things like + + rm [A-Z]* + +from removing every file in the current directory except those beginning +with `z' and still allow individual users to change the collation order. +Users may put the above command into their own profiles as well, of course. + +E10) Why does `cd //' leave $PWD as `//'? + +POSIX.2, in its description of `cd', says that *three* or more leading +slashes may be replaced with a single slash when canonicalizing the +current working directory. + +This is, I presume, for historical compatibility. Certain versions of +Unix, and early network file systems, used paths of the form +//hostname/path to access `path' on server `hostname'. + +E11) If I resize my xterm while another program is running, why doesn't bash + notice the change? + +This is another issue that deals with job control. + +The kernel maintains a notion of a current terminal process group. Members +of this process group (processes whose process group ID is equal to the +current terminal process group ID) receive terminal-generated signals like +SIGWINCH. (For more details, see the JOB CONTROL section of the bash +man page.) + +If a terminal is resized, the kernel sends SIGWINCH to each member of +the terminal's current process group (the `foreground' process group). + +When bash is running with job control enabled, each pipeline (which may be +a single command) is run in its own process group, different from bash's +process group. This foreground process group receives the SIGWINCH; bash +does not. Bash has no way of knowing that the terminal has been resized. + +There is a `checkwinsize' option, settable with the `shopt' builtin, that +will cause bash to check the window size and adjust its idea of the +terminal's dimensions each time a process stops or exits and returns control +of the terminal to bash. Enable it with `shopt -s checkwinsize'. + +Section F: Things to watch out for on certain Unix versions + +F1) Why can't I use command line editing in my `cmdtool'? + +The problem is `cmdtool' and bash fighting over the input. When +scrolling is enabled in a cmdtool window, cmdtool puts the tty in +`raw mode' to permit command-line editing using the mouse for +applications that cannot do it themselves. As a result, bash and +cmdtool each try to read keyboard input immediately, with neither +getting enough of it to be useful. + +This mode also causes cmdtool to not implement many of the +terminal functions and control sequences appearing in the +`sun-cmd' termcap entry. For a more complete explanation, see +that file examples/suncmd.termcap in the bash distribution. + +`xterm' is a better choice, and gets along with bash much more +smoothly. + +If you must use cmdtool, you can use the termcap description in +examples/suncmd.termcap. Set the TERMCAP variable to the terminal +description contained in that file, i.e. + +TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:' + +Then export TERMCAP and start a new cmdtool window from that shell. +The bash command-line editing should behave better in the new +cmdtool. If this works, you can put the assignment to TERMCAP +in your bashrc file. + +F2) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? + +This is the consequence of building bash on SunOS 5 and linking +with the libraries in /usr/ucblib, but using the definitions +and structures from files in /usr/include. + +The actual conflict is between the dirent structure in +/usr/include/dirent.h and the struct returned by the version of +`readdir' in libucb.a (a 4.3-BSD style `struct direct'). + +Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH +when configuring and building bash. This will ensure that you +use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you +link with libc before libucb. + +If you have installed the Sun C compiler, you may also need to +put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before +/usr/ucb. + +F3) Why does bash dump core after I interrupt username completion or + `~user' tilde expansion on a machine running NIS? + +This is a famous and long-standing bug in the SunOS YP (sorry, NIS) +client library, which is part of libc. + +The YP library code keeps static state -- a pointer into the data +returned from the server. When YP initializes itself (setpwent), +it looks at this pointer and calls free on it if it's non-null. +So far, so good. + +If one of the YP functions is interrupted during getpwent (the +exact function is interpretwithsave()), and returns NULL, the +pointer is freed without being reset to NULL, and the function +returns. The next time getpwent is called, it sees that this +pointer is non-null, calls free, and the bash free() blows up +because it's being asked to free freed memory. + +The traditional Unix mallocs allow memory to be freed multiple +times; that's probably why this has never been fixed. You can +run configure with the `--without-gnu-malloc' option to use +the C library malloc and avoid the problem. + +F4) I'm running SVR4.2. Why is the line erased every time I type `@'? + +The `@' character is the default `line kill' character in most +versions of System V, including SVR4.2. You can change this +character to whatever you want using `stty'. For example, to +change the line kill character to control-u, type + + stty kill ^U + +where the `^' and `U' can be two separate characters. + +F5) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? + +The actual command in question is something like + + < file ( command ) + +According to the grammar given in the POSIX.2 standard, this construct +is, in fact, a syntax error. Redirections may only precede `simple +commands'. A subshell construct such as the above is one of the shell's +`compound commands'. A redirection may only follow a compound command. + +This affects the mechanical transformation of commands that use `cat' +to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on +comp.unix.shell). While most commands of the form + + cat file | command + +can be converted to `< file command', shell control structures such as +loops and subshells require `command < file'. + +The file CWRU/sh-redir-hack in the bash-2.05a distribution is an +(unofficial) patch to parse.y that will modify the grammar to +support this construct. It will not apply with `patch'; you must +modify parse.y by hand. Note that if you apply this, you must +recompile with -DREDIRECTION_HACK. This introduces a large +number of reduce/reduce conflicts into the shell grammar. + +F6) Why can't I use vi-mode editing on Red Hat Linux 6.1? + +The short answer is that Red Hat screwed up. + +The long answer is that they shipped an /etc/inputrc that only works +for emacs mode editing, and then screwed all the vi users by setting +INPUTRC to /etc/inputrc in /etc/profile. + +The short fix is to do one of the following: remove or rename +/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile, +but make sure you export it if you do), remove the assignment to +INPUTRC from /etc/profile, add + + set keymap emacs + +to the beginning of /etc/inputrc, or bracket the key bindings in +/etc/inputrc with these lines + + $if mode=emacs + [...] + $endif + +F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on + HP/UX 11.x? + +HP/UX's support for long double is imperfect at best. + +GCC will support it without problems, but the HP C library functions +like strtold(3) and printf(3) don't actually work with long doubles. +HP implemented a `long_double' type as a 4-element array of 32-bit +ints, and that is what the library functions use. The ANSI C +`long double' type is a 128-bit floating point scalar. + +The easiest fix, until HP fixes things up, is to edit the generated +config.h and #undef the HAVE_LONG_DOUBLE line. After doing that, +the compilation should complete successfully. + +Section G: How can I get bash to do certain common things? + +G1) How can I get bash to read and display eight-bit characters? + +This is a process requiring several steps. + +First, you must ensure that the `physical' data path is a full eight +bits. For xterms, for example, the `vt100' resources `eightBitInput' +and `eightBitOutput' should be set to `true'. + +Once you have set up an eight-bit path, you must tell the kernel and +tty driver to leave the eighth bit of characters alone when processing +keyboard input. Use `stty' to do this: + + stty cs8 -istrip -parenb + +For old BSD-style systems, you can use + + stty pass8 + +You may also need + + stty even odd + +Finally, you need to tell readline that you will be inputting and +displaying eight-bit characters. You use readline variables to do +this. These variables can be set in your .inputrc or using the bash +`bind' builtin. Here's an example using `bind': + + bash$ bind 'set convert-meta off' + bash$ bind 'set meta-flag on' + bash$ bind 'set output-meta on' + +The `set' commands between the single quotes may also be placed +in ~/.inputrc. + +G2) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? + +This is why the `command' and `builtin' builtins exist. The +`command' builtin executes the command supplied as its first +argument, skipping over any function defined with that name. The +`builtin' builtin executes the builtin command given as its first +argument directly. + +For example, to write a function to replace `cd' that writes the +hostname and current directory to an xterm title bar, use +something like the following: + + cd() + { + builtin cd "$@" && xtitle "$HOST: $PWD" + } + +This could also be written using `command' instead of `builtin'; +the version above is marginally more efficient. + +G3) How can I find the value of a shell variable whose name is the value + of another shell variable? + +Versions of Bash newer than Bash-2.0 support this directly. You can use + + ${!var} + +For example, the following sequence of commands will echo `z': + + var1=var2 + var2=z + echo ${!var1} + +For sh compatibility, use the `eval' builtin. The important +thing to remember is that `eval' expands the arguments you give +it again, so you need to quote the parts of the arguments that +you want `eval' to act on. + +For example, this expression prints the value of the last positional +parameter: + + eval echo \"\$\{$#\}\" + +The expansion of the quoted portions of this expression will be +deferred until `eval' runs, while the `$#' will be expanded +before `eval' is executed. In versions of bash later than bash-2.0, + + echo ${!#} + +does the same thing. + +This is not the same thing as ksh93 `nameref' variables, though the syntax +is similar. I may add namerefs in a future bash version. + +G4) How can I make the bash `time' reserved word print timing output that + looks like the output from my system's /usr/bin/time? + +The bash command timing code looks for a variable `TIMEFORMAT' and +uses its value as a format string to decide how to display the +timing statistics. + +The value of TIMEFORMAT is a string with `%' escapes expanded in a +fashion similar in spirit to printf(3). The manual page explains +the meanings of the escape sequences in the format string. + +If TIMEFORMAT is not set, bash acts as if the following assignment had +been performed: + + TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' + +The POSIX.2 default time format (used by `time -p command') is + + TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S' + +The BSD /usr/bin/time format can be emulated with: + + TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys' + +The System V /usr/bin/time format can be emulated with: + + TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S' + +The ksh format can be emulated with: + + TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS' + +G5) How do I get the current directory into my prompt? + +Bash provides a number of backslash-escape sequences which are expanded +when the prompt string (PS1 or PS2) is displayed. The full list is in +the manual page. + +The \w expansion gives the full pathname of the current directory, with +a tilde (`~') substituted for the current value of $HOME. The \W +expansion gives the basename of the current directory. To put the full +pathname of the current directory into the path without any tilde +subsitution, use $PWD. Here are some examples: + + PS1='\w$ ' # current directory with tilde + PS1='\W$ ' # basename of current directory + PS1='$PWD$ ' # full pathname of current directory + +The single quotes are important in the final example to prevent $PWD from +being expanded when the assignment to PS1 is performed. + +G6) How can I rename "*.foo" to "*.bar"? + +Use the pattern removal functionality described in D3. The following `for' +loop will do the trick: + + for f in *.foo; do + mv $f ${f%foo}bar + done + +G7) How can I translate a filename from uppercase to lowercase? + +The script examples/functions/lowercase, originally written by John DuBois, +will do the trick. The converse is left as an exercise. + +G8) How can I write a filename expansion (globbing) pattern that will match + all files in the current directory except "." and ".."? + +You must have set the `extglob' shell option using `shopt -s extglob' to use +this: + + echo .!(.|) * + +A solution that works without extended globbing is given in the Unix Shell +FAQ, posted periodically to comp.unix.shell. + +Section H: Where do I go from here? + +H1) How do I report bugs in bash, and where should I look for fixes and + advice? + +Use the `bashbug' script to report bugs. It is built and +installed at the same time as bash. It provides a standard +template for reporting a problem and automatically includes +information about your configuration and build environment. + +`bashbug' sends its reports to bug-bash@gnu.org, which +is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. + +Bug fixes, answers to questions, and announcements of new releases +are all posted to gnu.bash.bug. Discussions concerning bash features +and problems also take place there. + +To reach the bash maintainers directly, send mail to +bash-maintainers@gnu.org. + +H2) What kind of bash documentation is there? + +First, look in the doc directory in the bash distribution. It should +contain at least the following files: + +bash.1 an extensive, thorough Unix-style manual page +builtins.1 a manual page covering just bash builtin commands +bashref.texi a reference manual in GNU tex`info format +bashref.info an info version of the reference manual +FAQ this file +article.ms text of an article written for The Linux Journal +readline.3 a man page describing readline + +Postscript, HTML, and ASCII files created from the above source are +available in the documentation distribution. + +There is additional documentation available for anonymous FTP from host +ftp.cwru.edu in the `pub/bash' directory. + +Cameron Newham and Bill Rosenblatt have written a book on bash, published +by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn +Shell book. The title is ``Learning the Bash Shell'', and the ISBN number +is 1-56592-147-X. Look for it in fine bookstores near you. This book +covers bash-1.14, but has an appendix describing some of the new features +in bash-2.0. + +A second edition of this book is available, published in January, 1998. +The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores +or on the web. + +The GNU Bash Reference Manual has been published as a printed book by +Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers +bash-2.0 and is available from most online bookstores (see +http://www.network-theory.co.uk/bash/manual/ for details). The publisher +will donate $1 to the Free Software Foundation for each copy sold. + +H3) What's coming in future versions? + +These are features I hope to include in a future version of bash. + +a better bash debugger (a minimally-tested version is included with bash-2.05b) +associative arrays +co-processes, but with a new-style syntax that looks like function declaration + +H4) What's on the bash `wish list' for future versions? + +These are features that may or may not appear in a future version of bash. + +breaking some of the shell functionality into embeddable libraries +a module system like zsh's, using dynamic loading like builtins +better internationalization using GNU `gettext' +date-stamped command history +a bash programmer's guide with a chapter on creating loadable builtins +a better loadable interface to perl with access to the shell builtins and + variables (contributions gratefully accepted) +ksh93-like `nameref' variables +ksh93-like `+=' variable assignment operator +ksh93-like `xx.yy' variables (including some of the .sh.* variables) and + associated disipline functions +Some of the new ksh93 pattern matching operators, like backreferencing + +H5) When will the next release appear? + +The next version will appear sometime in 2002. Never make predictions. + + +This document is Copyright 1995-2003 by Chester Ramey. + +Permission is hereby granted, without written agreement and +without license or royalty fees, to use, copy, and distribute +this document for any purpose, provided that the above copyright +notice appears in all copies of this document and that the +contents of this document remain unaltered. diff --git a/doc/FAQ.save b/doc/FAQ.save new file mode 100644 index 00000000..1cff3c8e --- /dev/null +++ b/doc/FAQ.save @@ -0,0 +1,1745 @@ +This is the Bash FAQ, version 3.24, for Bash version 2.05b. + +This document contains a set of frequently-asked questions concerning +Bash, the GNU Bourne-Again Shell. Bash is a freely-available command +interpreter with advanced features for both interactive use and shell +programming. + +Another good source of basic information about shells is the collection +of FAQ articles periodically posted to comp.unix.shell. + +Questions and comments concerning this document should be sent to +chet@po.cwru.edu. + +This document is available for anonymous FTP with the URL + +ftp://ftp.cwru.edu/pub/bash/FAQ + +The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html + +---------- +Contents: + +Section A: The Basics + +A1) What is it? +A2) What's the latest version? +A3) Where can I get it? +A4) On what machines will bash run? +A5) Will bash run on operating systems other than Unix? +A6) How can I build bash with gcc? +A7) How can I make bash my login shell? +A8) I just changed my login shell to bash, and now I can't FTP into my + machine. Why not? +A9) What's the `POSIX 1003.2 standard'? +A10) What is the bash `posix mode'? + +Section B: The latest version + +B1) What's new in version 2.05b? +B2) Are there any user-visible incompatibilities between bash-2.05b and + bash-1.14.7? + +Section C: Differences from other Unix shells + +C1) How does bash differ from sh, the Bourne shell? +C2) How does bash differ from the Korn shell, version ksh88? +C3) Which new features in ksh-93 are not in bash, and which are? + +Section D: Why does bash do some things differently than other Unix shells? + +D1) Why does bash run a different version of `command' than + `which command' says it will? +D2) Why doesn't bash treat brace expansions exactly like csh? +D3) Why doesn't bash have csh variable modifiers? +D4) How can I make my csh aliases work when I convert to bash? +D5) How can I pipe standard output and standard error from one command to + another, like csh does with `|&'? +D6) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? + +Section E: Why does bash do certain things the way it does? + +E1) Why is the bash builtin `test' slightly different from /bin/test? +E2) Why does bash sometimes say `Broken pipe'? +E3) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? +E4) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? +E5) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? +E6) Why doesn't a while or for loop get suspended when I type ^Z? +E7) What about empty for loops in Makefiles? +E8) Why does the arithmetic evaluation code complain about `08'? +E9) Why does the pattern matching expression [A-Z]* match files beginning + with every letter except `z'? +E10) Why does `cd //' leave $PWD as `//'? +E11) If I resize my xterm while another program is running, why doesn't bash + notice the change? + +Section F: Things to watch out for on certain Unix versions + +F1) Why can't I use command line editing in my `cmdtool'? +F2) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? +F3) Why does bash dump core after I interrupt username completion or + `~user' tilde expansion on a machine running NIS? +F4) I'm running SVR4.2. Why is the line erased every time I type `@'? +F5) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? +F6) Why can't I use vi-mode editing on Red Hat Linux 6.1? +F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on + HP/UX 11.x? + +Section G: How can I get bash to do certain common things? + +G1) How can I get bash to read and display eight-bit characters? +G2) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? +G3) How can I find the value of a shell variable whose name is the value + of another shell variable? +G4) How can I make the bash `time' reserved word print timing output that + looks like the output from my system's /usr/bin/time? +G5) How do I get the current directory into my prompt? +G6) How can I rename "*.foo" to "*.bar"? +G7) How can I translate a filename from uppercase to lowercase? +G8) How can I write a filename expansion (globbing) pattern that will match + all files in the current directory except "." and ".."? + +Section H: Where do I go from here? + +H1) How do I report bugs in bash, and where should I look for fixes and + advice? +H2) What kind of bash documentation is there? +H3) What's coming in future versions? +H4) What's on the bash `wish list'? +H5) When will the next release appear? + +---------- +Section A: The Basics + +A1) What is it? + +Bash is a Unix command interpreter (shell). It is an implementation of +the Posix 1003.2 shell standard, and resembles the Korn and System V +shells. + +Bash contains a number of enhancements over those shells, both +for interactive use and shell programming. Features geared +toward interactive use include command line editing, command +history, job control, aliases, and prompt expansion. Programming +features include additional variable expansions, shell +arithmetic, and a number of variables and options to control +shell behavior. + +Bash was originally written by Brian Fox of the Free Software +Foundation. The current developer and maintainer is Chet Ramey +of Case Western Reserve University. + +A2) What's the latest version? + +The latest version is 2.05b, first made available on Wednesday, 17 +July, 2002. + +A3) Where can I get it? + +Bash is the GNU project's shell, and so is available from the +master GNU archive site, ftp.gnu.org, and its mirrors. The +latest version is also available for FTP from ftp.cwru.edu. +The following URLs tell how to get version 2.05b: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz + +Formatted versions of the documentation are available with the URLs: + +ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz +ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz + +A4) On what machines will bash run? + +Bash has been ported to nearly every version of UNIX. All you +should have to do to build it on a machine for which a port +exists is to type `configure' and then `make'. The build process +will attempt to discover the version of UNIX you have and tailor +itself accordingly, using a script created by GNU autoconf. + +More information appears in the file `INSTALL' in the distribution. + +The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html) +explains how to obtain binary versions of bash for most of the major +commercial Unix systems. + +A5) Will bash run on operating systems other than Unix? + +Configuration specifics for Unix-like systems such as QNX and +LynxOS are included in the distribution. Bash-2.05 and later +versions should compile and run on Minix 2.0 (patches were +contributed), but I don't believe anyone has built bash-2.x on +earlier Minix versions yet. + +Bash has been ported to versions of Windows implementing the Win32 +programming interface. This includes Windows 95 and Windows NT. +The port was done by Cygnus Solutions as part of their CYGWIN +project. For more information about the project, look at the URLs + +http://www.cygwin.com/ +http://sourceware.cygnus.com/cygwin + +Cygnus originally ported bash-1.14.7, and that port was part of their +early GNU-Win32 (the original name) releases. Cygnus has also done a +port of bash-2.05 to the CYGWIN environment, and it is available as +part of their current release. + +Bash-2.05b should require no local Cygnus changes to build and run under +CYGWIN. + +The Cygnus port works only on Intel machines. There is a port of bash +(I don't know which version) to the alpha/NT environment available from + +ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz + +DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part +of the DJGPP project. For more information on the project, see + +http://www.delorie.com/djgpp/ + +I have been told that the original DJGPP port was done by Daisuke Aoyama. + +Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04 +is available for DJGPP V2. The files are available as: + +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation +ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source + +Mark has begun to work with bash-2.05, but I don't know the status. + +Ports of bash-1.12 and bash-2.0 are available for OS/2 from + +ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip +ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip + +I haven't looked at either, but the second appears to be a binary-only +distribution. Beware. + +I have received word that Bash (I'm not sure which version, but I +believe that it's at least bash-2.02.1) is the standard shell on +BeOS. + +A6) How can I build bash with gcc? + +Bash configures to use gcc by default if it is available. Read the +file INSTALL in the distribution for more information. + +A7) How can I make bash my login shell? + +Some machines let you use `chsh' to change your login shell. Other +systems use `passwd -s' or `passwd -e'. If one of these works for +you, that's all you need. Note that many systems require the full +pathname to a shell to appear in /etc/shells before you can make it +your login shell. For this, you may need the assistance of your +friendly local system administrator. + +If you cannot do this, you can still use bash as your login shell, but +you need to perform some tricks. The basic idea is to add a command +to your login shell's startup file to replace your login shell with +bash. + +For example, if your login shell is csh or tcsh, and you have installed +bash in /usr/gnu/bin/bash, add the following line to ~/.login: + + if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login + +(the `--login' tells bash that it is a login shell). + +It's not a good idea to put this command into ~/.cshrc, because every +csh you run without the `-f' option, even ones started to run csh scripts, +reads that file. If you must put the command in ~/.cshrc, use something +like + + if ( $?prompt ) exec /usr/gnu/bin/bash --login + +to ensure that bash is exec'd only when the csh is interactive. + +If your login shell is sh or ksh, you have to do two things. + +First, create an empty file in your home directory named `.bash_profile'. +The existence of this file will prevent the exec'd bash from trying to +read ~/.profile, and re-execing itself over and over again. ~/.bash_profile +is the first file bash tries to read initialization commands from when +it is invoked as a login shell. + +Next, add a line similar to the above to ~/.profile: + + [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \ + exec /usr/gnu/bin/bash --login + +This will cause login shells to replace themselves with bash running as +a login shell. Once you have this working, you can copy your initialization +code from ~/.profile to ~/.bash_profile. + +I have received word that the recipe supplied above is insufficient for +machines running CDE. CDE has a maze of twisty little startup files, all +slightly different. + +If you cannot change your login shell in the password file to bash, you +will have to (apparently) live with CDE using the shell in the password +file to run its startup scripts. If you have changed your shell to bash, +there is code in the CDE startup files (on Solaris, at least) that attempts +to do the right thing. It is, however, often broken, and may require that +you use the $BASH_ENV trick described below. + +`dtterm' claims to use $SHELL as the default program to start, so if you +can change $SHELL in the CDE startup files, you should be able to use bash +in your terminal windows. + +Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program +to read your login shell's startup files. You may be able to use bash for +the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as +well, but I have not tried this. + +You can use the above `exec' recipe to start bash when not logging in with +CDE by testing the value of the DT variable: + + if [ -n "$DT" ]; then + [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login + fi + +If CDE starts its shells non-interactively during login, the login shell +startup files (~/.profile, ~/.bash_profile) will not be sourced at login. +To get around this problem, append a line similar to the following to your +~/.dtprofile: + + BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV + +and add the following line to the beginning of ~/.bash_profile: + + unset BASH_ENV + +A8) I just changed my login shell to bash, and now I can't FTP into my + machine. Why not? + +You must add the full pathname to bash to the file /etc/shells. As +noted in the answer to the previous question, many systems require +this before you can make bash your login shell. + +Most versions of ftpd use this file to prohibit `special' users +such as `uucp' and `news' from using FTP. + +A9) What's the `POSIX 1003.2 standard'? + +POSIX is a name originally coined by Richard Stallman for a +family of open system standards based on UNIX. There are a +number of aspects of UNIX under consideration for +standardization, from the basic system services at the system +call and C library level to applications and tools to system +administration and management. Each area of standardization is +assigned to a working group in the 1003 series. + +The POSIX Shell and Utilities standard has been developed by IEEE +Working Group 1003.2 (POSIX.2). It concentrates on the command +interpreter interface and utility programs commonly executed from +the command line or by other programs. An initial version of the +standard has been approved and published by the IEEE, and work is +currently underway to update it. + +Bash is concerned with the aspects of the shell's behavior +defined by POSIX.2. The shell command language has of course +been standardized, including the basic flow control and program +execution constructs, I/O redirection and pipelining, argument +handling, variable expansion, and quoting. + +The `special' builtins, which must be implemented as part of the +shell to provide the desired functionality, are specified as +being part of the shell; examples of these are `eval' and +`export'. Other utilities appear in the sections of POSIX.2 not +devoted to the shell which are commonly (and in some cases must +be) implemented as builtin commands, such as `read' and `test'. +POSIX.2 also specifies aspects of the shell's interactive +behavior as part of the UPE, including job control and command +line editing. Only vi-style line editing commands have been +standardized; emacs editing commands were left out due to +objections. + +The Open Group has made an older version of its Single Unix +Specification (version 2), which is very similar to POSIX.2, +available on the web at + +http://www.opengroup.org/onlinepubs/007908799/ + +The Single Unix Specification, version 3, is available on the web at + +http://www.opengroup.org/onlinepubs/007904975/ + +A10) What is the bash `posix mode'? + +Although bash is an implementation of the POSIX.2 shell +specification, there are areas where the bash default behavior +differs from that spec. The bash `posix mode' changes the bash +behavior in these areas so that it obeys the spec more closely. + +Posix mode is entered by starting bash with the --posix or +'-o posix' option or executing `set -o posix' after bash is running. + +The specific aspects of bash which change when posix mode is +active are listed in the file POSIX in the bash distribution. +They are also listed in a section in the Bash Reference Manual +(from which that file is generated). + +Section B: The latest version + +B1) What's new in version 2.05b? + +The raison d'etre for bash-2.05b is to make a second intermediate +release containing the first of the new features to be available +in bash-3.0 and get feedback on those features before proceeding. +The major new feature is multibyte character support in both Bash +and Readline. + +Bash-2.05b contains the following new features (see the manual page for +complete descriptions and the CHANGES and NEWS files in the bash-2.05b +distribution): + +o support for multibyte characters has been added to both bash and readline + +o the DEBUG trap is now run *before* simple commands, ((...)) commands, + [[...]] conditional commands, and for ((...)) loops + +o the shell now performs arithmetic in the largest integer size the machine + supports (intmax_t) + +o there is a new \D{...} prompt expansion; passes the `...' to strftime(3) + and inserts the result into the expanded prompt + +o there is a new `here-string' redirection operator: <<< word + +o when displaying variables, function attributes and definitions are shown + separately, allowing them to be re-used as input (attempting to re-use + the old output would result in syntax errors). + +o `read' has a new `-u fd' option to read from a specified file descriptor + +o the bash debugger in examples/bashdb has been modified to work with the + new DEBUG trap semantics, the command set has been made more gdb-like, + and the changes to $LINENO make debugging functions work better + +o the expansion of $LINENO inside a shell function is only relative to the + function start if the shell is interactive -- if the shell is running a + script, $LINENO expands to the line number in the script. This is as + POSIX-2001 requires + + +A short feature history dating from Bash-2.0: + +Bash-2.05a introduced the following new features: + +o The `printf' builtin has undergone major work + +o There is a new read-only `shopt' option: login_shell, which is set by + login shells and unset otherwise + +o New `\A' prompt string escape sequence; expanding to time in 24-hour + HH:MM format + +o New `-A group/-g' option to complete and compgen; goes group name + completion + +o New [+-]O invocation option to set and unset `shopt' options at startup + +o ksh-like `ERR' trap + +o `for' loops now allow empty word lists after the `in' reserved word + +o new `hard' and `soft' arguments for the `ulimit' builtin + +o Readline can be configured to place the user at the same point on the line + when retrieving commands from the history list + +o Readline can be configured to skip `hidden' files (filenames with a leading + `.' on Unix) when performing completion + +Bash-2.05 introduced the following new features: + +o This version has once again reverted to using locales and strcoll(3) when + processing pattern matching bracket expressions, as POSIX requires. +o Added a new `--init-file' invocation argument as a synonym for `--rcfile', + per the new GNU coding standards. +o The /dev/tcp and /dev/udp redirections now accept service names as well as + port numbers. +o `complete' and `compgen' now take a `-o value' option, which controls some + of the aspects of that compspec. Valid values are: + + default - perform bash default completion if programmable + completion produces no matches + dirnames - perform directory name completion if programmable + completion produces no matches + filenames - tell readline that the compspec produces filenames, + so it can do things like append slashes to + directory names and suppress trailing spaces +o A new loadable builtin, realpath, which canonicalizes and expands symlinks + in pathname arguments. +o When `set' is called without options, it prints function defintions in a + way that allows them to be reused as input. This affects `declare' and + `declare -p' as well. This only happens when the shell is not in POSIX + mode, since POSIX.2 forbids this behavior. + +Bash-2.04 introduced the following new features: + +o Programmable word completion with the new `complete' and `compgen' builtins; + examples are provided in examples/complete/complete-examples +o `history' has a new `-d' option to delete a history entry +o `bind' has a new `-x' option to bind key sequences to shell commands +o The prompt expansion code has new `\j' and `\l' escape sequences +o The `no_empty_cmd_completion' shell option, if enabled, inhibits + command completion when TAB is typed on an empty line +o `help' has a new `-s' option to print a usage synopsis +o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma) +o New ksh93-style arithmetic for command: + for ((expr1 ; expr2; expr3 )); do list; done +o `read' has new options: `-t', `-n', `-d', `-s' +o The redirection code handles several filenames specially: /dev/fd/N, + /dev/stdin, /dev/stdout, /dev/stderr +o The redirection code now recognizes /dev/tcp/HOST/PORT and + /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively, + to the specified port on the specified host +o The ${!prefix*} expansion has been implemented +o A new FUNCNAME variable, which expands to the name of a currently-executing + function +o The GROUPS variable is no longer readonly +o A new shopt `xpg_echo' variable, to control the behavior of echo with + respect to backslash-escape sequences at runtime +o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned + +The version of Readline released with Bash-2.04, Readline-4.1, had several +new features as well: + +o Parentheses matching is always compiled into readline, and controllable + with the new `blink-matching-paren' variable +o The history-search-forward and history-search-backward functions now leave + point at the end of the line when the search string is empty, like + reverse-search-history, and forward-search-history +o A new function for applications: rl_on_new_line_with_prompt() +o New variables for applications: rl_already_prompted, and rl_gnu_readline_p + + +Bash-2.03 had very few new features, in keeping with the convention +that odd-numbered releases provide mainly bug fixes. A number of new +features were added to Readline, mostly at the request of the Cygnus +folks. + +A new shopt option, `restricted_shell', so that startup files can test + whether or not the shell was started in restricted mode +Filename generation is now performed on the words between ( and ) in + compound array assignments (this is really a bug fix) +OLDPWD is now auto-exported, as POSIX.2 requires +ENV and BASH_ENV are read-only variables in a restricted shell +Bash may now be linked against an already-installed Readline library, + as long as the Readline library is version 4 or newer +All shells begun with the `--login' option will source the login shell + startup files, even if the shell is not interactive + +There were lots of changes to the version of the Readline library released +along with Bash-2.03. For a complete list of the changes, read the file +CHANGES in the Bash-2.03 distribution. + +Bash-2.02 contained the following new features: + +a new version of malloc (based on the old GNU malloc code in previous + bash versions) that is more page-oriented, more conservative + with memory usage, does not `orphan' large blocks when they + are freed, is usable on 64-bit machines, and has allocation + checking turned on unconditionally +POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.) +POSIX.2-style globbing equivalence classes +POSIX.2-style globbing collating symbols +the ksh [[...]] extended conditional command +the ksh egrep-style extended pattern matching operators +a new `printf' builtin +the ksh-like $(<filename) command substitution, which is equivalent to + $(cat filename) +new tilde prefixes that expand to directories from the directory stack +new `**' arithmetic operator to do exponentiation +case-insensitive globbing (filename expansion) +menu completion a la tcsh +`magic-space' history expansion function like tcsh +the readline inputrc `language' has a new file inclusion directive ($include) + +Bash-2.01 contained only a few new features: + +new `GROUPS' builtin array variable containing the user's group list +new bindable readline commands: history-and-alias-expand-line and + alias-expand-line + +Bash-2.0 contained extensive changes and new features from bash-1.14.7. +Here's a short list: + +new `time' reserved word to time pipelines, shell builtins, and + shell functions +one-dimensional arrays with a new compound assignment statement, + appropriate expansion constructs and modifications to some + of the builtins (read, declare, etc.) to use them +new quoting syntaxes for ANSI-C string expansion and locale-specific + string translation +new expansions to do substring extraction, pattern replacement, and + indirect variable expansion +new builtins: `disown' and `shopt' +new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE, + MACHTYPE, BASH_VERSINFO +special handling of many unused or redundant variables removed + (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec) +dynamic loading of new builtin commands; many loadable examples provided +new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V +history and aliases available in shell scripts +new readline variables: enable-keypad, mark-directories, input-meta, + visible-stats, disable-completion, comment-begin +new readline commands to manipulate the mark and operate on the region +new readline emacs mode commands and bindings for ksh-88 compatibility +updated and extended builtins +new DEBUG trap +expanded (and now documented) restricted shell mode + +implementation stuff: +autoconf-based configuration +nearly all of the bugs reported since version 1.14 have been fixed +most builtins converted to use builtin `getopt' for consistency +most builtins use -p option to display output in a reusable form + (for consistency) +grammar tighter and smaller (66 reduce-reduce conflicts gone) +lots of code now smaller and faster +test suite greatly expanded + +B2) Are there any user-visible incompatibilities between bash-2.05b and + bash-1.14.7? + +There are a few incompatibilities between version 1.14.7 and version 2.05b. +They are detailed in the file COMPAT in the bash distribution. That file +is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org +if if you find something that's not mentioned there. + +Section C: Differences from other Unix shells + +C1) How does bash differ from sh, the Bourne shell? + +This is a non-comprehensive list of features that differentiate bash +from the SVR4.2 shell. The bash manual page explains these more +completely. + +Things bash has that sh does not: + long invocation options + [+-]O invocation option + -l invocation option + `!' reserved word to invert pipeline return value + `time' reserved word to time pipelines and shell builtins + the `function' reserved word + the `select' compound command and reserved word + arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done + new $'...' and $"..." quoting + the $(...) form of command substitution + the $(<filename) form of command substitution, equivalent to + $(cat filename) + the ${#param} parameter value length operator + the ${!param} indirect parameter expansion operator + the ${!param*} prefix expansion operator + the ${param:offset[:length]} parameter substring operator + the ${param/pat[/string]} parameter pattern substitution operator + expansions to perform substring removal (${p%[%]w}, ${p#[#]w}) + expansion of positional parameters beyond $9 with ${num} + variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY, + TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS, + LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME, + ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE, + HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS, + PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC, + SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars, + auto_resume + DEBUG trap + ERR trap + variable arrays with new compound assignment syntax + redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word- + prompt string special char translation and variable expansion + auto-export of variables in initial environment + command search finds functions before builtins + bash return builtin will exit a file sourced with `.' + builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t. + export -n/-f/-p/name=value, pwd -L/-P, + read -e/-p/-a/-t/-n/-d/-s/-u, + readonly -a/-f/name=value, trap -l, set +o, + set -b/-m/-o option/-h/-p/-B/-C/-H/-P, + unset -f/-v, ulimit -m/-p/-u, + type -a/-p/-t/-f/-P, suspend -f, kill -n, + test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S + bash reads ~/.bashrc for interactive shells, $ENV for non-interactive + bash restricted shell mode is more extensive + bash allows functions and variables with the same name + brace expansion + tilde expansion + arithmetic expansion with $((...)) and `let' builtin + the `[[...]]' extended conditional command + process substitution + aliases and alias/unalias builtins + local variables in functions and `local' builtin + readline and command-line editing with programmable completion + command history and history/fc builtins + csh-like history expansion + other new bash builtins: bind, command, compgen, complete, builtin, + declare/typeset, dirs, enable, fc, help, + history, logout, popd, pushd, disown, shopt, + printf + exported functions + filename generation when using output redirection (command >a*) + POSIX.2-style globbing character classes + POSIX.2-style globbing equivalence classes + POSIX.2-style globbing collating symbols + egrep-like extended pattern matching operators + case-insensitive pattern matching and globbing + variable assignments preceding commands affect only that command, + even for builtins and functions + posix mode + redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr, + /dev/tcp/host/port, /dev/udp/host/port + +Things sh has that bash does not: + uses variable SHACCT to do shell accounting + includes `stop' builtin (bash can use alias stop='kill -s STOP') + `newgrp' builtin + turns on job control if called as `jsh' + $TIMEOUT (like bash $TMOUT) + `^' is a synonym for `|' + new SVR4.2 sh builtins: mldmode, priv + +Implementation differences: + redirection to/from compound commands causes sh to create a subshell + bash does not allow unbalanced quotes; sh silently inserts them at EOF + bash does not mess with signal 11 + sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100 + bash splits only the results of expansions on IFS, using POSIX.2 + field splitting rules; sh splits all words on IFS + sh does not allow MAILCHECK to be unset (?) + sh does not allow traps on SIGALRM or SIGCHLD + bash allows multiple option arguments when invoked (e.g. -x -v); + sh allows only a single option argument (`sh -x -v' attempts + to open a file named `-v', and, on SunOS 4.1.4, dumps core. + On Solaris 2.4 and earlier versions, sh goes into an infinite + loop.) + sh exits a script if any builtin fails; bash exits only if one of + the POSIX.2 `special' builtins fails + +C2) How does bash differ from the Korn shell, version ksh88? + +Things bash has or uses that ksh88 does not: + long invocation options + [-+]O invocation option + -l invocation option + `!' reserved word + arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done + arithmetic in largest machine-supported size (intmax_t) + posix mode and posix conformance + command hashing + tilde expansion for assignment statements that look like $PATH + process substitution with named pipes if /dev/fd is not available + the ${!param} indirect parameter expansion operator + the ${!param*} prefix expansion operator + the ${param:offset[:length]} parameter substring operator + the ${param/pat[/string]} parameter pattern substitution operator + variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL, + TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, + HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND, + IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK, + PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE, + GROUPS, FUNCNAME, histchars, auto_resume + prompt expansion with backslash escapes and command substitution + redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word- + more extensive and extensible editing and programmable completion + builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable, + exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history, + jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd, + read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p, + set -o braceexpand/-o histexpand/-o interactive-comments/ + -o notify/-o physical/-o posix/-o hashall/-o onecmd/ + -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type, + typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt, + disown, printf, complete, compgen + `!' csh-style history expansion + POSIX.2-style globbing character classes + POSIX.2-style globbing equivalence classes + POSIX.2-style globbing collating symbols + egrep-like extended pattern matching operators + case-insensitive pattern matching and globbing + `**' arithmetic operator to do exponentiation + redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr + arrays of unlimited size + TMOUT is default timeout for `read' and `select' + +Things ksh88 has or uses that bash does not: + tracked aliases (alias -t) + variables: ERRNO, FPATH, EDITOR, VISUAL + co-processes (|&, >&p, <&p) + weirdly-scoped functions + typeset +f to list all function names without definitions + text of command history kept in a file, not memory + builtins: alias -x, cd old new, fc -e -, newgrp, print, + read -p/-s/var?prompt, set -A/-o gmacs/ + -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s, + typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence + using environment to pass attributes of exported variables + arithmetic evaluation done on arguments to some builtins + reads .profile from $PWD when invoked as login shell + +Implementation differences: + ksh runs last command of a pipeline in parent shell context + bash has brace expansion by default (ksh88 compile-time option) + bash has fixed startup file for all interactive shells; ksh reads $ENV + bash has exported functions + bash command search finds functions before builtins + bash waits for all commands in pipeline to exit before returning status + emacs-mode editing has some slightly different key bindings + +C3) Which new features in ksh-93 are not in bash, and which are? + +New things in ksh-93 not in bash-2.05b: + associative arrays + floating point arithmetic and variables + math library functions + ${!name[sub]} name of subscript for associative array + `.' is allowed in variable names to create a hierarchical namespace + more extensive compound assignment syntax + discipline functions + `sleep' and `getconf' builtins (bash has loadable versions) + typeset -n and `nameref' variables + KEYBD trap + variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version, + .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT + backreferences in pattern matching (\N) + `&' operator in pattern lists for matching + print -f (bash uses printf) + `fc' has been renamed to `hist' + `.' can execute shell functions + exit statuses between 0 and 255 + set -o pipefail + `+=' variable assignment operator + FPATH and PATH mixing + getopts -a + -I invocation option + DEBUG trap now executed before each simple command, instead of after + printf %H, %P, %T, %Z modifiers, output base for %d + lexical scoping for local variables in `ksh' functions + no scoping for local variables in `POSIX' functions + +New things in ksh-93 present in bash-2.05b: + [n]<&word- and [n]>&word- redirections (combination dup and close) + for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command + ?:, ++, --, `expr1 , expr2' arithmetic operators + expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]}, + ${!param*} + compound array assignment + the `!' reserved word + loadable builtins -- but ksh uses `builtin' while bash uses `enable' + `command', `builtin', `disown' builtins + new $'...' and $"..." quoting + FIGNORE (but bash uses GLOBIGNORE), HISTCMD + set -o notify/-C + changes to kill builtin + read -A (bash uses read -a) + read -t/-d + trap -p + exec -c/-a + `.' restores the positional parameters when it completes + POSIX.2 `test' + umask -S + unalias -a + command and arithmetic substitution performed on PS1, PS4, and ENV + command name completion + ENV processed only for interactive shells + +Section D: Why does bash do some things differently than other Unix shells? + +D1) Why does bash run a different version of `command' than + `which command' says it will? + +On many systems, `which' is actually a csh script that assumes +you're running csh. In tcsh, `which' and its cousin `where' +are builtins. On other Unix systems, `which' is a perl script +that uses the PATH environment variable. + +The csh script version reads the csh startup files from your +home directory and uses those to determine which `command' will +be invoked. Since bash doesn't use any of those startup files, +there's a good chance that your bash environment differs from +your csh environment. The bash `type' builtin does everything +`which' does, and will report correct results for the running +shell. If you're really wedded to the name `which', try adding +the following function definition to your .bashrc: + + which() + { + builtin type "$@" + } + +If you're moving from tcsh and would like to bring `where' along +as well, use this function: + + where() + { + builtin type -a "$@" + } + +D2) Why doesn't bash treat brace expansions exactly like csh? + +The only difference between bash and csh brace expansion is that +bash requires a brace expression to contain at least one unquoted +comma if it is to be expanded. Any brace-surrounded word not +containing an unquoted comma is left unchanged by the brace +expansion code. This affords the greatest degree of sh +compatibility. + +Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. + +D3) Why doesn't bash have csh variable modifiers? + +Posix has specified a more powerful, albeit somewhat more cryptic, +mechanism cribbed from ksh, and bash implements it. + +${parameter%word} + Remove smallest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the suffix matched by the pattern deleted. + + x=file.c + echo ${x%.c}.o + -->file.o + +${parameter%%word} + + Remove largest suffix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the suffix matched by the pattern deleted. + + x=posix/src/std + echo ${x%%/*} + -->posix + +${parameter#word} + Remove smallest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + smallest portion of the prefix matched by the pattern deleted. + + x=$HOME/src/cmd + echo ${x#$HOME} + -->/src/cmd + +${parameter##word} + Remove largest prefix pattern. The WORD is expanded to produce + a pattern. It then expands to the value of PARAMETER, with the + largest portion of the prefix matched by the pattern deleted. + + x=/one/two/three + echo ${x##*/} + -->three + + +Given + a=/a/b/c/d + b=b.xxx + + csh bash result + --- ---- ------ + $a:h ${a%/*} /a/b/c + $a:t ${a##*/} d + $b:r ${b%.*} b + $b:e ${b##*.} xxx + + +D4) How can I make my csh aliases work when I convert to bash? + +Bash uses a different syntax to support aliases than csh does. +The details can be found in the documentation. We have provided +a shell script which does most of the work of conversion for you; +this script can be found in ./examples/misc/aliasconv.sh. Here is +how you use it: + +Start csh in the normal way for you. (e.g., `csh') + +Pipe the output of `alias' through `aliasconv.sh', saving the +results into `bash_aliases': + + alias | bash aliasconv.sh >bash_aliases + +Edit `bash_aliases', carefully reading through any created +functions. You will need to change the names of some csh specific +variables to the bash equivalents. The script converts $cwd to +$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt +to $PS1. You may also have to add quotes to avoid unwanted +expansion. + +For example, the csh alias: + + alias cd 'cd \!*; echo $cwd' + +is converted to the bash function: + + cd () { command cd "$@"; echo $PWD ; } + +The only thing that needs to be done is to quote $PWD: + + cd () { command cd "$@"; echo "$PWD" ; } + +Merge the edited file into your ~/.bashrc. + +There is an additional, more ambitious, script in +examples/misc/cshtobash that attempts to convert your entire csh +environment to its bash equivalent. This script can be run as +simply `cshtobash' to convert your normal interactive +environment, or as `cshtobash ~/.login' to convert your login +environment. + +D5) How can I pipe standard output and standard error from one command to + another, like csh does with `|&'? + +Use + command 2>&1 | command2 + +The key is to remember that piping is performed before redirection, so +file descriptor 1 points to the pipe when it is duplicated onto file +descriptor 2. + +D6) Now that I've converted from ksh to bash, are there equivalents to + ksh features like autoloaded functions and the `whence' command? + +There are features in ksh-88 and ksh-93 that do not have direct bash +equivalents. Most, however, can be emulated with very little trouble. + +ksh-88 feature Bash equivalent +-------------- --------------- +compiled-in aliases set up aliases in .bashrc; some ksh aliases are + bash builtins (hash, history, type) +coprocesses named pipe pairs (one for read, one for write) +typeset +f declare -F +cd, print, whence function substitutes in examples/functions/kshenv +autoloaded functions examples/functions/autoload is the same as typeset -fu +read var?prompt read -p prompt var + +ksh-93 feature Bash equivalent +-------------- --------------- +sleep, getconf Bash has loadable versions in examples/loadables +${.sh.version} $BASH_VERSION +print -f printf +hist alias hist=fc +$HISTEDIT $FCEDIT + +Section E: How can I get bash to do certain things, and why does bash do + things the way it does? + +E1) Why is the bash builtin `test' slightly different from /bin/test? + +The specific example used here is [ ! x -o x ], which is false. + +Bash's builtin `test' implements the Posix.2 spec, which can be +summarized as follows (the wording is due to David Korn): + +Here is the set of rules for processing test arguments. + + 0 Args: False + 1 Arg: True iff argument is not null. + 2 Args: If first arg is !, True iff second argument is null. + If first argument is unary, then true if unary test is true + Otherwise error. + 3 Args: If second argument is a binary operator, do binary test of $1 $3 + If first argument is !, negate two argument test of $2 $3 + If first argument is `(' and third argument is `)', do the + one-argument test of the second argument. + Otherwise error. + 4 Args: If first argument is !, negate three argument test of $2 $3 $4. + Otherwise unspecified + 5 or more Args: unspecified. (Historical shells would use their + current algorithm). + +The operators -a and -o are considered binary operators for the purpose +of the 3 Arg case. + +As you can see, the test becomes (not (x or x)), which is false. + +E2) Why does bash sometimes say `Broken pipe'? + +If a sequence of commands appears in a pipeline, and one of the +reading commands finishes before the writer has finished, the +writer receives a SIGPIPE signal. Many other shells special-case +SIGPIPE as an exit status in the pipeline and do not report it. +For example, in: + + ps -aux | head + +`head' can finish before `ps' writes all of its output, and ps +will try to write on a pipe without a reader. In that case, bash +will print `Broken pipe' to stderr when ps is killed by a +SIGPIPE. + +You can build a version of bash that will not report SIGPIPE errors +by uncommenting the definition of DONT_REPORT_SIGPIPE in the file +config-top.h. + +E3) When I have terminal escape sequences in my prompt, why does bash + wrap lines at the wrong column? + +Readline, the line editing library that bash uses, does not know +that the terminal escape sequences do not take up space on the +screen. The redisplay code assumes, unless told otherwise, that +each character in the prompt is a `printable' character that +takes up one character position on the screen. + +You can use the bash prompt expansion facility (see the PROMPTING +section in the manual page) to tell readline that sequences of +characters in the prompt strings take up no screen space. + +Use the \[ escape to begin a sequence of non-printing characters, +and the \] escape to signal the end of such a sequence. + +E4) If I pipe the output of a command into `read variable', why doesn't + the output show up in $variable when the read command finishes? + +This has to do with the parent-child relationship between Unix +processes. It affects all commands run in pipelines, not just +simple calls to `read'. For example, piping a command's output +into a `while' loop that repeatedly calls `read' will result in +the same behavior. + +Each element of a pipeline runs in a separate process, a child of +the shell running the pipeline. A subprocess cannot affect its +parent's environment. When the `read' command sets the variable +to the input, that variable is set only in the subshell, not the +parent shell. When the subshell exits, the value of the variable +is lost. + +Many pipelines that end with `read variable' can be converted +into command substitutions, which will capture the output of +a specified command. The output can then be assigned to a +variable: + + grep ^gnu /usr/lib/news/active | wc -l | read ngroup + +can be converted into + + ngroup=$(grep ^gnu /usr/lib/news/active | wc -l) + +This does not, unfortunately, work to split the text among +multiple variables, as read does when given multiple variable +arguments. If you need to do this, you can either use the +command substitution above to read the output into a variable +and chop up the variable using the bash pattern removal +expansion operators or use some variant of the following +approach. + +Say /usr/local/bin/ipaddr is the following shell script: + +#! /bin/sh +host `hostname` | awk '/address/ {print $NF}' + +Instead of using + + /usr/local/bin/ipaddr | read A B C D + +to break the local machine's IP address into separate octets, use + + OIFS="$IFS" + IFS=. + set -- $(/usr/local/bin/ipaddr) + IFS="$OIFS" + A="$1" B="$2" C="$3" D="$4" + +Beware, however, that this will change the shell's positional +parameters. If you need them, you should save them before doing +this. + +This is the general approach -- in most cases you will not need to +set $IFS to a different value. + +Some other user-supplied alternatives include: + +read A B C D << HERE + $(IFS=.; echo $(/usr/local/bin/ipaddr)) +HERE + +and, where process substitution is available, + +read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr)) + +E5) I have a bunch of shell scripts that use backslash-escaped characters + in arguments to `echo'. Bash doesn't interpret these characters. Why + not, and how can I make it understand them? + +This is the behavior of echo on most Unix System V machines. + +The bash builtin `echo' is modeled after the 9th Edition +Research Unix version of `echo'. It does not interpret +backslash-escaped characters in its argument strings by default; +it requires the use of the -e option to enable the +interpretation. The System V echo provides no way to disable the +special characters; the bash echo has a -E option to disable +them. + +There is a configuration option that will make bash behave like +the System V echo and interpret things like `\t' by default. Run +configure with the --enable-xpg-echo-default option to turn this +on. Be aware that this will cause some of the tests run when you +type `make tests' to fail. + +There is a shell option, `xpg_echo', settable with `shopt', that will +change the behavior of echo at runtime. Enabling this option turns +on expansion of backslash-escape sequences. + +E6) Why doesn't a while or for loop get suspended when I type ^Z? + +This is a consequence of how job control works on Unix. The only +thing that can be suspended is the process group. This is a single +command or pipeline of commands that the shell forks and executes. + +When you run a while or for loop, the only thing that the shell forks +and executes are any commands in the while loop test and commands in +the loop bodies. These, therefore, are the only things that can be +suspended when you type ^Z. + +If you want to be able to stop the entire loop, you need to put it +within parentheses, which will force the loop into a subshell that +may be stopped (and subsequently restarted) as a single unit. + +E7) What about empty for loops in Makefiles? + +It's fairly common to see constructs like this in automatically-generated +Makefiles: + +SUBDIRS = @SUBDIRS@ + + ... + +subdirs-clean: + for d in ${SUBDIRS}; do \ + ( cd $$d && ${MAKE} ${MFLAGS} clean ) \ + done + +When SUBDIRS is empty, this results in a command like this being passed to +bash: + + for d in ; do + ( cd $d && ${MAKE} ${MFLAGS} clean ) + done + +In versions of bash before bash-2.05a, this was a syntax error. If the +reserved word `in' was present, a word must follow it before the semicolon +or newline. The language in the manual page referring to the list of words +being empty referred to the list after it is expanded. These versions of +bash required that there be at least one word following the `in' when the +construct was parsed. + +The idiomatic Makefile solution is something like: + +SUBDIRS = @SUBDIRS@ + +subdirs-clean: + subdirs=$SUBDIRS ; for d in $$subdirs; do \ + ( cd $$d && ${MAKE} ${MFLAGS} clean ) \ + done + +The latest drafts of the updated POSIX standard have changed this: the +word list is no longer required. Bash versions 2.05a and later accept +the new syntax. + +E8) Why does the arithmetic evaluation code complain about `08'? + +The bash arithmetic evaluation code (used for `let', $(()), (()), and in +other places), interprets a leading `0' in numeric constants as denoting +an octal number, and a leading `0x' as denoting hexadecimal. This is +in accordance with the POSIX.2 spec, section 2.9.2.1, which states that +arithmetic constants should be handled as signed long integers as defined +by the ANSI/ISO C standard. + +The POSIX.2 interpretation committee has confirmed this: + +http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html + +E9) Why does the pattern matching expression [A-Z]* match files beginning + with every letter except `z'? + +Bash-2.03, Bash-2.05 and later versions honor the current locale setting +when processing ranges within pattern matching bracket expressions ([A-Z]). +This is what POSIX.2 and SUSv3/XPG6 specify. + +The behavior of the matcher in bash-2.05 and later versions depends on the +current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will +result in the traditional behavior ([A-Z] matches all uppercase ASCII +characters). Many other locales, including the en_US locale (the default +on many US versions of Linux) collate the upper and lower case letters like +this: + + AaBb...Zz + +which means that [A-Z] matches every letter except `z'. Others collate like + + aAbBcC...zZ + +which means that [A-Z] matches every letter except `a'. + +The portable way to specify upper case letters is [:upper:] instead of +A-Z; lower case may be specified as [:lower:] instead of a-z. + +Look at the manual pages for setlocale(3), strcoll(3), and, if it is +present, locale(1). If you have locale(1), you can use it to find +your current locale information even if you do not have any of the +LC_ variables set. + +My advice is to put + + export LC_COLLATE=C + +into /etc/profile and inspect any shell scripts run from cron for +constructs like [A-Z]. This will prevent things like + + rm [A-Z]* + +from removing every file in the current directory except those beginning +with `z' and still allow individual users to change the collation order. +Users may put the above command into their own profiles as well, of course. + +E10) Why does `cd //' leave $PWD as `//'? + +POSIX.2, in its description of `cd', says that *three* or more leading +slashes may be replaced with a single slash when canonicalizing the +current working directory. + +This is, I presume, for historical compatibility. Certain versions of +Unix, and early network file systems, used paths of the form +//hostname/path to access `path' on server `hostname'. + +E11) If I resize my xterm while another program is running, why doesn't bash + notice the change? + +This is another issue that deals with job control. + +The kernel maintains a notion of a current terminal process group. Members +of this process group (processes whose process group ID is equal to the +current terminal process group ID) receive terminal-generated signals like +SIGWINCH. (For more details, see the JOB CONTROL section of the bash +man page.) + +If a terminal is resized, the kernel sends SIGWINCH to each member of +the terminal's current process group (the `foreground' process group). + +When bash is running with job control enabled, each pipeline (which may be +a single command) is run in its own process group, different from bash's +process group. This foreground process group receives the SIGWINCH; bash +does not. Bash has no way of knowing that the terminal has been resized. + +There is a `checkwinsize' option, settable with the `shopt' builtin, that +will cause bash to check the window size and adjust its idea of the +terminal's dimensions each time a process stops or exits and returns control +of the terminal to bash. Enable it with `shopt -s checkwinsize'. + +Section F: Things to watch out for on certain Unix versions + +F1) Why can't I use command line editing in my `cmdtool'? + +The problem is `cmdtool' and bash fighting over the input. When +scrolling is enabled in a cmdtool window, cmdtool puts the tty in +`raw mode' to permit command-line editing using the mouse for +applications that cannot do it themselves. As a result, bash and +cmdtool each try to read keyboard input immediately, with neither +getting enough of it to be useful. + +This mode also causes cmdtool to not implement many of the +terminal functions and control sequences appearing in the +`sun-cmd' termcap entry. For a more complete explanation, see +that file examples/suncmd.termcap in the bash distribution. + +`xterm' is a better choice, and gets along with bash much more +smoothly. + +If you must use cmdtool, you can use the termcap description in +examples/suncmd.termcap. Set the TERMCAP variable to the terminal +description contained in that file, i.e. + +TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:' + +Then export TERMCAP and start a new cmdtool window from that shell. +The bash command-line editing should behave better in the new +cmdtool. If this works, you can put the assignment to TERMCAP +in your bashrc file. + +F2) I built bash on Solaris 2. Why do globbing expansions and filename + completion chop off the first few characters of each filename? + +This is the consequence of building bash on SunOS 5 and linking +with the libraries in /usr/ucblib, but using the definitions +and structures from files in /usr/include. + +The actual conflict is between the dirent structure in +/usr/include/dirent.h and the struct returned by the version of +`readdir' in libucb.a (a 4.3-BSD style `struct direct'). + +Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH +when configuring and building bash. This will ensure that you +use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you +link with libc before libucb. + +If you have installed the Sun C compiler, you may also need to +put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before +/usr/ucb. + +F3) Why does bash dump core after I interrupt username completion or + `~user' tilde expansion on a machine running NIS? + +This is a famous and long-standing bug in the SunOS YP (sorry, NIS) +client library, which is part of libc. + +The YP library code keeps static state -- a pointer into the data +returned from the server. When YP initializes itself (setpwent), +it looks at this pointer and calls free on it if it's non-null. +So far, so good. + +If one of the YP functions is interrupted during getpwent (the +exact function is interpretwithsave()), and returns NULL, the +pointer is freed without being reset to NULL, and the function +returns. The next time getpwent is called, it sees that this +pointer is non-null, calls free, and the bash free() blows up +because it's being asked to free freed memory. + +The traditional Unix mallocs allow memory to be freed multiple +times; that's probably why this has never been fixed. You can +run configure with the `--without-gnu-malloc' option to use +the C library malloc and avoid the problem. + +F4) I'm running SVR4.2. Why is the line erased every time I type `@'? + +The `@' character is the default `line kill' character in most +versions of System V, including SVR4.2. You can change this +character to whatever you want using `stty'. For example, to +change the line kill character to control-u, type + + stty kill ^U + +where the `^' and `U' can be two separate characters. + +F5) Why does bash report syntax errors when my C News scripts use a + redirection before a subshell command? + +The actual command in question is something like + + < file ( command ) + +According to the grammar given in the POSIX.2 standard, this construct +is, in fact, a syntax error. Redirections may only precede `simple +commands'. A subshell construct such as the above is one of the shell's +`compound commands'. A redirection may only follow a compound command. + +This affects the mechanical transformation of commands that use `cat' +to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on +comp.unix.shell). While most commands of the form + + cat file | command + +can be converted to `< file command', shell control structures such as +loops and subshells require `command < file'. + +The file CWRU/sh-redir-hack in the bash-2.05a distribution is an +(unofficial) patch to parse.y that will modify the grammar to +support this construct. It will not apply with `patch'; you must +modify parse.y by hand. Note that if you apply this, you must +recompile with -DREDIRECTION_HACK. This introduces a large +number of reduce/reduce conflicts into the shell grammar. + +F6) Why can't I use vi-mode editing on Red Hat Linux 6.1? + +The short answer is that Red Hat screwed up. + +The long answer is that they shipped an /etc/inputrc that only works +for emacs mode editing, and then screwed all the vi users by setting +INPUTRC to /etc/inputrc in /etc/profile. + +The short fix is to do one of the following: remove or rename +/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile, +but make sure you export it if you do), remove the assignment to +INPUTRC from /etc/profile, add + + set keymap emacs + +to the beginning of /etc/inputrc, or bracket the key bindings in +/etc/inputrc with these lines + + $if mode=emacs + [...] + $endif + +F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on + HP/UX 11.x? + +HP/UX's support for long double is imperfect at best. + +GCC will support it without problems, but the HP C library functions +like strtold(3) and printf(3) don't actually work with long doubles. +HP implemented a `long_double' type as a 4-element array of 32-bit +ints, and that is what the library functions use. The ANSI C +`long double' type is a 128-bit floating point scalar. + +The easiest fix, until HP fixes things up, is to edit the generated +config.h and #undef the HAVE_LONG_DOUBLE line. After doing that, +the compilation should complete successfully. + +Section G: How can I get bash to do certain common things? + +G1) How can I get bash to read and display eight-bit characters? + +This is a process requiring several steps. + +First, you must ensure that the `physical' data path is a full eight +bits. For xterms, for example, the `vt100' resources `eightBitInput' +and `eightBitOutput' should be set to `true'. + +Once you have set up an eight-bit path, you must tell the kernel and +tty driver to leave the eighth bit of characters alone when processing +keyboard input. Use `stty' to do this: + + stty cs8 -istrip -parenb + +For old BSD-style systems, you can use + + stty pass8 + +You may also need + + stty even odd + +Finally, you need to tell readline that you will be inputting and +displaying eight-bit characters. You use readline variables to do +this. These variables can be set in your .inputrc or using the bash +`bind' builtin. Here's an example using `bind': + + bash$ bind 'set convert-meta off' + bash$ bind 'set meta-flag on' + bash$ bind 'set output-meta on' + +The `set' commands between the single quotes may also be placed +in ~/.inputrc. + +G2) How do I write a function `x' to replace builtin command `x', but + still invoke the command from within the function? + +This is why the `command' and `builtin' builtins exist. The +`command' builtin executes the command supplied as its first +argument, skipping over any function defined with that name. The +`builtin' builtin executes the builtin command given as its first +argument directly. + +For example, to write a function to replace `cd' that writes the +hostname and current directory to an xterm title bar, use +something like the following: + + cd() + { + builtin cd "$@" && xtitle "$HOST: $PWD" + } + +This could also be written using `command' instead of `builtin'; +the version above is marginally more efficient. + +G3) How can I find the value of a shell variable whose name is the value + of another shell variable? + +Versions of Bash newer than Bash-2.0 support this directly. You can use + + ${!var} + +For example, the following sequence of commands will echo `z': + + var1=var2 + var2=z + echo ${!var1} + +For sh compatibility, use the `eval' builtin. The important +thing to remember is that `eval' expands the arguments you give +it again, so you need to quote the parts of the arguments that +you want `eval' to act on. + +For example, this expression prints the value of the last positional +parameter: + + eval echo \"\$\{$#\}\" + +The expansion of the quoted portions of this expression will be +deferred until `eval' runs, while the `$#' will be expanded +before `eval' is executed. In versions of bash later than bash-2.0, + + echo ${!#} + +does the same thing. + +This is not the same thing as ksh93 `nameref' variables, though the syntax +is similar. I may add namerefs in a future bash version. + +G4) How can I make the bash `time' reserved word print timing output that + looks like the output from my system's /usr/bin/time? + +The bash command timing code looks for a variable `TIMEFORMAT' and +uses its value as a format string to decide how to display the +timing statistics. + +The value of TIMEFORMAT is a string with `%' escapes expanded in a +fashion similar in spirit to printf(3). The manual page explains +the meanings of the escape sequences in the format string. + +If TIMEFORMAT is not set, bash acts as if the following assignment had +been performed: + + TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' + +The POSIX.2 default time format (used by `time -p command') is + + TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S' + +The BSD /usr/bin/time format can be emulated with: + + TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys' + +The System V /usr/bin/time format can be emulated with: + + TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S' + +The ksh format can be emulated with: + + TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS' + +G5) How do I get the current directory into my prompt? + +Bash provides a number of backslash-escape sequences which are expanded +when the prompt string (PS1 or PS2) is displayed. The full list is in +the manual page. + +The \w expansion gives the full pathname of the current directory, with +a tilde (`~') substituted for the current value of $HOME. The \W +expansion gives the basename of the current directory. To put the full +pathname of the current directory into the path without any tilde +subsitution, use $PWD. Here are some examples: + + PS1='\w$ ' # current directory with tilde + PS1='\W$ ' # basename of current directory + PS1='$PWD$ ' # full pathname of current directory + +The single quotes are important in the final example to prevent $PWD from +being expanded when the assignment to PS1 is performed. + +G6) How can I rename "*.foo" to "*.bar"? + +Use the pattern removal functionality described in D3. The following `for' +loop will do the trick: + + for f in *.foo; do + mv $f ${f%foo}bar + done + +G7) How can I translate a filename from uppercase to lowercase? + +The script examples/functions/lowercase, originally written by John DuBois, +will do the trick. The converse is left as an exercise. + +G8) How can I write a filename expansion (globbing) pattern that will match + all files in the current directory except "." and ".."? + +You must have set the `extglob' shell option using `shopt -s extglob' to use +this: + + echo .!(.|) * + +A solution that works without extended globbing is given in the Unix Shell +FAQ, posted periodically to comp.unix.shell. + +Section H: Where do I go from here? + +H1) How do I report bugs in bash, and where should I look for fixes and + advice? + +Use the `bashbug' script to report bugs. It is built and +installed at the same time as bash. It provides a standard +template for reporting a problem and automatically includes +information about your configuration and build environment. + +`bashbug' sends its reports to bug-bash@gnu.org, which +is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. + +Bug fixes, answers to questions, and announcements of new releases +are all posted to gnu.bash.bug. Discussions concerning bash features +and problems also take place there. + +To reach the bash maintainers directly, send mail to +bash-maintainers@gnu.org. + +H2) What kind of bash documentation is there? + +First, look in the doc directory in the bash distribution. It should +contain at least the following files: + +bash.1 an extensive, thorough Unix-style manual page +builtins.1 a manual page covering just bash builtin commands +bashref.texi a reference manual in GNU tex`info format +bashref.info an info version of the reference manual +FAQ this file +article.ms text of an article written for The Linux Journal +readline.3 a man page describing readline + +Postscript, HTML, and ASCII files created from the above source are +available in the documentation distribution. + +There is additional documentation available for anonymous FTP from host +ftp.cwru.edu in the `pub/bash' directory. + +Cameron Newham and Bill Rosenblatt have written a book on bash, published +by O'Reilly and Associates. The book is based on Bill Rosenblatt's Korn +Shell book. The title is ``Learning the Bash Shell'', and the ISBN number +is 1-56592-147-X. Look for it in fine bookstores near you. This book +covers bash-1.14, but has an appendix describing some of the new features +in bash-2.0. + +A second edition of this book is available, published in January, 1998. +The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores +or on the web. + +The GNU Bash Reference Manual has been published as a printed book by +Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers +bash-2.0 and is available from most online bookstores (see +http://www.network-theory.co.uk/bash/manual/ for details). The publisher +will donate $1 to the Free Software Foundation for each copy sold. + +H3) What's coming in future versions? + +These are features I hope to include in a future version of bash. + +a better bash debugger (a minimally-tested version is included with bash-2.05b) +associative arrays +co-processes, but with a new-style syntax that looks like function declaration + +H4) What's on the bash `wish list' for future versions? + +These are features that may or may not appear in a future version of bash. + +breaking some of the shell functionality into embeddable libraries +a module system like zsh's, using dynamic loading like builtins +better internationalization using GNU `gettext' +date-stamped command history +a bash programmer's guide with a chapter on creating loadable builtins +a better loadable interface to perl with access to the shell builtins and + variables (contributions gratefully accepted) +ksh93-like `nameref' variables +ksh93-like `+=' variable assignment operator +ksh93-like `xx.yy' variables (including some of the .sh.* variables) and + associated disipline functions +Some of the new ksh93 pattern matching operators, like backreferencing + +H5) When will the next release appear? + +The next version will appear sometime in 2002. Never make predictions. + + +This document is Copyright 1995-2003 by Chester Ramey. + +Permission is hereby granted, without written agreement and +without license or royalty fees, to use, copy, and distribute +this document for any purpose, provided that the above copyright +notice appears in all copies of this document and that the +contents of this document remain unaltered. diff --git a/doc/bash.1.orig b/doc/bash.1.orig new file mode 100644 index 00000000..828ec966 --- /dev/null +++ b/doc/bash.1.orig @@ -0,0 +1,8583 @@ +.\" +.\" MAN PAGE COMMENTS to +.\" +.\" Chet Ramey +.\" Information Network Services +.\" Case Western Reserve University +.\" chet@po.CWRU.Edu +.\" +.\" Last Change: Mon Apr 14 17:57:24 EDT 2003 +.\" +.\" bash_builtins, strip all but Built-Ins section +.if \n(zZ=1 .ig zZ +.if \n(zY=1 .ig zY +.TH BASH 1 "2003 April 14" "GNU Bash-3.0" +.\" +.\" There's some problem with having a `@' +.\" in a tagged paragraph with the BSD man macros. +.\" It has to do with `@' appearing in the }1 macro. +.\" This is a problem on 4.3 BSD and Ultrix, but Sun +.\" appears to have fixed it. +.\" If you're seeing the characters +.\" `@u-3p' appearing before the lines reading +.\" `possible-hostname-completions +.\" and `complete-hostname' down in READLINE, +.\" then uncomment this redefinition. +.\" +.de }1 +.ds ]X \&\\*(]B\\ +.nr )E 0 +.if !"\\$1"" .nr )I \\$1n +.}f +.ll \\n(LLu +.in \\n()Ru+\\n(INu+\\n()Iu +.ti \\n(INu +.ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X +.br\} +.el \\*(]X\h|\\n()Iu+\\n()Ru\c +.}f +.. +.\" +.\" File Name macro. This used to be `.PN', for Path Name, +.\" but Sun doesn't seem to like that very much. +.\" +.de FN +\fI\|\\$1\|\fP +.. +.SH NAME +bash \- GNU Bourne-Again SHell +.SH SYNOPSIS +.B bash +[options] +[file] +.SH COPYRIGHT +.if n Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc. +.if t Bash is Copyright \(co 1989-2002 by the Free Software Foundation, Inc. +.SH DESCRIPTION +.B Bash +is an \fBsh\fR-compatible command language interpreter that +executes commands read from the standard input or from a file. +.B Bash +also incorporates useful features from the \fIKorn\fP and \fIC\fP +shells (\fBksh\fP and \fBcsh\fP). +.PP +.B Bash +is intended to be a conformant implementation of the IEEE +POSIX Shell and Tools specification (IEEE Working Group 1003\.2). +.SH OPTIONS +In addition to the single-character shell options documented in the +description of the \fBset\fR builtin command, \fBbash\fR +interprets the following options when it is invoked: +.PP +.PD 0 +.TP 10 +.BI \-c "\| string\^" +If the +.B \-c +option is present, then commands are read from +.IR string . +If there are arguments after the +.IR string , +they are assigned to the positional parameters, starting with +.BR $0 . +.TP +.B \-i +If the +.B \-i +option is present, the shell is +.IR interactive . +.TP +.B \-l +Make +.B bash +act as if it had been invoked as a login shell (see +.SM +.B INVOCATION +below). +.TP +.B \-r +If the +.B \-r +option is present, the shell becomes +.I restricted +(see +.SM +.B "RESTRICTED SHELL" +below). +.TP +.B \-s +If the +.B \-s +option is present, or if no arguments remain after option +processing, then commands are read from the standard input. +This option allows the positional parameters to be set +when invoking an interactive shell. +.TP +.B \-D +A list of all double-quoted strings preceded by \fB$\fP +is printed on the standard ouput. +These are the strings that +are subject to language translation when the current locale +is not \fBC\fP or \fBPOSIX\fP. +This implies the \fB\-n\fP option; no commands will be executed. +.TP +.B [\-+]O [\fIshopt_option\fP] +\fIshopt_option\fP is one of the shell options accepted by the +\fBshopt\fP builtin (see +.SM +.B SHELL BUILTIN COMMANDS +below). +If \fIshopt_option\fP is present, \fB\-O\fP sets the value of that option; +\fB+O\fP unsets it. +If \fIshopt_option\fP is not supplied, the names and values of the shell +options accepted by \fBshopt\fP are printed on the standard output. +If the invocation option is \fB+O\fP, the output is displayed in a format +that may be reused as input. +.TP +.B \-\- +A +.B \-\- +signals the end of options and disables further option processing. +Any arguments after the +.B \-\- +are treated as filenames and arguments. An argument of +.B \- +is equivalent to \fB\-\-\fP. +.PD +.PP +.B Bash +also interprets a number of multi-character options. +These options must appear on the command line before the +single-character options to be recognized. +.PP +.PD 0 +.TP +.B \-\-debugger +Arrange for the debugger profile to be executed before the shell +starts. Turns on extended debugging mode (see the description of the +.B extdebug +option to the +.B shopt +builtin below) and shell function tracing (see the description of the +\fB\-o functrace\fP option to the +.B set +builtin below). +.TP +.B \-\-dump\-po\-strings +Equivalent to \fB\-D\fP, but the output is in the GNU \fIgettext\fP +\fBpo\fP (portable object) file format. +.TP +.B \-\-dump\-strings +Equivalent to \fB\-D\fP. +.TP +.B \-\-help +Display a usage message on standard output and exit successfully. +.TP +\fB\-\-init\-file\fP \fIfile\fP +.PD 0 +.TP +\fB\-\-rcfile\fP \fIfile\fP +.PD +Execute commands from +.I file +instead of the standard personal initialization file +.I ~/.bashrc +if the shell is interactive (see +.SM +.B INVOCATION +below). +.TP +.B \-\-login +Equivalent to \fB\-l\fP. +.TP +.B \-\-noediting +Do not use the GNU +.B readline +library to read command lines when the shell is interactive. +.TP +.B \-\-noprofile +Do not read either the system-wide startup file +.FN /etc/profile +or any of the personal initialization files +.IR ~/.bash_profile , +.IR ~/.bash_login , +or +.IR ~/.profile . +By default, +.B bash +reads these files when it is invoked as a login shell (see +.SM +.B INVOCATION +below). +.TP +.B \-\-norc +Do not read and execute the personal initialization file +.I ~/.bashrc +if the shell is interactive. +This option is on by default if the shell is invoked as +.BR sh . +.TP +.B \-\-posix +Change the behavior of \fBbash\fP where the default operation differs +from the POSIX 1003.2 standard to match the standard (\fIposix mode\fP). +.TP +.B \-\-restricted +The shell becomes restricted (see +.SM +.B "RESTRICTED SHELL" +below). +.TP +.B \-\-verbose +Equivalent to \fB\-v\fP. +.TP +.B \-\-version +Show version information for this instance of +.B bash +on the standard output and exit successfully. +.PD +.SH ARGUMENTS +If arguments remain after option processing, and neither the +.B \-c +nor the +.B \-s +option has been supplied, the first argument is assumed to +be the name of a file containing shell commands. +If +.B bash +is invoked in this fashion, +.B $0 +is set to the name of the file, and the positional parameters +are set to the remaining arguments. +.B Bash +reads and executes commands from this file, then exits. +\fBBash\fP's exit status is the exit status of the last command +executed in the script. +If no commands are executed, the exit status is 0. +An attempt is first made to open the file in the current directory, and, +if no file is found, then the shell searches the directories in +.SM +.B PATH +for the script. +.SH INVOCATION +A \fIlogin shell\fP is one whose first character of argument zero is a +.BR \- , +or one started with the +.B \-\-login +option. +.PP +An \fIinteractive\fP shell is one started without non-option arguments +and without the +.B \-c +option +whose standard input and output are +both connected to terminals (as determined by +.IR isatty (3)), +or one started with the +.B \-i +option. +.SM +.B PS1 +is set and +.B $\- +includes +.B i +if +.B bash +is interactive, +allowing a shell script or a startup file to test this state. +.PP +The following paragraphs describe how +.B bash +executes its startup files. +If any of the files exist but cannot be read, +.B bash +reports an error. +Tildes are expanded in file names as described below under +.B "Tilde Expansion" +in the +.SM +.B EXPANSION +section. +.PP +When +.B bash +is invoked as an interactive login shell, or as a non-interactive shell +with the \fB\-\-login\fP option, it first reads and +executes commands from the file \fI/etc/profile\fP, if that +file exists. +After reading that file, it looks for \fI~/.bash_profile\fP, +\fI~/.bash_login\fP, and \fI~/.profile\fP, in that order, and reads +and executes commands from the first one that exists and is readable. +The +.B \-\-noprofile +option may be used when the shell is started to inhibit this behavior. +.PP +When a login shell exits, +.B bash +reads and executes commands from the file \fI~/.bash_logout\fP, if it +exists. +.PP +When an interactive shell that is not a login shell is started, +.B bash +reads and executes commands from \fI~/.bashrc\fP, if that file exists. +This may be inhibited by using the +.B \-\-norc +option. +The \fB\-\-rcfile\fP \fIfile\fP option will force +.B bash +to read and execute commands from \fIfile\fP instead of \fI~/.bashrc\fP. +.PP +When +.B bash +is started non-interactively, to run a shell script, for example, it +looks for the variable +.SM +.B BASH_ENV +in the environment, expands its value if it appears there, and uses the +expanded value as the name of a file to read and execute. +.B Bash +behaves as if the following command were executed: +.sp .5 +.RS +.if t \f(CWif [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi\fP +.if n if [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi +.RE +.sp .5 +but the value of the +.SM +.B PATH +variable is not used to search for the file name. +.PP +If +.B bash +is invoked with the name +.BR sh , +it tries to mimic the startup behavior of historical versions of +.B sh +as closely as possible, +while conforming to the POSIX standard as well. +When invoked as an interactive login shell, or a non-interactive +shell with the \fB\-\-login\fP option, it first attempts to +read and execute commands from +.I /etc/profile +and +.IR ~/.profile , +in that order. +The +.B \-\-noprofile +option may be used to inhibit this behavior. +When invoked as an interactive shell with the name +.BR sh , +.B bash +looks for the variable +.SM +.BR ENV , +expands its value if it is defined, and uses the +expanded value as the name of a file to read and execute. +Since a shell invoked as +.B sh +does not attempt to read and execute commands from any other startup +files, the +.B \-\-rcfile +option has no effect. +A non-interactive shell invoked with the name +.B sh +does not attempt to read any other startup files. +When invoked as +.BR sh , +.B bash +enters +.I posix +mode after the startup files are read. +.PP +When +.B bash +is started in +.I posix +mode, as with the +.B \-\-posix +command line option, it follows the POSIX standard for startup files. +In this mode, interactive shells expand the +.SM +.B ENV +variable and commands are read and executed from the file +whose name is the expanded value. +No other startup files are read. +.PP +.B Bash +attempts to determine when it is being run by the remote shell +daemon, usually \fIrshd\fP. +If +.B bash +determines it is being run by \fIrshd\fP, it reads and executes +commands from \fI~/.bashrc\fP, if that file exists and is readable. +It will not do this if invoked as \fBsh\fP. +The +.B \-\-norc +option may be used to inhibit this behavior, and the +.B \-\-rcfile +option may be used to force another file to be read, but +\fIrshd\fP does not generally invoke the shell with those options +or allow them to be specified. +.PP +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the \fB\-p\fP option is not supplied, no startup +files are read, shell functions are not inherited from the environment, the +.SM +.B SHELLOPTS +variable, if it appears in the environment, is ignored, +and the effective user id is set to the real user id. +If the \fB\-p\fP option is supplied at invocation, the startup behavior is +the same, but the effective user id is not reset. +.SH DEFINITIONS +.PP +The following definitions are used throughout the rest of this +document. +.PD 0 +.TP +.B blank +A space or tab. +.TP +.B word +A sequence of characters considered as a single unit by the shell. +Also known as a +.BR token . +.TP +.B name +A +.I word +consisting only of alphanumeric characters and underscores, and +beginning with an alphabetic character or an underscore. Also +referred to as an +.BR identifier . +.TP +.B metacharacter +A character that, when unquoted, separates words. One of the following: +.br +.RS +.PP +.if t \fB| & ; ( ) < > space tab\fP +.if n \fB| & ; ( ) < > space tab\fP +.RE +.PP +.TP +.B control operator +A \fItoken\fP that performs a control function. It is one of the following +symbols: +.RS +.PP +.if t \fB\(bv\(bv & && ; ;; ( ) | <newline>\fP +.if n \fB|| & && ; ;; ( ) | <newline>\fP +.RE +.PD +.SH "RESERVED WORDS" +\fIReserved words\fP are words that have a special meaning to the shell. +The following words are recognized as reserved when unquoted and either +the first word of a simple command (see +.SM +.B SHELL GRAMMAR +below) or the third word of a +.B case +or +.B for +command: +.if t .RS +.PP +.B +.if n ! case do done elif else esac fi for function if in select then until while { } time [[ ]] +.if t ! case do done elif else esac fi for function if in select then until while { } time [[ ]] +.if t .RE +.RE +.SH "SHELL GRAMMAR" +.SS Simple Commands +.PP +A \fIsimple command\fP is a sequence of optional variable assignments +followed by \fBblank\fP-separated words and redirections, and +terminated by a \fIcontrol operator\fP. The first word +specifies the command to be executed, and is passed as argument zero. +The remaining words are passed as arguments to the invoked command. +.PP +The return value of a \fIsimple command\fP is its exit status, or +128+\fIn\^\fP if the command is terminated by signal +.IR n . +.SS Pipelines +.PP +A \fIpipeline\fP is a sequence of one or more commands separated by +the character +.BR | . +The format for a pipeline is: +.RS +.PP +[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ \fB|\fP \fIcommand2\fP ... ] +.RE +.PP +The standard output of +.I command +is connected via a pipe to the standard input of +.IR command2 . +This connection is performed before any redirections specified by the +command (see +.SM +.B REDIRECTION +below). +.PP +If the reserved word +.B ! +precedes a pipeline, the exit status of that +pipeline is the logical NOT of the exit status of the last command. +Otherwise, the status of the pipeline is the exit status of the last +command. +The shell waits for all commands in the pipeline to +terminate before returning a value. +.PP +If the +.B time +reserved word precedes a pipeline, the elapsed as well as user and +system time consumed by its execution are reported when the pipeline +terminates. +The \fB\-p\fP option changes the output format to that specified by POSIX. +The +.SM +.B TIMEFORMAT +variable may be set to a format string that specifies how the timing +information should be displayed; see the description of +.SM +.B TIMEFORMAT +under +.B "Shell Variables" +below. +.PP +Each command in a pipeline is executed as a separate process (i.e., in a +subshell). +.SS Lists +.PP +A \fIlist\fP is a sequence of one or more pipelines separated by one +of the operators +.BR ; , +.BR & , +.BR && , +or +.BR \(bv\(bv , +and optionally terminated by one of +.BR ; , +.BR & , +or +.BR <newline> . +.PP +Of these list operators, +.B && +and +.B \(bv\(bv +have equal precedence, followed by +.B ; +and +.BR &, +which have equal precedence. +.PP +A sequence of one or more newlines may appear in a \fIlist\fP instead +of a semicolon to delimit commands. +.PP +If a command is terminated by the control operator +.BR & , +the shell executes the command in the \fIbackground\fP +in a subshell. The shell does not wait for the command to +finish, and the return status is 0. Commands separated by a +.B ; +are executed sequentially; the shell waits for each +command to terminate in turn. The return status is the +exit status of the last command executed. +.PP +The control operators +.B && +and +.B \(bv\(bv +denote AND lists and OR lists, respectively. +An AND list has the form +.RS +.PP +\fIcommand1\fP \fB&&\fP \fIcommand2\fP +.RE +.PP +.I command2 +is executed if, and only if, +.I command1 +returns an exit status of zero. +.PP +An OR list has the form +.RS +.PP +\fIcommand1\fP \fB\(bv\(bv\fP \fIcommand2\fP +.PP +.RE +.PP +.I command2 +is executed if and only if +.I command1 +returns a non-zero exit status. The return status of +AND and OR lists is the exit status of the last command +executed in the list. +.SS Compound Commands +.PP +A \fIcompound command\fP is one of the following: +.TP +(\fIlist\fP) +\fIlist\fP is executed in a subshell. Variable assignments and builtin +commands that affect the shell's environment do not remain in effect +after the command completes. The return status is the exit status of +\fIlist\fP. +.TP +{ \fIlist\fP; } +\fIlist\fP is simply executed in the current shell environment. +\fIlist\fP must be terminated with a newline or semicolon. +This is known as a \fIgroup command\fP. +The return status is the exit status of +\fIlist\fP. +Note that unlike the metacharacters \fB(\fP and \fB)\fP, \fB{\fP and +\fB}\fP are \fIreserved words\fP and must occur where a reserved +word is permitted to be recognized. Since they do not cause a word +break, they must be separated from \fIlist\fP by whitespace. +.TP +((\fIexpression\fP)) +The \fIexpression\fP is evaluated according to the rules described +below under +.SM +.BR "ARITHMETIC EVALUATION" . +If the value of the expression is non-zero, the return status is 0; +otherwise the return status is 1. This is exactly equivalent to +\fBlet "\fIexpression\fP"\fR. +.TP +\fB[[\fP \fIexpression\fP \fB]]\fP +Return a status of 0 or 1 depending on the evaluation of +the conditional expression \fIexpression\fP. +Expressions are composed of the primaries described below under +.SM +.BR "CONDITIONAL EXPRESSIONS" . +Word splitting and pathname expansion are not performed on the words +between the \fB[[\fP and \fB]]\fP; tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal are performed. +Conditional operators such as \fB\-f\fP must be unquoted to be recognized +as primaries. +.if t .sp 0.5 +.if n .sp 1 +When the \fB==\fP and \fB!=\fP operators are used, the string to the +right of the operator is considered a pattern and matched according +to the rules described below under \fBPattern Matching\fP. +The return value is 0 if the string matches or does not match +the pattern, respectively, and 1 otherwise. +Any part of the pattern may be quoted to force it to be matched as a +string. +.if t .sp 0.5 +.if n .sp 1 +Expressions may be combined using the following operators, listed +in decreasing order of precedence: +.if t .sp 0.5 +.if n .sp 1 +.RS +.PD 0 +.TP +.B ( \fIexpression\fP ) +Returns the value of \fIexpression\fP. +This may be used to override the normal precedence of operators. +.TP +.B ! \fIexpression\fP +True if +.I expression +is false. +.TP +\fIexpression1\fP \fB&&\fP \fIexpression2\fP +True if both +.I expression1 +and +.I expression2 +are true. +.TP +.if t \fIexpression1\fP \fB\(bv\(bv\fP \fIexpression2\fP +.if n \fIexpression1\fP \fB||\fP \fIexpression2\fP +True if either +.I expression1 +or +.I expression2 +is true. +.PD +.LP +The \fB&&\fP and +.if t \fB\(bv\(bv\fP +.if n \fB||\fP +operators do not evaluate \fIexpression2\fP if the value of +\fIexpression1\fP is sufficient to determine the return value of +the entire conditional expression. +.RE +.TP +\fBfor\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP +The list of words following \fBin\fP is expanded, generating a list +of items. +The variable \fIname\fP is set to each element of this list +in turn, and \fIlist\fP is executed each time. +If the \fBin\fP \fIword\fP is omitted, the \fBfor\fP command executes +\fIlist\fP once for each positional parameter that is set (see +.SM +.B PARAMETERS +below). +The return status is the exit status of the last command that executes. +If the expansion of the items following \fBin\fP results in an empty +list, no commands are executed, and the return status is 0. +.TP +\fBfor\fP (( \fIexpr1\fP ; \fIexpr2\fP ; \fIexpr3\fP )) ; \fBdo\fP \fIlist\fP ; \fBdone\fP +First, the arithmetic expression \fIexpr1\fP is evaluated according +to the rules described below under +.SM +.BR "ARITHMETIC EVALUATION" . +The arithmetic expression \fIexpr2\fP is then evaluated repeatedly +until it evaluates to zero. +Each time \fIexpr2\fP evaluates to a non-zero value, \fIlist\fP is +executed and the arithmetic expression \fIexpr3\fP is evaluated. +If any expression is omitted, it behaves as if it evaluates to 1. +The return value is the exit status of the last command in \fIlist\fP +that is executed, or false if any of the expressions is invalid. +.TP +\fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP +The list of words following \fBin\fP is expanded, generating a list +of items. The set of expanded words is printed on the standard +error, each preceded by a number. If the \fBin\fP +\fIword\fP is omitted, the positional parameters are printed (see +.SM +.B PARAMETERS +below). The +.B PS3 +prompt is then displayed and a line read from the standard input. +If the line consists of a number corresponding to one of +the displayed words, then the value of +.I name +is set to that word. If the line is empty, the words and prompt +are displayed again. If EOF is read, the command completes. Any +other value read causes +.I name +to be set to null. The line read is saved in the variable +.BR REPLY . +The +.I list +is executed after each selection until a +.B break +command is executed. +The exit status of +.B select +is the exit status of the last command executed in +.IR list , +or zero if no commands were executed. +.TP +\fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] \ +... ) \fIlist\fP ;; ] ... \fBesac\fP +A \fBcase\fP command first expands \fIword\fP, and tries to match +it against each \fIpattern\fP in turn, using the same matching rules +as for pathname expansion (see +.B Pathname Expansion +below). When a match is found, the +corresponding \fIlist\fP is executed. After the first match, no +subsequent matches are attempted. The exit status is zero if no +pattern matches. Otherwise, it is the exit status of the +last command executed in \fIlist\fP. +.TP +\fBif\fP \fIlist\fP; \fBthen\fP \fIlist;\fP \ +[ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] ... \ +[ \fBelse\fP \fIlist\fP; ] \fBfi\fP +The +.B if +.I list +is executed. If its exit status is zero, the +\fBthen\fP \fIlist\fP is executed. Otherwise, each \fBelif\fP +\fIlist\fP is executed in turn, and if its exit status is zero, +the corresponding \fBthen\fP \fIlist\fP is executed and the +command completes. Otherwise, the \fBelse\fP \fIlist\fP is +executed, if present. The exit status is the exit status of the +last command executed, or zero if no condition tested true. +.TP +\fBwhile\fP \fIlist\fP; \fBdo\fP \fIlist\fP; \fBdone\fP +.PD 0 +.TP +\fBuntil\fP \fIlist\fP; \fBdo\fP \fIlist\fP; \fBdone\fP +.PD +The \fBwhile\fP command continuously executes the \fBdo\fP +\fIlist\fP as long as the last command in \fIlist\fP returns +an exit status of zero. The \fBuntil\fP command is identical +to the \fBwhile\fP command, except that the test is negated; +the +.B do +.I list +is executed as long as the last command in +.I list +returns a non-zero exit status. +The exit status of the \fBwhile\fP and \fBuntil\fP commands +is the exit status +of the last \fBdo\fP \fIlist\fP command executed, or zero if +none was executed. +.TP +[ \fBfunction\fP ] \fIname\fP () { \fIlist\fP; } +This defines a function named \fIname\fP. The \fIbody\fP of the +function is the +.I list +of commands between { and }. This list +is executed whenever \fIname\fP is specified as the +name of a simple command. The exit status of a function is +the exit status of the last command executed in the body. (See +.SM +.B FUNCTIONS +below.) +.SH COMMENTS +In a non-interactive shell, or an interactive shell in which the +.B interactive_comments +option to the +.B shopt +builtin is enabled (see +.SM +.B "SHELL BUILTIN COMMANDS" +below), a word beginning with +.B # +causes that word and all remaining characters on that line to +be ignored. An interactive shell without the +.B interactive_comments +option enabled does not allow comments. The +.B interactive_comments +option is on by default in interactive shells. +.SH QUOTING +\fIQuoting\fP is used to remove the special meaning of certain +characters or words to the shell. Quoting can be used to +disable special treatment for special characters, to prevent +reserved words from being recognized as such, and to prevent +parameter expansion. +.PP +Each of the \fImetacharacters\fP listed above under +.SM +.B DEFINITIONS +has special meaning to the shell and must be quoted if it is to +represent itself. +.PP +When the command history expansion facilities are being used, the +\fIhistory expansion\fP character, usually \fB!\fP, must be quoted +to prevent history expansion. +.PP +There are three quoting mechanisms: the +.IR "escape character" , +single quotes, and double quotes. +.PP +A non-quoted backslash (\fB\e\fP) is the +.IR "escape character" . +It preserves the literal value of the next character that follows, +with the exception of <newline>. If a \fB\e\fP<newline> pair +appears, and the backslash is not itself quoted, the \fB\e\fP<newline> +is treated as a line continuation (that is, it is removed from the +input stream and effectively ignored). +.PP +Enclosing characters in single quotes preserves the literal value +of each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a backslash. +.PP +Enclosing characters in double quotes preserves the literal value +of all characters within the quotes, with the exception of +.BR $ , +.BR ` , +and +.BR \e . +The characters +.B $ +and +.B ` +retain their special meaning within double quotes. The backslash +retains its special meaning only when followed by one of the following +characters: +.BR $ , +.BR ` , +\^\fB"\fP\^, +.BR \e , +or +.BR <newline> . +A double quote may be quoted within double quotes by preceding it with +a backslash. +When command history is being used, the double quote may not be used to +quote the history expansion character. +.PP +The special parameters +.B * +and +.B @ +have special meaning when in double +quotes (see +.SM +.B PARAMETERS +below). +.PP +Words of the form \fB$\fP'\fIstring\fP' are treated specially. The +word expands to \fIstring\fP, with backslash-escaped characters replaced +as specifed by the ANSI C standard. Backslash escape sequences, if +present, are decoded as follows: +.RS +.PD 0 +.TP +.B \ea +alert (bell) +.TP +.B \eb +backspace +.TP +.B \ee +an escape character +.TP +.B \ef +form feed +.TP +.B \en +new line +.TP +.B \er +carriage return +.TP +.B \et +horizontal tab +.TP +.B \ev +vertical tab +.TP +.B \e\e +backslash +.TP +.B \e' +single quote +.TP +.B \e\fInnn\fP +the eight-bit character whose value is the octal value \fInnn\fP +(one to three digits) +.TP +.B \ex\fIHH\fP +the eight-bit character whose value is the hexadecimal value \fIHH\fP +(one or two hex digits) +.TP +.B \ec\fIx\fP +a control-\fIx\fP character +.PD +.RE +.LP +The expanded result is single-quoted, as if the dollar sign had +not been present. +.PP +A double-quoted string preceded by a dollar sign (\fB$\fP) will cause +the string to be translated according to the current locale. +If the current locale is \fBC\fP or \fBPOSIX\fP, the dollar sign +is ignored. +If the string is translated and replaced, the replacement is +double-quoted. +.SH PARAMETERS +A +.I parameter +is an entity that stores values. +It can be a +.IR name , +a number, or one of the special characters listed below under +.BR "Special Parameters" . +A +.I variable +is a parameter denoted by a +.IR name . +A variable has a \fIvalue\fP and zero or more \fIattributes\fP. +Attributes are assigned using the +.B declare +builtin command (see +.B declare +below in +.SM +.BR "SHELL BUILTIN COMMANDS" ). +.PP +A parameter is set if it has been assigned a value. The null string is +a valid value. Once a variable is set, it may be unset only by using +the +.B unset +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.PP +A +.I variable +may be assigned to by a statement of the form +.RS +.PP +\fIname\fP=[\fIvalue\fP] +.RE +.PP +If +.I value +is not given, the variable is assigned the null string. All +.I values +undergo tilde expansion, parameter and variable expansion, +command substitution, arithmetic expansion, and quote +removal (see +.SM +.B EXPANSION +below). If the variable has its +.B integer +attribute set, then +.I value +is evaluated as an arithmetic expression even if the $((...)) expansion is +not used (see +.B "Arithmetic Expansion" +below). +Word splitting is not performed, with the exception +of \fB"$@"\fP as explained below under +.BR "Special Parameters" . +Pathname expansion is not performed. +Assignment statements may also appear as arguments to the +.BR declare , +.BR typeset , +.BR export , +.BR readonly , +and +.B local +builtin commands. +.SS Positional Parameters +.PP +A +.I positional parameter +is a parameter denoted by one or more +digits, other than the single digit 0. Positional parameters are +assigned from the shell's arguments when it is invoked, +and may be reassigned using the +.B set +builtin command. Positional parameters may not be assigned to +with assignment statements. The positional parameters are +temporarily replaced when a shell function is executed (see +.SM +.B FUNCTIONS +below). +.PP +When a positional parameter consisting of more than a single +digit is expanded, it must be enclosed in braces (see +.SM +.B EXPANSION +below). +.SS Special Parameters +.PP +The shell treats several parameters specially. These parameters may +only be referenced; assignment to them is not allowed. +.PD 0 +.TP +.B * +Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, it expands to a single word +with the value of each parameter separated by the first character +of the +.SM +.B IFS +special variable. That is, "\fB$*\fP" is equivalent +to "\fB$1\fP\fIc\fP\fB$2\fP\fIc\fP\fB...\fP", where +.I c +is the first character of the value of the +.SM +.B IFS +variable. If +.SM +.B IFS +is unset, the parameters are separated by spaces. +If +.SM +.B IFS +is null, the parameters are joined without intervening separators. +.TP +.B @ +Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, each parameter expands to a +separate word. That is, "\fB$@\fP" is equivalent to +"\fB$1\fP" "\fB$2\fP" ... +When there are no positional parameters, "\fB$@\fP" and +.B $@ +expand to nothing (i.e., they are removed). +.TP +.B # +Expands to the number of positional parameters in decimal. +.TP +.B ? +Expands to the status of the most recently executed foreground +pipeline. +.TP +.B \- +Expands to the current option flags as specified upon invocation, +by the +.B set +builtin command, or those set by the shell itself +(such as the +.B \-i +option). +.TP +.B $ +Expands to the process ID of the shell. In a () subshell, it +expands to the process ID of the current shell, not the +subshell. +.TP +.B ! +Expands to the process ID of the most recently executed background +(asynchronous) command. +.TP +.B 0 +Expands to the name of the shell or shell script. This is set at +shell initialization. If +.B bash +is invoked with a file of commands, +.B $0 +is set to the name of that file. If +.B bash +is started with the +.B \-c +option, then +.B $0 +is set to the first argument after the string to be +executed, if one is present. Otherwise, it is set +to the file name used to invoke +.BR bash , +as given by argument zero. +.TP +.B _ +At shell startup, set to the absolute file name of the shell or shell +script being executed as passed in the argument list. +Subsequently, expands to the last argument to the previous command, +after expansion. +Also set to the full file name of each command executed and placed in +the environment exported to that command. +When checking mail, this parameter holds the name of the mail file +currently being checked. +.PD +.SS Shell Variables +.PP +The following variables are set by the shell: +.PP +.PD 0 +.TP +.B BASH +Expands to the full file name used to invoke this instance of +.BR bash . +.TP +.B BASH_ARGC +An array variable whose values are the number of parameters in each +frame of the current bash execution call stack. The number of +parameters to the current subroutine (shell function or script executed +with \fB.\fP or \fBsource\fP) is at the top of the stack. When a +subroutine is executed, the number of parameters passed is pushed onto +\fBBASH_ARGC\fP. +.TP +.B BASH_ARGV +An array variable containing all of the parameters in the current bash +execution call stack. The final parameter of the last subroutine call +is at the top of the stack; the first parameter of the initial call is +at the bottom. When a subroutine is executed, the parameters supplied +are pushed onto \fBBASH_ARGV\fP. +.TP +.B BASH_COMMAND +The command currently being executed or about to be executed, unless the +shell is executing a command as the result of a trap, +in which case it is the command executing at the time of the trap. +.TP +.B BASH_EXECUTION_STRING +The command argument to the \fB\-c\fP invocation option. +.TP +.B BASH_LINENO +An array variable whose members are the line numbers in source files +corresponding to each member of @var{FUNCNAME}. +\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source +file where \fB${FUNCNAME[\fP\fI$i + 1\fP\fB]}\fP was called. +The corresponding source file name is \fB${BASH_SOURCE[\fP\fI$i + 1\fP\fB]}\fB. +Use \fBLINENO\fP to obtain the current line number. +.TP +.B BASH_SOURCE +An array variable whose members are the source filenames corresponding +to the elements in the \fBFUNCNAME\fP array variable. +.TP +.B BASH_SUBSHELL +Incremented by one each time a subshell or subshell environment is spawned. +The initial value is 0. +.TP +.B BASH_VERSINFO +A readonly array variable whose members hold version information for +this instance of +.BR bash . +The values assigned to the array members are as follows: +.sp .5 +.RS +.PD 0 +.TP 24 +.B BASH_VERSINFO[\fR0\fP] +The major version number (the \fIrelease\fP). +.TP +.B BASH_VERSINFO[\fR1\fP] +The minor version number (the \fIversion\fP). +.TP +.B BASH_VERSINFO[\fR2\fP] +The patch level. +.TP +.B BASH_VERSINFO[\fR3\fP] +The build version. +.TP +.B BASH_VERSINFO[\fR4\fP] +The release status (e.g., \fIbeta1\fP). +.TP +.B BASH_VERSINFO[\fR5\fP] +The value of \fBMACHTYPE\fP. +.PD +.RE +.TP +.B BASH_VERSION +Expands to a string describing the version of this instance of +.BR bash . +.TP +.B COMP_CWORD +An index into \fB${COMP_WORDS}\fP of the word containing the current +cursor position. +This variable is available only in shell functions invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B COMP_LINE +The current command line. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B COMP_POINT +The index of the current cursor position relative to the beginning of +the current command. +If the current cursor position is at the end of the current command, +the value of this variable is equal to \fB${#COMP_LINE}\fP. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B COMP_WORDBREAKS +The set of characters that the Readline library treats as word +separators when performing word completion. +If +.SM +.B COMP_WORDBREAKS +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B COMP_WORDS +An array variable (see \fBArrays\fP below) consisting of the individual +words in the current command line. +This variable is available only in shell functions invoked by the +programmable completion facilities (see \fBProgrammable Completion\fP +below). +.TP +.B DIRSTACK +An array variable (see +.B Arrays +below) containing the current contents of the directory stack. +Directories appear in the stack in the order they are displayed by the +.B dirs +builtin. +Assigning to members of this array variable may be used to modify +directories already in the stack, but the +.B pushd +and +.B popd +builtins must be used to add and remove directories. +Assignment to this variable will not change the current directory. +If +.SM +.B DIRSTACK +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B EUID +Expands to the effective user ID of the current user, initialized at +shell startup. This variable is readonly. +.TP +.B FUNCNAME +An array variable containing the names of all shell functions +currently in the execution call stack. +The element with index 0 is the name of any currently-executing +shell function. +The bottom-most element is "main". +This variable exists only when a shell function is executing. +Assignments to +.SM +.B FUNCNAME +have no effect and return an error status. +If +.SM +.B FUNCNAME +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B GROUPS +An array variable containing the list of groups of which the current +user is a member. +Assignments to +.SM +.B GROUPS +have no effect and return an error status. +If +.SM +.B GROUPS +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B HISTCMD +The history number, or index in the history list, of the current +command. +If +.SM +.B HISTCMD +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B HOSTNAME +Automatically set to the name of the current host. +.TP +.B HOSTTYPE +Automatically set to a string that uniquely +describes the type of machine on which +.B bash +is executing. +The default is system-dependent. +.TP +.B LINENO +Each time this parameter is referenced, the shell substitutes +a decimal number representing the current sequential line number +(starting with 1) within a script or function. When not in a +script or function, the value substituted is not guaranteed to +be meaningful. +If +.SM +.B LINENO +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B MACHTYPE +Automatically set to a string that fully describes the system +type on which +.B bash +is executing, in the standard GNU \fIcpu-company-system\fP format. +The default is system-dependent. +.TP +.B OLDPWD +The previous working directory as set by the +.B cd +command. +.TP +.B OPTARG +The value of the last option argument processed by the +.B getopts +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.TP +.B OPTIND +The index of the next argument to be processed by the +.B getopts +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.TP +.B OSTYPE +Automatically set to a string that +describes the operating system on which +.B bash +is executing. +The default is system-dependent. +.TP +.B PIPESTATUS +An array variable (see +.B Arrays +below) containing a list of exit status values from the processes +in the most-recently-executed foreground pipeline (which may +contain only a single command). +.TP +.B PPID +The process ID of the shell's parent. This variable is readonly. +.TP +.B PWD +The current working directory as set by the +.B cd +command. +.TP +.B RANDOM +Each time this parameter is referenced, a random integer between +0 and 32767 is +generated. The sequence of random numbers may be initialized by assigning +a value to +.SM +.BR RANDOM . +If +.SM +.B RANDOM +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B REPLY +Set to the line of input read by the +.B read +builtin command when no arguments are supplied. +.TP +.B SECONDS +Each time this parameter is +referenced, the number of seconds since shell invocation is returned. If a +value is assigned to +.SM +.BR SECONDS , +the value returned upon subsequent +references is +the number of seconds since the assignment plus the value assigned. +If +.SM +.B SECONDS +is unset, it loses its special properties, even if it is +subsequently reset. +.TP +.B SHELLOPTS +A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the +.B \-o +option to the +.B set +builtin command (see +.SM +.B "SHELL BUILTIN COMMANDS" +below). The options appearing in +.SM +.B SHELLOPTS +are those reported as +.I on +by \fBset \-o\fP. +If this variable is in the environment when +.B bash +starts up, each shell option in the list will be enabled before +reading any startup files. +This variable is read-only. +.TP +.B SHLVL +Incremented by one each time an instance of +.B bash +is started. +.TP +.B UID +Expands to the user ID of the current user, initialized at shell startup. +This variable is readonly. +.PD +.PP +The following variables are used by the shell. In some cases, +.B bash +assigns a default value to a variable; these cases are noted +below. +.PP +.PD 0 +.TP +.B BASH_ENV +If this parameter is set when \fBbash\fP is executing a shell script, +its value is interpreted as a filename containing commands to +initialize the shell, as in +.IR ~/.bashrc . +The value of +.SM +.B BASH_ENV +is subjected to parameter expansion, command substitution, and arithmetic +expansion before being interpreted as a file name. +.SM +.B PATH +is not used to search for the resultant file name. +.TP +.B CDPATH +The search path for the +.B cd +command. +This is a colon-separated list of directories in which the shell looks +for destination directories specified by the +.B cd +command. +A sample value is +.if t \f(CW".:~:/usr"\fP. +.if n ".:~:/usr". +.TP +.B COLUMNS +Used by the \fBselect\fP builtin command to determine the terminal width +when printing selection lists. Automatically set upon receipt of a SIGWINCH. +.TP +.B COMPREPLY +An array variable from which \fBbash\fP reads the possible completions +generated by a shell function invoked by the programmable completion +facility (see \fBProgrammable Completion\fP below). +.TP +.B EMACS +If \fBbash\fP finds this variable in the environment when the shell starts +with value +.if t \f(CWt\fP, +.if n "t", +it assumes that the shell is running in an emacs shell buffer and disables +line editing. +.TP +.B FCEDIT +The default editor for the +.B fc +builtin command. +.TP +.B FIGNORE +A colon-separated list of suffixes to ignore when performing +filename completion (see +.SM +.B READLINE +below). +A filename whose suffix matches one of the entries in +.SM +.B FIGNORE +is excluded from the list of matched filenames. +A sample value is +.if t \f(CW".o:~"\fP. +.if n ".o:~". +.TP +.B GLOBIGNORE +A colon-separated list of patterns defining the set of filenames to +be ignored by pathname expansion. +If a filename matched by a pathname expansion pattern also matches one +of the patterns in +.SM +.BR GLOBIGNORE , +it is removed from the list of matches. +.TP +.B HISTCONTROL +A colon-separated list of values controlling how commands are saved on +the history list. +If the list of values includes +.IR ignorespace , +lines which begin with a +.B space +character are not saved in the history list. +A value of +.I ignoredups +causes lines matching the previous history entry to not be saved. +A value of +.I ignoreboth +is shorthand for \fIignorespace\fP and \fIignoredups\fP. +A value of +.IR erasedups +causes all previous lines matching the current line to be removed from +the history list before that line is saved. +Any value not in the above list is ignored. +If \fBHISTCONTROL\fP is unset, or does not include a valid value, +all lines read by the shell parser are saved on the history list, +subject to the value of +.BR HISTIGNORE . +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +.BR HISTCONTROL . +.TP +.B HISTFILE +The name of the file in which command history is saved (see +.SM +.B HISTORY +below). The default value is \fI~/.bash_history\fP. If unset, the +command history is not saved when an interactive shell exits. +.TP +.B HISTFILESIZE +The maximum number of lines contained in the history file. When this +variable is assigned a value, the history file is truncated, if +necessary, to contain no more than that number of lines. The default +value is 500. The history file is also truncated to this size after +writing it when an interactive shell exits. +.TP +.B HISTIGNORE +A colon-separated list of patterns used to decide which command lines +should be saved on the history list. Each pattern is anchored at the +beginning of the line and must match the complete line (no implicit +`\fB*\fP' is appended). Each pattern is tested against the line +after the checks specified by +.B HISTCONTROL +are applied. +In addition to the normal shell pattern matching characters, `\fB&\fP' +matches the previous history line. `\fB&\fP' may be escaped using a +backslash; the backslash is removed before attempting a match. +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +.BR HISTIGNORE . +.TP +.B HISTSIZE +The number of commands to remember in the command history (see +.SM +.B HISTORY +below). The default value is 500. +.TP +.B HOME +The home directory of the current user; the default argument for the +\fBcd\fP builtin command. +The value of this variable is also used when performing tilde expansion. +.TP +.B HOSTFILE +Contains the name of a file in the same format as +.FN /etc/hosts +that should be read when the shell needs to complete a +hostname. +The list of possible hostname completions may be changed while the +shell is running; +the next time hostname completion is attempted after the +value is changed, +.B bash +adds the contents of the new file to the existing list. +If +.SM +.B HOSTFILE +is set, but has no value, \fBbash\fP attempts to read +.FN /etc/hosts +to obtain the list of possible hostname completions. +When +.SM +.B HOSTFILE +is unset, the hostname list is cleared. +.TP +.B IFS +The +.I Internal Field Separator +that is used +for word splitting after expansion and to +split lines into words with the +.B read +builtin command. The default value is +``<space><tab><newline>''. +.TP +.B IGNOREEOF +Controls the +action of an interactive shell on receipt of an +.SM +.B EOF +character as the sole input. If set, the value is the number of +consecutive +.SM +.B EOF +characters which must be +typed as the first characters on an input line before +.B bash +exits. If the variable exists but does not have a numeric value, or +has no value, the default value is 10. If it does not exist, +.SM +.B EOF +signifies the end of input to the shell. +.TP +.B INPUTRC +The filename for the +.B readline +startup file, overriding the default of +.FN ~/.inputrc +(see +.SM +.B READLINE +below). +.TP +.B LANG +Used to determine the locale category for any category not specifically +selected with a variable starting with \fBLC_\fP. +.TP +.B LC_ALL +This variable overrides the value of \fBLANG\fP and any other +\fBLC_\fP variable specifying a locale category. +.TP +.B LC_COLLATE +This variable determines the collation order used when sorting the +results of pathname expansion, and determines the behavior of range +expressions, equivalence classes, and collating sequences within +pathname expansion and pattern matching. +.TP +.B LC_CTYPE +This variable determines the interpretation of characters and the +behavior of character classes within pathname expansion and pattern +matching. +.TP +.B LC_MESSAGES +This variable determines the locale used to translate double-quoted +strings preceded by a \fB$\fP. +.TP +.B LC_NUMERIC +This variable determines the locale category used for number formatting. +.TP +.B LINES +Used by the \fBselect\fP builtin command to determine the column length +for printing selection lists. Automatically set upon receipt of a SIGWINCH. +.TP +.B MAIL +If this parameter is set to a file name and the +.SM +.B MAILPATH +variable is not set, +.B bash +informs the user of the arrival of mail in the specified file. +.TP +.B MAILCHECK +Specifies how +often (in seconds) +.B bash +checks for mail. The default is 60 seconds. When it is time to check +for mail, the shell does so before displaying the primary prompt. +If this variable is unset, or set to a value that is not a number +greater than or equal to zero, the shell disables mail checking. +.TP +.B MAILPATH +A colon-separated list of file names to be checked for mail. +The message to be printed when mail arrives in a particular file +may be specified by separating the file name from the message with a `?'. +When used in the text of the message, \fB$_\fP expands to the name of +the current mailfile. +Example: +.RS +.PP +\fBMAILPATH\fP='/var/mail/bfox?"You have mail":~/shell\-mail?"$_ has mail!"' +.PP +.B Bash +supplies a default value for this variable, but the location of the user +mail files that it uses is system dependent (e.g., /var/mail/\fB$USER\fP). +.RE +.TP +.B OPTERR +If set to the value 1, +.B bash +displays error messages generated by the +.B getopts +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.SM +.B OPTERR +is initialized to 1 each time the shell is invoked or a shell +script is executed. +.TP +.B PATH +The search path for commands. It +is a colon-separated list of directories in which +the shell looks for commands (see +.SM +.B COMMAND EXECUTION +below). +A zero-length (null) directory name in the value of \fBPATH\fP indicates the +current directory. +A null directory name may appear as two adjacent colons, or as an initial +or trailing colon. +The default path is system-dependent, +and is set by the administrator who installs +.BR bash . +A common value is +.if t \f(CW/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.\fP. +.if n ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''. +.TP +.B POSIXLY_CORRECT +If this variable is in the environment when \fBbash\fP starts, the shell +enters \fIposix mode\fP before reading the startup files, as if the +.B \-\-posix +invocation option had been supplied. If it is set while the shell is +running, \fBbash\fP enables \fIposix mode\fP, as if the command +.if t \f(CWset -o posix\fP +.if n \fIset -o posix\fP +had been executed. +.TP +.B PROMPT_COMMAND +If set, the value is executed as a command prior to issuing each primary +prompt. +.TP +.B PS1 +The value of this parameter is expanded (see +.SM +.B PROMPTING +below) and used as the primary prompt string. The default value is +``\fB\es\-\ev\e$ \fP''. +.TP +.B PS2 +The value of this parameter is expanded as with +.B PS1 +and used as the secondary prompt string. The default is +``\fB> \fP''. +.TP +.B PS3 +The value of this parameter is used as the prompt for the +.B select +command (see +.SM +.B SHELL GRAMMAR +above). +.TP +.B PS4 +The value of this parameter is expanded as with +.B PS1 +and the value is printed before each command +.B bash +displays during an execution trace. The first character of +.SM +.B PS4 +is replicated multiple times, as necessary, to indicate multiple +levels of indirection. The default is ``\fB+ \fP''. +.TP +.B TIMEFORMAT +The value of this parameter is used as a format string specifying +how the timing information for pipelines prefixed with the +.B time +reserved word should be displayed. +The \fB%\fP character introduces an escape sequence that is +expanded to a time value or other information. +The escape sequences and their meanings are as follows; the +braces denote optional portions. +.sp .5 +.RS +.PD 0 +.TP 10 +.B %% +A literal \fB%\fP. +.TP +.B %[\fIp\fP][l]R +The elapsed time in seconds. +.TP +.B %[\fIp\fP][l]U +The number of CPU seconds spent in user mode. +.TP +.B %[\fIp\fP][l]S +The number of CPU seconds spent in system mode. +.TP +.B %P +The CPU percentage, computed as (%U + %S) / %R. +.PD +.RE +.IP +The optional \fIp\fP is a digit specifying the \fIprecision\fP, +the number of fractional digits after a decimal point. +A value of 0 causes no decimal point or fraction to be output. +At most three places after the decimal point may be specified; +values of \fIp\fP greater than 3 are changed to 3. +If \fIp\fP is not specified, the value 3 is used. +.IP +The optional \fBl\fP specifies a longer format, including +minutes, of the form \fIMM\fPm\fISS\fP.\fIFF\fPs. +The value of \fIp\fP determines whether or not the fraction is +included. +.IP +If this variable is not set, \fBbash\fP acts as if it had the +value \fB$'\enreal\et%3lR\enuser\et%3lU\ensys\t%3lS'\fP. +If the value is null, no timing information is displayed. +A trailing newline is added when the format string is displayed. +.TP +.B TMOUT +If set to a value greater than zero, \fBTMOUT\fP is treated as the +default timeout for the \fBread\fP builtin. +The \fBselect\fP command terminates if input does not arrive +after \fBTMOUT\fP seconds when input is coming from a terminal. +In an interactive shell, the value is interpreted as the +number of seconds to wait for input after issuing the primary prompt. +.B Bash +terminates after waiting for that number of seconds if input does +not arrive. +.TP +.B auto_resume +This variable controls how the shell interacts with the user and +job control. If this variable is set, single word simple +commands without redirections are treated as candidates for resumption +of an existing stopped job. There is no ambiguity allowed; if there is +more than one job beginning with the string typed, the job most recently +accessed is selected. The +.I name +of a stopped job, in this context, is the command line used to +start it. +If set to the value +.IR exact , +the string supplied must match the name of a stopped job exactly; +if set to +.IR substring , +the string supplied needs to match a substring of the name of a +stopped job. The +.I substring +value provides functionality analogous to the +.B %? +job identifier (see +.SM +.B JOB CONTROL +below). If set to any other value, the supplied string must +be a prefix of a stopped job's name; this provides functionality +analogous to the +.B % +job identifier. +.TP +.B histchars +The two or three characters which control history expansion +and tokenization (see +.SM +.B HISTORY EXPANSION +below). The first character is the \fIhistory expansion\fP character, +the character which signals the start of a history +expansion, normally `\fB!\fP'. +The second character is the \fIquick substitution\fP +character, which is used as shorthand for re-running the previous +command entered, substituting one string for another in the command. +The default is `\fB^\fP'. +The optional third character is the character +which indicates that the remainder of the line is a comment when found +as the first character of a word, normally `\fB#\fP'. The history +comment character causes history substitution to be skipped for the +remaining words on the line. It does not necessarily cause the shell +parser to treat the rest of the line as a comment. +.PD +.SS Arrays +.B Bash +provides one-dimensional array variables. Any variable may be used as +an array; the +.B declare +builtin will explicitly declare an array. There is no maximum +limit on the size of an array, nor any requirement that members +be indexed or assigned contiguously. Arrays are indexed using +integers and are zero-based. +.PP +An array is created automatically if any variable is assigned to using +the syntax \fIname\fP[\fIsubscript\fP]=\fIvalue\fP. The +.I subscript +is treated as an arithmetic expression that must evaluate to a number +greater than or equal to zero. To explicitly declare an array, use +.B declare \-a \fIname\fP +(see +.SM +.B SHELL BUILTIN COMMANDS +below). +.B declare \-a \fIname\fP[\fIsubscript\fP] +is also accepted; the \fIsubscript\fP is ignored. Attributes may be +specified for an array variable using the +.B declare +and +.B readonly +builtins. Each attribute applies to all members of an array. +.PP +Arrays are assigned to using compound assignments of the form +\fIname\fP=\fB(\fPvalue\fI1\fP ... value\fIn\fP\fB)\fP, where each +\fIvalue\fP is of the form [\fIsubscript\fP]=\fIstring\fP. Only +\fIstring\fP is required. If +the optional brackets and subscript are supplied, that index is assigned to; +otherwise the index of the element assigned is the last index assigned +to by the statement plus one. Indexing starts at zero. +This syntax is also accepted by the +.B declare +builtin. Individual array elements may be assigned to using the +\fIname\fP[\fIsubscript\fP]=\fIvalue\fP syntax introduced above. +.PP +Any element of an array may be referenced using +${\fIname\fP[\fIsubscript\fP]}. The braces are required to avoid +conflicts with pathname expansion. If +\fIsubscript\fP is \fB@\fP or \fB*\fP, the word expands to +all members of \fIname\fP. These subscripts differ only when the +word appears within double quotes. If the word is double-quoted, +${\fIname\fP[*]} expands to a single +word with the value of each array member separated by the first +character of the +.SM +.B IFS +special variable, and ${\fIname\fP[@]} expands each element of +\fIname\fP to a separate word. When there are no array members, +${\fIname\fP[@]} expands to nothing. This is analogous to the expansion +of the special parameters \fB*\fP and \fB@\fP (see +.B Special Parameters +above). ${#\fIname\fP[\fIsubscript\fP]} expands to the length of +${\fIname\fP[\fIsubscript\fP]}. If \fIsubscript\fP is \fB*\fP or +\fB@\fP, the expansion is the number of elements in the array. +Referencing an array variable without a subscript is equivalent to +referencing element zero. +.PP +The +.B unset +builtin is used to destroy arrays. \fBunset\fP \fIname\fP[\fIsubscript\fP] +destroys the array element at index \fIsubscript\fP. +\fBunset\fP \fIname\fP, where \fIname\fP is an array, or +\fBunset\fP \fIname\fP[\fIsubscript\fP], where +\fIsubscript\fP is \fB*\fP or \fB@\fP, removes the entire array. +.PP +The +.BR declare , +.BR local , +and +.B readonly +builtins each accept a +.B \-a +option to specify an array. The +.B read +builtin accepts a +.B \-a +option to assign a list of words read from the standard input +to an array. The +.B set +and +.B declare +builtins display array values in a way that allows them to be +reused as assignments. +.SH EXPANSION +Expansion is performed on the command line after it has been split into +words. There are seven kinds of expansion performed: +.IR "brace expansion" , +.IR "tilde expansion" , +.IR "parameter and variable expansion" , +.IR "command substitution" , +.IR "arithmetic expansion" , +.IR "word splitting" , +and +.IR "pathname expansion" . +.PP +The order of expansions is: brace expansion, tilde expansion, +parameter, variable and arithmetic expansion and +command substitution +(done in a left-to-right fashion), word splitting, and pathname +expansion. +.PP +On systems that can support it, there is an additional expansion +available: \fIprocess substitution\fP. +.PP +Only brace expansion, word splitting, and pathname expansion +can change the number of words of the expansion; other expansions +expand a single word to a single word. +The only exceptions to this are the expansions of +"\fB$@\fP" and "\fB${\fP\fIname\fP\fB[@]}\fP" +as explained above (see +.SM +.BR PARAMETERS ). +.SS Brace Expansion +.PP +.I "Brace expansion" +is a mechanism by which arbitrary strings +may be generated. This mechanism is similar to +\fIpathname expansion\fP, but the filenames generated +need not exist. Patterns to be brace expanded take +the form of an optional +.IR preamble , +followed by either a series of comma-separated strings or +a sequence expression between a pair of braces, followed by +an optional +.IR postscript . +The preamble is prefixed to each string contained +within the braces, and the postscript is then appended +to each resulting string, expanding left to right. +.PP +Brace expansions may be nested. The results of each expanded +string are not sorted; left to right order is preserved. +For example, a\fB{\fPd,c,b\fB}\fPe expands into `ade ace abe'. +.PP +A sequence expression takes the form \fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB}\fP, +where \fIx\fP and \fIy\fP are either integers or single characters. +When integers are supplied, the expression expands to each number between +\fIx\fP and \fIy\fP, inclusive. +When characters are supplied, the expression expands to each character +lexicographically between \fIx\fP and \fIy\fP, inclusive. Note that +both \fIx\fP and \fIy\fP must be of the same type. +.PP +Brace expansion is performed before any other expansions, +and any characters special to other expansions are preserved +in the result. It is strictly textual. +.B Bash +does not apply any syntactic interpretation to the context of the +expansion or the text between the braces. +.PP +A correctly-formed brace expansion must contain unquoted opening +and closing braces, and at least one unquoted comma or a valid +sequence expression. +Any incorrectly formed brace expansion is left unchanged. +A \fB{\fP or \fB,\fP may be quoted with a backslash to prevent its +being considered part of a brace expression. +To avoid conflicts with parameter expansion, the string \fB${\fP +is not considered eligible for brace expansion. +.PP +This construct is typically used as shorthand when the common +prefix of the strings to be generated is longer than in the +above example: +.RS +.PP +mkdir /usr/local/src/bash/{old,new,dist,bugs} +.RE +or +.RS +chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} +.RE +.PP +Brace expansion introduces a slight incompatibility with +historical versions of +.BR sh . +.B sh +does not treat opening or closing braces specially when they +appear as part of a word, and preserves them in the output. +.B Bash +removes braces from words as a consequence of brace +expansion. For example, a word entered to +.B sh +as \fIfile{1,2}\fP +appears identically in the output. The same word is +output as +.I file1 file2 +after expansion by +.BR bash . +If strict compatibility with +.B sh +is desired, start +.B bash +with the +.B +B +option or disable brace expansion with the +.B +B +option to the +.B set +command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.SS Tilde Expansion +.PP +If a word begins with an unquoted tilde character (`\fB~\fP'), all of +the characters preceding the first unquoted slash (or all characters, +if there is no unquoted slash) are considered a \fItilde-prefix\fP. +If none of the characters in the tilde-prefix are quoted, the +characters in the tilde-prefix following the tilde are treated as a +possible \fIlogin name\fP. +If this login name is the null string, the tilde is replaced with the +value of the shell parameter +.SM +.BR HOME . +If +.SM +.B HOME +is unset, the home directory of the user executing the shell is +substituted instead. +Otherwise, the tilde-prefix is replaced with the home directory +associated with the specified login name. +.PP +If the tilde-prefix is a `~+', the value of the shell variable +.SM +.B PWD +replaces the tilde-prefix. +If the tilde-prefix is a `~\-', the value of the shell variable +.SM +.BR OLDPWD , +if it is set, is substituted. +If the characters following the tilde in the tilde-prefix consist +of a number \fIN\fP, optionally prefixed +by a `+' or a `\-', the tilde-prefix is replaced with the corresponding +element from the directory stack, as it would be displayed by the +.B dirs +builtin invoked with the tilde-prefix as an argument. +If the characters following the tilde in the tilde-prefix consist of a +number without a leading `+' or `\-', `+' is assumed. +.PP +If the login name is invalid, or the tilde expansion fails, the word +is unchanged. +.PP +Each variable assignment is checked for unquoted tilde-prefixes immediately +following a +.B : +or +.BR = . +In these cases, tilde expansion is also performed. +Consequently, one may use file names with tildes in assignments to +.SM +.BR PATH , +.SM +.BR MAILPATH , +and +.SM +.BR CDPATH , +and the shell assigns the expanded value. +.SS Parameter Expansion +.PP +The `\fB$\fP' character introduces parameter expansion, +command substitution, or arithmetic expansion. The parameter name +or symbol to be expanded may be enclosed in braces, which +are optional but serve to protect the variable to be expanded from +characters immediately following it which could be +interpreted as part of the name. +.PP +When braces are used, the matching ending brace is the first `\fB}\fP' +not escaped by a backslash or within a quoted string, and not within an +embedded arithmetic expansion, command substitution, or paramter +expansion. +.PP +.PD 0 +.TP +${\fIparameter\fP} +The value of \fIparameter\fP is substituted. The braces are required +when +.I parameter +is a positional parameter with more than one digit, +or when +.I parameter +is followed by a character which is not to be +interpreted as part of its name. +.PD +.PP +If the first character of \fIparameter\fP is an exclamation point, +a level of variable indirection is introduced. +\fBBash\fP uses the value of the variable formed from the rest of +\fIparameter\fP as the name of the variable; this variable is then +expanded and that value is used in the rest of the substitution, rather +than the value of \fIparameter\fP itself. +This is known as \fIindirect expansion\fP. +The exceptions to this are the expansions of ${!\fIprefix\fP*} and +${\fB!\fP\fIname\fP[\fI@\fP]} described below. +The exclamation point must immediately follow the left brace in order to +introduce indirection. +.PP +In each of the cases below, \fIword\fP is subject to tilde expansion, +parameter expansion, command substitution, and arithmetic expansion. +When not performing substring expansion, \fBbash\fP tests for a parameter +that is unset or null; omitting the colon results in a test only for a +parameter that is unset. +.PP +.PD 0 +.TP +${\fIparameter\fP\fB:\-\fP\fIword\fP} +\fBUse Default Values\fP. If +.I parameter +is unset or null, the expansion of +.I word +is substituted. Otherwise, the value of +.I parameter +is substituted. +.TP +${\fIparameter\fP\fB:=\fP\fIword\fP} +\fBAssign Default Values\fP. +If +.I parameter +is unset or null, the expansion of +.I word +is assigned to +.IR parameter . +The value of +.I parameter +is then substituted. Positional parameters and special parameters may +not be assigned to in this way. +.TP +${\fIparameter\fP\fB:?\fP\fIword\fP} +\fBDisplay Error if Null or Unset\fP. +If +.I parameter +is null or unset, the expansion of \fIword\fP (or a message to that effect +if +.I word +is not present) is written to the standard error and the shell, if it +is not interactive, exits. Otherwise, the value of \fIparameter\fP is +substituted. +.TP +${\fIparameter\fP\fB:+\fP\fIword\fP} +\fBUse Alternate Value\fP. +If +.I parameter +is null or unset, nothing is substituted, otherwise the expansion of +.I word +is substituted. +.TP +${\fIparameter\fP\fB:\fP\fIoffset\fP} +.PD 0 +.TP +${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP} +.PD +\fBSubstring Expansion.\fP +Expands to up to \fIlength\fP characters of \fIparameter\fP +starting at the character specified by \fIoffset\fP. +If \fIlength\fP is omitted, expands to the substring of +\fIparameter\fP starting at the character specified by \fIoffset\fP. +\fIlength\fP and \fIoffset\fP are arithmetic expressions (see +.SM +.B +ARITHMETIC EVALUATION +below). +\fIlength\fP must evaluate to a number greater than or equal to zero. +If \fIoffset\fP evaluates to a number less than zero, the value +is used as an offset from the end of the value of \fIparameter\fP. +If \fIparameter\fP is \fB@\fP, the result is \fIlength\fP positional +parameters beginning at \fIoffset\fP. +If \fIparameter\fP is an array name indexed by @ or *, +the result is the \fIlength\fP +members of the array beginning with ${\fIparameter\fP[\fIoffset\fP]}. +Substring indexing is zero-based unless the positional parameters +are used, in which case the indexing starts at 1. +.TP +${\fB!\fP\fIprefix\fP\fB*\fP} +.PD 0 +.TP +${\fB!\fP\fIprefix\fP\fB@\fP} +.PD +Expands to the names of variables whose names begin with \fIprefix\fP, +separated by the first character of the +.SM +.B IFS +special variable. +.TP +${\fB!\fP\fIname\fP[\fI@\fP]} +.PD 0 +.TP +${\fB!\fP\fIname\fP[\fI*\fP]} +.PD +If \fIname\fP is an array variable, expands to the list of array indices +(keys) assigned in \fIname\fP. +If \fIname\fP is not an array, expands to 0 if \fIname\fP is set and null +otherwise. +When \fI@\fP is used and the expansion appears within double quotes, each +key expands to a separate word. +.TP +${\fB#\fP\fIparameter\fP} +The length in characters of the value of \fIparameter\fP is substituted. +If +.I parameter +is +.B * +or +.BR @ , +the value substituted is the number of positional parameters. +If +.I parameter +is an array name subscripted by +.B * +or +.BR @ , +the value substituted is the number of elements in the array. +.TP +${\fIparameter\fP\fB#\fP\fIword\fP} +.PD 0 +.TP +${\fIparameter\fP\fB##\fP\fIword\fP} +.PD +The +.I word +is expanded to produce a pattern just as in pathname +expansion. If the pattern matches the beginning of +the value of +.IR parameter , +then the result of the expansion is the expanded value of +.I parameter +with the shortest matching pattern (the ``\fB#\fP'' case) or the +longest matching pattern (the ``\fB##\fP'' case) deleted. +If +.I parameter +is +.B @ +or +.BR * , +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +.I parameter +is an array variable subscripted with +.B @ +or +.BR * , +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +.TP +${\fIparameter\fP\fB%\fP\fIword\fP} +.PD 0 +.TP +${\fIparameter\fP\fB%%\fP\fIword\fP} +.PD +The \fIword\fP is expanded to produce a pattern just as in +pathname expansion. +If the pattern matches a trailing portion of the expanded value of +.IR parameter , +then the result of the expansion is the expanded value of +.I parameter +with the shortest matching pattern (the ``\fB%\fP'' case) or the +longest matching pattern (the ``\fB%%\fP'' case) deleted. +If +.I parameter +is +.B @ +or +.BR * , +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +.I parameter +is an array variable subscripted with +.B @ +or +.BR * , +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. +.TP +${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP} +.PD 0 +.TP +${\fIparameter\fP\fB//\fP\fIpattern\fP\fB/\fP\fIstring\fP} +.PD +The \fIpattern\fP is expanded to produce a pattern just as in +pathname expansion. +\fIParameter\fP is expanded and the longest match of \fIpattern\fP +against its value is replaced with \fIstring\fP. +In the first form, only the first match is replaced. +The second form causes all matches of \fIpattern\fP to be +replaced with \fIstring\fP. +If \fIpattern\fP begins with \fB#\fP, it must match at the beginning +of the expanded value of \fIparameter\fP. +If \fIpattern\fP begins with \fB%\fP, it must match at the end +of the expanded value of \fIparameter\fP. +If \fIstring\fP is null, matches of \fIpattern\fP are deleted +and the \fB/\fP following \fIpattern\fP may be omitted. +If +.I parameter +is +.B @ +or +.BR * , +the substitution operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If +.I parameter +is an array variable subscripted with +.B @ +or +.BR * , +the substitution operation is applied to each member of the +array in turn, and the expansion is the resultant list. +.SS Command Substitution +.PP +\fICommand substitution\fP allows the output of a command to replace +the command name. There are two forms: +.PP +.RS +.PP +\fB$(\fP\fIcommand\fP\|\fB)\fP +.RE +or +.RS +\fB`\fP\fIcommand\fP\fB`\fP +.RE +.PP +.B Bash +performs the expansion by executing \fIcommand\fP and +replacing the command substitution with the standard output of the +command, with any trailing newlines deleted. +Embedded newlines are not deleted, but they may be removed during +word splitting. +The command substitution \fB$(cat \fIfile\fP)\fR can be replaced by +the equivalent but faster \fB$(< \fIfile\fP)\fR. +.PP +When the old-style backquote form of substitution is used, +backslash retains its literal meaning except when followed by +.BR $ , +.BR ` , +or +.BR \e . +The first backquote not preceded by a backslash terminates the +command substitution. +When using the $(\^\fIcommand\fP\|) form, all characters between the +parentheses make up the command; none are treated specially. +.PP +Command substitutions may be nested. To nest when using the backquoted form, +escape the inner backquotes with backslashes. +.PP +If the substitution appears within double quotes, word splitting and +pathname expansion are not performed on the results. +.SS Arithmetic Expansion +.PP +Arithmetic expansion allows the evaluation of an arithmetic expression +and the substitution of the result. The format for arithmetic expansion is: +.RS +.PP +\fB$((\fP\fIexpression\fP\fB))\fP +.RE +.PP +The +.I expression +is treated as if it were within double quotes, but a double quote +inside the parentheses is not treated specially. +All tokens in the expression undergo parameter expansion, string +expansion, command substitution, and quote removal. +Arithmetic expansions may be nested. +.PP +The evaluation is performed according to the rules listed below under +.SM +.BR "ARITHMETIC EVALUATION" . +If +.I expression +is invalid, +.B bash +prints a message indicating failure and no substitution occurs. +.SS Process Substitution +.PP +\fIProcess substitution\fP is supported on systems that support named +pipes (\fIFIFOs\fP) or the \fB/dev/fd\fP method of naming open files. +It takes the form of +\fB<(\fP\fIlist\^\fP\fB)\fP +or +\fB>(\fP\fIlist\^\fP\fB)\fP. +The process \fIlist\fP is run with its input or output connected to a +\fIFIFO\fP or some file in \fB/dev/fd\fP. The name of this file is +passed as an argument to the current command as the result of the +expansion. If the \fB>(\fP\fIlist\^\fP\fB)\fP form is used, writing to +the file will provide input for \fIlist\fP. If the +\fB<(\fP\fIlist\^\fP\fB)\fP form is used, the file passed as an +argument should be read to obtain the output of \fIlist\fP. +.PP +When available, process substitution is performed +simultaneously with parameter and variable expansion, +command substitution, +and arithmetic expansion. +.SS Word Splitting +.PP +The shell scans the results of +parameter expansion, +command substitution, +and +arithmetic expansion +that did not occur within double quotes for +.IR "word splitting" . +.PP +The shell treats each character of +.SM +.B IFS +as a delimiter, and splits the results of the other +expansions into words on these characters. If +.SM +.B IFS +is unset, or its +value is exactly +.BR <space><tab><newline> , +the default, then +any sequence of +.SM +.B IFS +characters serves to delimit words. If +.SM +.B IFS +has a value other than the default, then sequences of +the whitespace characters +.B space +and +.B tab +are ignored at the beginning and end of the +word, as long as the whitespace character is in the +value of +.SM +.BR IFS +(an +.SM +.B IFS +whitespace character). +Any character in +.SM +.B IFS +that is not +.SM +.B IFS +whitespace, along with any adjacent +.SM +.B IFS +whitespace characters, delimits a field. +A sequence of +.SM +.B IFS +whitespace characters is also treated as a delimiter. +If the value of +.SM +.B IFS +is null, no word splitting occurs. +.PP +Explicit null arguments (\^\f3"\^"\fP or \^\f3'\^'\fP\^) are retained. +Unquoted implicit null arguments, resulting from the expansion of +parameters that have no values, are removed. +If a parameter with no value is expanded within double quotes, a +null argument results and is retained. +.PP +Note that if no expansion occurs, no splitting +is performed. +.SS Pathname Expansion +.PP +After word splitting, +unless the +.B \-f +option has been set, +.B bash +scans each word for the characters +.BR * , +.BR ? , +and +.BR [ . +If one of these characters appears, then the word is +regarded as a +.IR pattern , +and replaced with an alphabetically sorted list of +file names matching the pattern. +If no matching file names are found, +and the shell option +.B nullglob +is disabled, the word is left unchanged. +If the +.B nullglob +option is set, and no matches are found, +the word is removed. +If the shell option +.B nocaseglob +is enabled, the match is performed without regard to the case +of alphabetic characters. +When a pattern is used for pathname expansion, +the character +.B ``.'' +at the start of a name or immediately following a slash +must be matched explicitly, unless the shell option +.B dotglob +is set. +When matching a pathname, the slash character must always be +matched explicitly. +In other cases, the +.B ``.'' +character is not treated specially. +See the description of +.B shopt +below under +.SM +.B SHELL BUILTIN COMMANDS +for a description of the +.BR nocaseglob , +.BR nullglob , +and +.B dotglob +shell options. +.PP +The +.SM +.B GLOBIGNORE +shell variable may be used to restrict the set of file names matching a +.IR pattern . +If +.SM +.B GLOBIGNORE +is set, each matching file name that also matches one of the patterns in +.SM +.B GLOBIGNORE +is removed from the list of matches. +The file names +.B ``.'' +and +.B ``..'' +are always ignored when +.SM +.B GLOBIGNORE +is set and not null. However, setting +.SM +.B GLOBIGNORE +to a non-null value has the effect of enabling the +.B dotglob +shell option, so all other file names beginning with a +.B ``.'' +will match. +To get the old behavior of ignoring file names beginning with a +.BR ``.'' , +make +.B ``.*'' +one of the patterns in +.SM +.BR GLOBIGNORE . +The +.B dotglob +option is disabled when +.SM +.B GLOBIGNORE +is unset. +.PP +\fBPattern Matching\fP +.PP +Any character that appears in a pattern, other than the special pattern +characters described below, matches itself. The NUL character may not +occur in a pattern. A backslash escapes the following character; the +escaping backslash is discarded when matching. +The special pattern characters must be quoted if +they are to be matched literally. +.PP +The special pattern characters have the following meanings: +.PP +.PD 0 +.TP +.B * +Matches any string, including the null string. +.TP +.B ? +Matches any single character. +.TP +.B [...] +Matches any one of the enclosed characters. A pair of characters +separated by a hyphen denotes a +\fIrange expression\fP; +any character that sorts between those two characters, inclusive, +using the current locale's collating sequence and character set, +is matched. If the first character following the +.B [ +is a +.B ! +or a +.B ^ +then any character not enclosed is matched. +The sorting order of characters in range expressions is determined by +the current locale and the value of the \fBLC_COLLATE\fP shell variable, +if set. +A +.B \- +may be matched by including it as the first or last character +in the set. +A +.B ] +may be matched by including it as the first character +in the set. +.br +.if t .sp 0.5 +.if n .sp 1 +Within +.B [ +and +.BR ] , +\fIcharacter classes\fP can be specified using the syntax +\fB[:\fP\fIclass\fP\fB:]\fP, where \fIclass\fP is one of the +following classes defined in the POSIX.2 standard: +.PP +.RS +.B +.if n alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit +.if t alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit +.br +A character class matches any character belonging to that class. +The \fBword\fP character class matches letters, digits, and the character _. +.br +.if t .sp 0.5 +.if n .sp 1 +Within +.B [ +and +.BR ] , +an \fIequivalence class\fP can be specified using the syntax +\fB[=\fP\fIc\fP\fB=]\fP, which matches all characters with the +same collation weight (as defined by the current locale) as +the character \fIc\fP. +.br +.if t .sp 0.5 +.if n .sp 1 +Within +.B [ +and +.BR ] , +the syntax \fB[.\fP\fIsymbol\fP\fB.]\fP matches the collating symbol +\fIsymbol\fP. +.RE +.PD +.PP +If the \fBextglob\fP shell option is enabled using the \fBshopt\fP +builtin, several extended pattern matching operators are recognized. +In the following description, a \fIpattern-list\fP is a list of one +or more patterns separated by a \fB|\fP. +Composite patterns may be formed using one or more of the following +sub-patterns: +.sp 1 +.PD 0 +.RS +.TP +\fB?(\fP\^\fIpattern-list\^\fP\fB)\fP +Matches zero or one occurrence of the given patterns +.TP +\fB*(\fP\^\fIpattern-list\^\fP\fB)\fP +Matches zero or more occurrences of the given patterns +.TP +\fB+(\fP\^\fIpattern-list\^\fP\fB)\fP +Matches one or more occurrences of the given patterns +.TP +\fB@(\fP\^\fIpattern-list\^\fP\fB)\fP +Matches exactly one of the given patterns +.TP +\fB!(\fP\^\fIpattern-list\^\fP\fB)\fP +Matches anything except one of the given patterns +.RE +.PD +.SS Quote Removal +.PP +After the preceding expansions, all unquoted occurrences of the +characters +.BR \e , +.BR ' , +and \^\f3"\fP\^ that did not result from one of the above +expansions are removed. +.SH REDIRECTION +Before a command is executed, its input and output +may be +.I redirected +using a special notation interpreted by the shell. +Redirection may also be used to open and close files for the +current shell execution environment. The following redirection +operators may precede or appear anywhere within a +.I simple command +or may follow a +.IR command . +Redirections are processed in the order they appear, from +left to right. +.PP +In the following descriptions, if the file descriptor number is +omitted, and the first character of the redirection operator is +.BR < , +the redirection refers to the standard input (file descriptor +0). If the first character of the redirection operator is +.BR > , +the redirection refers to the standard output (file descriptor +1). +.PP +The word following the redirection operator in the following +descriptions, unless otherwise noted, is subjected to brace expansion, +tilde expansion, parameter expansion, command substitution, arithmetic +expansion, quote removal, pathname expansion, and word splitting. +If it expands to more than one word, +.B bash +reports an error. +.PP +Note that the order of redirections is significant. For example, +the command +.RS +.PP +ls \fB>\fP dirlist 2\fB>&\fP1 +.RE +.PP +directs both standard output and standard error to the file +.IR dirlist , +while the command +.RS +.PP +ls 2\fB>&\fP1 \fB>\fP dirlist +.RE +.PP +directs only the standard output to file +.IR dirlist , +because the standard error was duplicated as standard output +before the standard output was redirected to +.IR dirlist . +.PP +\fBBash\fP handles several filenames specially when they are used in +redirections, as described in the following table: +.RS +.PP +.PD 0 +.TP +.B /dev/fd/\fIfd\fP +If \fIfd\fP is a valid integer, file descriptor \fIfd\fP is duplicated. +.TP +.B /dev/stdin +File descriptor 0 is duplicated. +.TP +.B /dev/stdout +File descriptor 1 is duplicated. +.TP +.B /dev/stderr +File descriptor 2 is duplicated. +.TP +.B /dev/tcp/\fIhost\fP/\fIport\fP +If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP +is an integer port number or service name, \fBbash\fP attempts to open +a TCP connection to the corresponding socket. +.TP +.B /dev/udp/\fIhost\fP/\fIport\fP +If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP +is an integer port number or service name, \fBbash\fP attempts to open +a UDP connection to the corresponding socket. +.PD +.RE +.PP +A failure to open or create a file causes the redirection to fail. +.SS Redirecting Input +.PP +Redirection of input causes the file whose name results from +the expansion of +.I word +to be opened for reading on file descriptor +.IR n , +or the standard input (file descriptor 0) if +.I n +is not specified. +.PP +The general format for redirecting input is: +.RS +.PP +[\fIn\fP]\fB<\fP\fIword\fP +.RE +.SS Redirecting Output +.PP +Redirection of output causes the file whose name results from +the expansion of +.I word +to be opened for writing on file descriptor +.IR n , +or the standard output (file descriptor 1) if +.I n +is not specified. If the file does not exist it is created; +if it does exist it is truncated to zero size. +.PP +The general format for redirecting output is: +.RS +.PP +[\fIn\fP]\fB>\fP\fIword\fP +.RE +.PP +If the redirection operator is +.BR > , +and the +.B noclobber +option to the +.B set +builtin has been enabled, the redirection will fail if the file +whose name results from the expansion of \fIword\fP exists and is +a regular file. +If the redirection operator is +.BR >| , +or the redirection operator is +.B > +and the +.B noclobber +option to the +.B set +builtin command is not enabled, the redirection is attempted even +if the file named by \fIword\fP exists. +.SS Appending Redirected Output +.PP +Redirection of output in this fashion +causes the file whose name results from +the expansion of +.I word +to be opened for appending on file descriptor +.IR n , +or the standard output (file descriptor 1) if +.I n +is not specified. If the file does not exist it is created. +.PP +The general format for appending output is: +.RS +.PP +[\fIn\fP]\fB>>\fP\fIword\fP +.RE +.PP +.SS Redirecting Standard Output and Standard Error +.PP +.B Bash +allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be redirected to the file whose name is the +expansion of +.I word +with this construct. +.PP +There are two formats for redirecting standard output and +standard error: +.RS +.PP +\fB&>\fP\fIword\fP +.RE +and +.RS +\fB>&\fP\fIword\fP +.RE +.PP +Of the two forms, the first is preferred. +This is semantically equivalent to +.RS +.PP +\fB>\fP\fIword\fP 2\fB>&\fP1 +.RE +.SS Here Documents +.PP +This type of redirection instructs the shell to read input from the +current source until a line containing only +.I word +(with no trailing blanks) +is seen. All of +the lines read up to that point are then used as the standard +input for a command. +.PP +The format of here-documents is: +.RS +.PP +.nf +\fB<<\fP[\fB\-\fP]\fIword\fP + \fIhere-document\fP +\fIdelimiter\fP +.fi +.RE +.PP +No parameter expansion, command substitution, arithmetic expansion, +or pathname expansion is performed on +.IR word . +If any characters in +.I word +are quoted, the +.I delimiter +is the result of quote removal on +.IR word , +and the lines in the here-document are not expanded. +If \fIword\fP is unquoted, +all lines of the here-document are subjected to parameter expansion, +command substitution, and arithmetic expansion. In the latter +case, the character sequence +.B \e<newline> +is ignored, and +.B \e +must be used to quote the characters +.BR \e , +.BR $ , +and +.BR ` . +.PP +If the redirection operator is +.BR <<\- , +then all leading tab characters are stripped from input lines and the +line containing +.IR delimiter . +This allows +here-documents within shell scripts to be indented in a +natural fashion. +.SS "Here Strings" +A variant of here documents, the format is: +.RS +.PP +.nf +\fB<<<\fP\fIword\fP +.fi +.RE +.PP +The \fIword\fP is expanded and supplied to the command on its standard +input. +.SS "Duplicating File Descriptors" +.PP +The redirection operator +.RS +.PP +[\fIn\fP]\fB<&\fP\fIword\fP +.RE +.PP +is used to duplicate input file descriptors. +If +.I word +expands to one or more digits, the file descriptor denoted by +.I n +is made to be a copy of that file descriptor. +If the digits in +.I word +do not specify a file descriptor open for input, a redirection error occurs. +If +.I word +evaluates to +.BR \- , +file descriptor +.I n +is closed. If +.I n +is not specified, the standard input (file descriptor 0) is used. +.PP +The operator +.RS +.PP +[\fIn\fP]\fB>&\fP\fIword\fP +.RE +.PP +is used similarly to duplicate output file descriptors. If +.I n +is not specified, the standard output (file descriptor 1) is used. +If the digits in +.I word +do not specify a file descriptor open for output, a redirection error occurs. +As a special case, if \fIn\fP is omitted, and \fIword\fP does not +expand to one or more digits, the standard output and standard +error are redirected as described previously. +.SS "Moving File Descriptors" +.PP +The redirection operator +.RS +.PP +[\fIn\fP]\fB<&\fP\fIdigit\fP\fB\-\fP +.RE +.PP +moves the file descriptor \fIdigit\fP to file descriptor +.IR n , +or the standard input (file descriptor 0) if \fIn\fP is not specified. +\fIdigit\fP is closed after being duplicated to \fIn\fP. +.PP +Similarly, the redirection operator +.RS +.PP +[\fIn\fP]\fB>&\fP\fIdigit\fP\fB\-\fP +.RE +.PP +moves the file descriptor \fIdigit\fP to file descriptor +.IR n , +or the standard output (file descriptor 1) if \fIn\fP is not specified. +.SS "Opening File Descriptors for Reading and Writing" +.PP +The redirection operator +.RS +.PP +[\fIn\fP]\fB<>\fP\fIword\fP +.RE +.PP +causes the file whose name is the expansion of +.I word +to be opened for both reading and writing on file descriptor +.IR n , +or on file descriptor 0 if +.I n +is not specified. If the file does not exist, it is created. +.SH ALIASES +\fIAliases\fP allow a string to be substituted for a word when it is used +as the first word of a simple command. +The shell maintains a list of aliases that may be set and unset with the +.B alias +and +.B unalias +builtin commands (see +.SM +.B SHELL BUILTIN COMMANDS +below). +The first word of each command, if unquoted, +is checked to see if it has an +alias. If so, that word is replaced by the text of the alias. +The alias name and the replacement text may contain any valid +shell input, including the +.I metacharacters +listed above, with the exception that the alias name may not +contain \fI=\fP. The first word of the replacement text is tested +for aliases, but a word that is identical to an alias being expanded +is not expanded a second time. This means that one may alias +.B ls +to +.BR "ls \-F" , +for instance, and +.B bash +does not try to recursively expand the replacement text. +If the last character of the alias value is a +.IR blank , +then the next command +word following the alias is also checked for alias expansion. +.PP +Aliases are created and listed with the +.B alias +command, and removed with the +.B unalias +command. +.PP +There is no mechanism for using arguments in the replacement text. +If arguments are needed, a shell function should be used (see +.SM +.B FUNCTIONS +below). +.PP +Aliases are not expanded when the shell is not interactive, unless +the +.B expand_aliases +shell option is set using +.B shopt +(see the description of +.B shopt +under +.SM +\fBSHELL BUILTIN COMMANDS\fP +below). +.PP +The rules concerning the definition and use of aliases are +somewhat confusing. +.B Bash +always reads at least one complete line +of input before executing any +of the commands on that line. Aliases are expanded when a +command is read, not when it is executed. Therefore, an +alias definition appearing on the same line as another +command does not take effect until the next line of input is read. +The commands following the alias definition +on that line are not affected by the new alias. +This behavior is also an issue when functions are executed. +Aliases are expanded when a function definition is read, +not when the function is executed, because a function definition +is itself a compound command. As a consequence, aliases +defined in a function are not available until after that +function is executed. To be safe, always put +alias definitions on a separate line, and do not use +.B alias +in compound commands. +.PP +For almost every purpose, aliases are superseded by +shell functions. +.SH FUNCTIONS +A shell function, defined as described above under +.SM +.BR "SHELL GRAMMAR" , +stores a series of commands for later execution. +When the name of a shell function is used as a simple command name, +the list of commands associated with that function name is executed. +Functions are executed in the context of the +current shell; no new process is created to interpret +them (contrast this with the execution of a shell script). +When a function is executed, the arguments to the +function become the positional parameters +during its execution. +The special parameter +.B # +is updated to reflect the change. Positional parameter 0 +is unchanged. +The first element of the +.SM +.B FUNCNAME +variable is set to the name of the function while the function +is executing. +All other aspects of the shell execution +environment are identical between a function and its caller +with the exception that the +.SM +.B DEBUG +trap (see the description of the +.B trap +builtin under +.SM +.B SHELL BUILTIN COMMANDS +below) is not inherited unless the function has been given the +\fBtrace\fP attribute (see the description of the +.SM +.B declare +builtin below) or the +\fB\-o functrace\fP shell option has been enabled with +the \fBset\fP builtin +(in which case all functions inherit the \fBDEBUG\fP trap). +.PP +Variables local to the function may be declared with the +.B local +builtin command. Ordinarily, variables and their values +are shared between the function and its caller. +.PP +If the builtin command +.B return +is executed in a function, the function completes and +execution resumes with the next command after the function +call. +Any command associated with the \fBRETURN\fP trap is executed +before execution resumes. +When a function completes, the values of the +positional parameters and the special parameter +.B # +are restored to the values they had prior to the function's +execution. +.PP +Function names and definitions may be listed with the +.B \-f +option to the +.B declare +or +.B typeset +builtin commands. The +.B \-F +option to +.B declare +or +.B typeset +will list the function names only +(and optionally the source file and line number, if the \fBextdebug\fP +shell option is enabled). +Functions may be exported so that subshells +automatically have them defined with the +.B \-f +option to the +.B export +builtin. +Note that shell functions and variables with the same name may result +in multiple identically-named entries in the environment passed to the +shell's children. +Care should be taken in cases where this may cause a problem. +.PP +Functions may be recursive. No limit is imposed on the number +of recursive calls. +.SH "ARITHMETIC EVALUATION" +The shell allows arithmetic expressions to be evaluated, under +certain circumstances (see the \fBlet\fP and \fBdeclare\fP builtin +commands and \fBArithmetic Expansion\fP). +Evaluation is done in fixed-width integers with no check for overflow, +though division by 0 is trapped and flagged as an error. +The operators and their precedence, associativity, and values +are the same as in the C language. +The following list of operators is grouped into levels of +equal-precedence operators. +The levels are listed in order of decreasing precedence. +.PP +.PD 0 +.TP +.B \fIid\fP++ \fIid\fP\-\- +variable post-increment and post-decrement +.TP +.B ++\fIid\fP \-\-\fIid\fP +variable pre-increment and pre-decrement +.TP +.B \- + +unary minus and plus +.TP +.B ! ~ +logical and bitwise negation +.TP +.B ** +exponentiation +.TP +.B * / % +multiplication, division, remainder +.TP +.B + \- +addition, subtraction +.TP +.B << >> +left and right bitwise shifts +.TP +.B <= >= < > +comparison +.TP +.B == != +equality and inequality +.TP +.B & +bitwise AND +.TP +.B ^ +bitwise exclusive OR +.TP +.B | +bitwise OR +.TP +.B && +logical AND +.TP +.B || +logical OR +.TP +.B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP +conditional operator +.TP +.B = *= /= %= += \-= <<= >>= &= ^= |= +assignment +.TP +.B \fIexpr1\fP , \fIexpr2\fP +comma +.PD +.PP +Shell variables are allowed as operands; parameter expansion is +performed before the expression is evaluated. +Within an expression, shell variables may also be referenced by name +without using the parameter expansion syntax. +A shell variable that is null or unset evaluates to 0 when referenced +by name without using the parameter expansion syntax. +The value of a variable is evaluated as an arithmetic expression +when it is referenced, or when a variable which has been given the +\fIinteger\fP attribute using \fBdeclare -i\fP is assigned a value. +A null value evaluates to 0. +A shell variable need not have its integer attribute +turned on to be used in an expression. +.PP +Constants with a leading 0 are interpreted as octal numbers. +A leading 0x or 0X denotes hexadecimal. +Otherwise, numbers take the form [\fIbase#\fP]n, where \fIbase\fP +is a decimal number between 2 and 64 representing the arithmetic +base, and \fIn\fP is a number in that base. +If \fIbase#\fP is omitted, then base 10 is used. +The digits greater than 9 are represented by the lowercase letters, +the uppercase letters, @, and _, in that order. +If \fIbase\fP is less than or equal to 36, lowercase and uppercase +letters may be used interchangably to represent numbers between 10 +and 35. +.PP +Operators are evaluated in order of precedence. Sub-expressions in +parentheses are evaluated first and may override the precedence +rules above. +.SH "CONDITIONAL EXPRESSIONS" +Conditional expressions are used by the \fB[[\fP compound command and +the \fBtest\fP and \fB[\fP builtin commands to test file attributes +and perform string and arithmetic comparisons. +Expressions are formed from the following unary or binary primaries. +If any \fIfile\fP argument to one of the primaries is of the form +\fI/dev/fd/n\fP, then file descriptor \fIn\fP is checked. +If the \fIfile\fP argument to one of the primaries is one of +\fI/dev/stdin\fP, \fI/dev/stdout\fP, or \fI/dev/stderr\fP, file +descriptor 0, 1, or 2, respectively, is checked. +.sp 1 +.PD 0 +.TP +.B \-a \fIfile\fP +True if \fIfile\fP exists. +.TP +.B \-b \fIfile\fP +True if \fIfile\fP exists and is a block special file. +.TP +.B \-c \fIfile\fP +True if \fIfile\fP exists and is a character special file. +.TP +.B \-d \fIfile\fP +True if \fIfile\fP exists and is a directory. +.TP +.B \-e \fIfile\fP +True if \fIfile\fP exists. +.TP +.B \-f \fIfile\fP +True if \fIfile\fP exists and is a regular file. +.TP +.B \-g \fIfile\fP +True if \fIfile\fP exists and is set-group-id. +.TP +.B \-h \fIfile\fP +True if \fIfile\fP exists and is a symbolic link. +.TP +.B \-k \fIfile\fP +True if \fIfile\fP exists and its ``sticky'' bit is set. +.TP +.B \-p \fIfile\fP +True if \fIfile\fP exists and is a named pipe (FIFO). +.TP +.B \-r \fIfile\fP +True if \fIfile\fP exists and is readable. +.TP +.B \-s \fIfile\fP +True if \fIfile\fP exists and has a size greater than zero. +.TP +.B \-t \fIfd\fP +True if file descriptor +.I fd +is open and refers to a terminal. +.TP +.B \-u \fIfile\fP +True if \fIfile\fP exists and its set-user-id bit is set. +.TP +.B \-w \fIfile\fP +True if \fIfile\fP exists and is writable. +.TP +.B \-x \fIfile\fP +True if \fIfile\fP exists and is executable. +.TP +.B \-O \fIfile\fP +True if \fIfile\fP exists and is owned by the effective user id. +.TP +.B \-G \fIfile\fP +True if \fIfile\fP exists and is owned by the effective group id. +.TP +.B \-L \fIfile\fP +True if \fIfile\fP exists and is a symbolic link. +.TP +.B \-S \fIfile\fP +True if \fIfile\fP exists and is a socket. +.TP +.B \-N \fIfile\fP +True if \fIfile\fP exists and has been modified since it was last read. +.TP +\fIfile1\fP \-\fBnt\fP \fIfile2\fP +True if \fIfile1\fP is newer (according to modification date) than \fIfile2\fP, +or if \fIfile1\fP exists and \fPfile2\fP does not. +.TP +\fIfile1\fP \-\fBot\fP \fIfile2\fP +True if \fIfile1\fP is older than \fIfile2\fP, or if \fIfile2\fP exists +and \fIfile1\fP does not. +.TP +\fIfile1\fP \fB\-ef\fP \fIfile2\fP +True if \fIfile1\fP and \fIfile2\fP refer to the same device and +inode numbers. +.TP +.B \-o \fIoptname\fP +True if shell option +.I optname +is enabled. +See the list of options under the description of the +.B \-o +option to the +.B set +builtin below. +.TP +.B \-z \fIstring\fP +True if the length of \fIstring\fP is zero. +.TP +.B \-n \fIstring\fP +.TP +\fIstring\fP +True if the length of +.I string +is non-zero. +.TP +\fIstring1\fP \fB==\fP \fIstring2\fP +True if the strings are equal. \fB=\fP may be used in place of +\fB==\fP for strict POSIX compliance. +.TP +\fIstring1\fP \fB!=\fP \fIstring2\fP +True if the strings are not equal. +.TP +\fIstring1\fP \fB<\fP \fIstring2\fP +True if \fIstring1\fP sorts before \fIstring2\fP lexicographically +in the current locale. +.TP +\fIstring1\fP \fB>\fP \fIstring2\fP +True if \fIstring1\fP sorts after \fIstring2\fP lexicographically +in the current locale. +.TP +.I \fIarg1\fP \fBOP\fP \fIarg2\fP +.SM +.B OP +is one of +.BR \-eq , +.BR \-ne , +.BR \-lt , +.BR \-le , +.BR \-gt , +or +.BR \-ge . +These arithmetic binary operators return true if \fIarg1\fP +is equal to, not equal to, less than, less than or equal to, +greater than, or greater than or equal to \fIarg2\fP, respectively. +.I Arg1 +and +.I arg2 +may be positive or negative integers. +.PD +.SH "SIMPLE COMMAND EXPANSION" +When a simple command is executed, the shell performs the following +expansions, assignments, and redirections, from left to right. +.IP 1. +The words that the parser has marked as variable assignments (those +preceding the command name) and redirections are saved for later +processing. +.IP 2. +The words that are not variable assignments or redirections are +expanded. If any words remain after expansion, the first word +is taken to be the name of the command and the remaining words are +the arguments. +.IP 3. +Redirections are performed as described above under +.SM +.BR REDIRECTION . +.IP 4. +The text after the \fB=\fP in each variable assignment undergoes tilde +expansion, parameter expansion, command substitution, arithmetic expansion, +and quote removal before being assigned to the variable. +.PP +If no command name results, the variable assignments affect the current +shell environment. Otherwise, the variables are added to the environment +of the executed command and do not affect the current shell environment. +If any of the assignments attempts to assign a value to a readonly variable, +an error occurs, and the command exits with a non-zero status. +.PP +If no command name results, redirections are performed, but do not +affect the current shell environment. A redirection error causes the +command to exit with a non-zero status. +.PP +If there is a command name left after expansion, execution proceeds as +described below. Otherwise, the command exits. If one of the expansions +contained a command substitution, the exit status of the command is +the exit status of the last command substitution performed. If there +were no command substitutions, the command exits with a status of zero. +.SH "COMMAND EXECUTION" +After a command has been split into words, if it results in a +simple command and an optional list of arguments, the following +actions are taken. +.PP +If the command name contains no slashes, the shell attempts to +locate it. If there exists a shell function by that name, that +function is invoked as described above in +.SM +.BR FUNCTIONS . +If the name does not match a function, the shell searches for +it in the list of shell builtins. If a match is found, that +builtin is invoked. +.PP +If the name is neither a shell function nor a builtin, +and contains no slashes, +.B bash +searches each element of the +.SM +.B PATH +for a directory containing an executable file by that name. +.B Bash +uses a hash table to remember the full pathnames of executable +files (see +.B hash +under +.SM +.B "SHELL BUILTIN COMMANDS" +below). +A full search of the directories in +.SM +.B PATH +is performed only if the command is not found in the hash table. +If the search is unsuccessful, the shell prints an error +message and returns an exit status of 127. +.PP +If the search is successful, or if the command name contains +one or more slashes, the shell executes the named program in a +separate execution environment. +Argument 0 is set to the name given, and the remaining arguments +to the command are set to the arguments given, if any. +.PP +If this execution fails because the file is not in executable +format, and the file is not a directory, it is assumed to be +a \fIshell script\fP, a file +containing shell commands. A subshell is spawned to execute +it. This subshell reinitializes itself, so +that the effect is as if a new shell had been invoked +to handle the script, with the exception that the locations of +commands remembered by the parent (see +.B hash +below under +.SM +\fBSHELL BUILTIN COMMANDS\fP) +are retained by the child. +.PP +If the program is a file beginning with +.BR #! , +the remainder of the first line specifies an interpreter +for the program. The shell executes the +specified interpreter on operating systems that do not +handle this executable format themselves. The arguments to the +interpreter consist of a single optional argument following the +interpreter name on the first line of the program, followed +by the name of the program, followed by the command +arguments, if any. +.SH COMMAND EXECUTION ENVIRONMENT +The shell has an \fIexecution environment\fP, which consists of the +following: +.sp 1 +.IP \(bu +open files inherited by the shell at invocation, as modified by +redirections supplied to the \fBexec\fP builtin +.IP \(bu +the current working directory as set by \fBcd\fP, \fBpushd\fP, or +\fBpopd\fP, or inherited by the shell at invocation +.IP \(bu +the file creation mode mask as set by \fBumask\fP or inherited from +the shell's parent +.IP \(bu +current traps set by \fBtrap\fP +.IP \(bu +shell parameters that are set by variable assignment or with \fBset\fP +or inherited from the shell's parent in the environment +.IP \(bu +shell functions defined during execution or inherited from the shell's +parent in the environment +.IP \(bu +options enabled at invocation (either by default or with command-line +arguments) or by \fBset\fP +.IP \(bu +options enabled by \fBshopt\fP +.IP \(bu +shell aliases defined with \fBalias\fP +.IP \(bu +various process IDs, including those of background jobs, the value +of \fB$$\fP, and the value of \fB$PPID\fP +.PP +When a simple command other than a builtin or shell function +is to be executed, it +is invoked in a separate execution environment that consists of +the following. Unless otherwise noted, the values are inherited +from the shell. +.sp 1 +.IP \(bu +the shell's open files, plus any modifications and additions specified +by redirections to the command +.IP \(bu +the current working directory +.IP \(bu +the file creation mode mask +.IP \(bu +shell variables and functions marked for export, along with variables +exported for the command, passed in the environment +.IP \(bu +traps caught by the shell are reset to the values the inherited +from the shell's parent, and traps ignored by the shell are ignored +.PP +A command invoked in this separate environment cannot affect the +shell's execution environment. +.PP +Command substitution and asynchronous commands are invoked in a +subshell environment that is a duplicate of the shell environment, +except that traps caught by the shell are reset to the values +that the shell inherited from its parent at invocation. Builtin +commands that are invoked as part of a pipeline are also executed in a +subshell environment. Changes made to the subshell environment +cannot affect the shell's execution environment. +.PP +If a command is followed by a \fB&\fP and job control is not active, the +default standard input for the command is the empty file \fI/dev/null\fP. +Otherwise, the invoked command inherits the file descriptors of the calling +shell as modified by redirections. +.SH ENVIRONMENT +When a program is invoked it is given an array of strings +called the +.IR environment . +This is a list of +\fIname\fP\-\fIvalue\fP pairs, of the form +.IR "name\fR=\fPvalue" . +.PP +The shell provides several ways to manipulate the environment. +On invocation, the shell scans its own environment and +creates a parameter for each name found, automatically marking +it for +.I export +to child processes. Executed commands inherit the environment. +The +.B export +and +.B declare \-x +commands allow parameters and functions to be added to and +deleted from the environment. If the value of a parameter +in the environment is modified, the new value becomes part +of the environment, replacing the old. The environment +inherited by any executed command consists of the shell's +initial environment, whose values may be modified in the shell, +less any pairs removed by the +.B unset +command, plus any additions via the +.B export +and +.B declare \-x +commands. +.PP +The environment for any +.I simple command +or function may be augmented temporarily by prefixing it with +parameter assignments, as described above in +.SM +.BR PARAMETERS . +These assignment statements affect only the environment seen +by that command. +.PP +If the +.B \-k +option is set (see the +.B set +builtin command below), then +.I all +parameter assignments are placed in the environment for a command, +not just those that precede the command name. +.PP +When +.B bash +invokes an external command, the variable +.B _ +is set to the full file name of the command and passed to that +command in its environment. +.SH "EXIT STATUS" +For the shell's purposes, a command which exits with a +zero exit status has succeeded. An exit status of zero +indicates success. A non-zero exit status indicates failure. +When a command terminates on a fatal signal \fIN\fP, \fBbash\fP uses +the value of 128+\fIN\fP as the exit status. +.PP +If a command is not found, the child process created to +execute it returns a status of 127. If a command is found +but is not executable, the return status is 126. +.PP +If a command fails because of an error during expansion or redirection, +the exit status is greater than zero. +.PP +Shell builtin commands return a status of 0 (\fItrue\fP) if +successful, and non-zero (\fIfalse\fP) if an error occurs +while they execute. +All builtins return an exit status of 2 to indicate incorrect usage. +.PP +\fBBash\fP itself returns the exit status of the last command +executed, unless a syntax error occurs, in which case it exits +with a non-zero value. See also the \fBexit\fP builtin +command below. +.SH SIGNALS +When \fBbash\fP is interactive, in the absence of any traps, it ignores +.SM +.B SIGTERM +(so that \fBkill 0\fP does not kill an interactive shell), +and +.SM +.B SIGINT +is caught and handled (so that the \fBwait\fP builtin is interruptible). +In all cases, \fBbash\fP ignores +.SM +.BR SIGQUIT . +If job control is in effect, +.B bash +ignores +.SM +.BR SIGTTIN , +.SM +.BR SIGTTOU , +and +.SM +.BR SIGTSTP . +.PP +Synchronous jobs started by \fBbash\fP have signal handlers +set to the values inherited by the shell from its parent. +When job control is not in effect, asynchronous commands +ignore +.SM +.B SIGINT +and +.SM +.B SIGQUIT +as well. +Commands run as a result of command substitution ignore the +keyboard-generated job control signals +.SM +.BR SIGTTIN , +.SM +.BR SIGTTOU , +and +.SM +.BR SIGTSTP . +.PP +The shell exits by default upon receipt of a +.SM +.BR SIGHUP . +Before exiting, an interactive shell resends the +.SM +.B SIGHUP +to all jobs, running or stopped. +Stopped jobs are sent +.SM +.B SIGCONT +to ensure that they receive the +.SM +.BR SIGHUP . +To prevent the shell from +sending the signal to a particular job, it should be removed from the +jobs table with the +.B disown +builtin (see +.SM +.B "SHELL BUILTIN COMMANDS" +below) or marked +to not receive +.SM +.B SIGHUP +using +.BR "disown \-h" . +.PP +If the +.B huponexit +shell option has been set with +.BR shopt , +.B bash +sends a +.SM +.B SIGHUP +to all jobs when an interactive login shell exits. +.PP +When \fBbash\fP receives a signal for which a trap has been set while +waiting for a command to complete, the trap will not be executed until +the command completes. +When \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP +builtin, the reception of a signal for which a trap has been set will +cause the \fBwait\fP builtin to return immediately with an exit status +greater than 128, immediately after which the trap is executed. +.SH "JOB CONTROL" +.I Job control +refers to the ability to selectively stop (\fIsuspend\fP) +the execution of processes and continue (\fIresume\fP) +their execution at a later point. A user typically employs +this facility via an interactive interface supplied jointly +by the system's terminal driver and +.BR bash . +.PP +The shell associates a +.I job +with each pipeline. It keeps a table of currently executing +jobs, which may be listed with the +.B jobs +command. When +.B bash +starts a job asynchronously (in the +.IR background ), +it prints a line that looks like: +.RS +.PP +[1] 25647 +.RE +.PP +indicating that this job is job number 1 and that the process ID +of the last process in the pipeline associated with this job is 25647. +All of the processes in a single pipeline are members of the same job. +.B Bash +uses the +.I job +abstraction as the basis for job control. +.PP +To facilitate the implementation of the user interface to job +control, the operating system maintains the notion of a \fIcurrent terminal +process group ID\fP. Members of this process group (processes whose +process group ID is equal to the current terminal process group ID) +receive keyboard-generated signals such as +.SM +.BR SIGINT . +These processes are said to be in the +.IR foreground . +.I Background +processes are those whose process group ID differs from the terminal's; +such processes are immune to keyboard-generated signals. +Only foreground processes are allowed to read from or write to the +terminal. Background processes which attempt to read from (write to) the +terminal are sent a +.SM +.B SIGTTIN (SIGTTOU) +signal by the terminal driver, +which, unless caught, suspends the process. +.PP +If the operating system on which +.B bash +is running supports +job control, +.B bash +contains facilities to use it. +Typing the +.I suspend +character (typically +.BR ^Z , +Control-Z) while a process is running +causes that process to be stopped and returns control to +.BR bash . +Typing the +.I "delayed suspend" +character (typically +.BR ^Y , +Control-Y) causes the process to be stopped when it +attempts to read input from the terminal, and control to +be returned to +.BR bash . +The user may then manipulate the state of this job, using the +.B bg +command to continue it in the background, the +.B fg +command to continue it in the foreground, or +the +.B kill +command to kill it. A \fB^Z\fP takes effect immediately, +and has the additional side effect of causing pending output +and typeahead to be discarded. +.PP +There are a number of ways to refer to a job in the shell. +The character +.B % +introduces a job name. Job number +.I n +may be referred to as +.BR %n . +A job may also be referred to using a prefix of the name used to +start it, or using a substring that appears in its command line. +For example, +.B %ce +refers to a stopped +.B ce +job. If a prefix matches more than one job, +.B bash +reports an error. Using +.BR %?ce , +on the other hand, refers to any job containing the string +.B ce +in its command line. If the substring matches more than one job, +.B bash +reports an error. The symbols +.B %% +and +.B %+ +refer to the shell's notion of the +.IR "current job" , +which is the last job stopped while it was in +the foreground or started in the background. +The +.I "previous job" +may be referenced using +.BR %\- . +In output pertaining to jobs (e.g., the output of the +.B jobs +command), the current job is always flagged with a +.BR + , +and the previous job with a +.BR \- . +.PP +Simply naming a job can be used to bring it into the +foreground: +.B %1 +is a synonym for +\fB``fg %1''\fP, +bringing job 1 from the background into the foreground. +Similarly, +.B ``%1 &'' +resumes job 1 in the background, equivalent to +\fB``bg %1''\fP. +.PP +The shell learns immediately whenever a job changes state. +Normally, +.B bash +waits until it is about to print a prompt before reporting +changes in a job's status so as to not interrupt +any other output. If the +.B \-b +option to the +.B set +builtin command +is enabled, +.B bash +reports such changes immediately. +Any trap on +.SM +.B SIGCHLD +is executed for each child that exits. +.PP +If an attempt to exit +.B bash +is made while jobs are stopped, the shell prints a warning message. The +.B jobs +command may then be used to inspect their status. +If a second attempt to exit is made without an intervening command, +the shell does not print another warning, and the stopped +jobs are terminated. +.SH PROMPTING +When executing interactively, +.B bash +displays the primary prompt +.SM +.B PS1 +when it is ready to read a command, and the secondary prompt +.SM +.B PS2 +when it needs more input to complete a command. +.B Bash +allows these prompt strings to be customized by inserting a number of +backslash-escaped special characters that are decoded as follows: +.RS +.PD 0 +.TP +.B \ea +an ASCII bell character (07) +.TP +.B \ed +the date in "Weekday Month Date" format (e.g., "Tue May 26") +.TP +.B \eD{\fIformat\fP} +the \fIformat\fP is passed to \fIstrftime\fP(3) and the result is inserted +into the prompt string; an empty \fIformat\fP results in a locale-specific +time representation. The braces are required +.TP +.B \ee +an ASCII escape character (033) +.TP +.B \eh +the hostname up to the first `.' +.TP +.B \eH +the hostname +.TP +.B \ej +the number of jobs currently managed by the shell +.TP +.B \el +the basename of the shell's terminal device name +.TP +.B \en +newline +.TP +.B \er +carriage return +.TP +.B \es +the name of the shell, the basename of +.B $0 +(the portion following the final slash) +.TP +.B \et +the current time in 24-hour HH:MM:SS format +.TP +.B \eT +the current time in 12-hour HH:MM:SS format +.TP +.B \e@ +the current time in 12-hour am/pm format +.TP +.B \eA +the current time in 24-hour HH:MM format +.TP +.B \eu +the username of the current user +.TP +.B \ev +the version of \fBbash\fP (e.g., 2.00) +.TP +.B \eV +the release of \fBbash\fP, version + patchelvel (e.g., 2.00.0) +.TP +.B \ew +the current working directory +.TP +.B \eW +the basename of the current working directory +.TP +.B \e! +the history number of this command +.TP +.B \e# +the command number of this command +.TP +.B \e$ +if the effective UID is 0, a +.BR # , +otherwise a +.B $ +.TP +.B \e\fInnn\fP +the character corresponding to the octal number \fInnn\fP +.TP +.B \e\e +a backslash +.TP +.B \e[ +begin a sequence of non-printing characters, which could be used to +embed a terminal control sequence into the prompt +.TP +.B \e] +end a sequence of non-printing characters +.PD +.RE +.PP +The command number and the history number are usually different: +the history number of a command is its position in the history +list, which may include commands restored from the history file +(see +.SM +.B HISTORY +below), while the command number is the position in the sequence +of commands executed during the current shell session. +After the string is decoded, it is expanded via +parameter expansion, command substitution, arithmetic +expansion, and quote removal, subject to the value of the +.B promptvars +shell option (see the description of the +.B shopt +command under +.SM +.B "SHELL BUILTIN COMMANDS" +below). +.SH READLINE +This is the library that handles reading input when using an interactive +shell, unless the +.B \-\-noediting +option is given at shell invocation. +By default, the line editing commands are similar to those of emacs. +A vi-style line editing interface is also available. +To turn off line editing after the shell is running, use the +.B +o emacs +or +.B +o vi +options to the +.B set +builtin (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.SS "Readline Notation" +.PP +In this section, the emacs-style notation is used to denote +keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n +means Control\-N. Similarly, +.I meta +keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards +without a +.I meta +key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key +then the +.I x +key. This makes ESC the \fImeta prefix\fP. +The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP, +or press the Escape key +then hold the Control key while pressing the +.I x +key.) +.PP +Readline commands may be given numeric +.IR arguments , +which normally act as a repeat count. +Sometimes, however, it is the sign of the argument that is significant. +Passing a negative argument to a command that acts in the forward +direction (e.g., \fBkill\-line\fP) causes that command to act in a +backward direction. +Commands whose behavior with arguments deviates from this are noted +below. +.PP +When a command is described as \fIkilling\fP text, the text +deleted is saved for possible future retrieval +(\fIyanking\fP). The killed text is saved in a +\fIkill ring\fP. Consecutive kills cause the text to be +accumulated into one unit, which can be yanked all at once. +Commands which do not kill text separate the chunks of text +on the kill ring. +.SS "Readline Initialization" +.PP +Readline is customized by putting commands in an initialization +file (the \fIinputrc\fP file). +The name of this file is taken from the value of the +.SM +.B INPUTRC +variable. If that variable is unset, the default is +.IR ~/.inputrc . +When a program which uses the readline library starts up, the +initialization file is read, and the key bindings and variables +are set. +There are only a few basic constructs allowed in the +readline initialization file. +Blank lines are ignored. +Lines beginning with a \fB#\fP are comments. +Lines beginning with a \fB$\fP indicate conditional constructs. +Other lines denote key bindings and variable settings. +.PP +The default key-bindings may be changed with an +.I inputrc +file. +Other programs that use this library may add their own commands +and bindings. +.PP +For example, placing +.RS +.PP +M\-Control\-u: universal\-argument +.RE +or +.RS +C\-Meta\-u: universal\-argument +.RE +into the +.I inputrc +would make M\-C\-u execute the readline command +.IR universal\-argument . +.PP +The following symbolic character names are recognized: +.IR RUBOUT , +.IR DEL , +.IR ESC , +.IR LFD , +.IR NEWLINE , +.IR RET , +.IR RETURN , +.IR SPC , +.IR SPACE , +and +.IR TAB . +.PP +In addition to command names, readline allows keys to be bound +to a string that is inserted when the key is pressed (a \fImacro\fP). +.SS "Readline Key Bindings" +.PP +The syntax for controlling key bindings in the +.I inputrc +file is simple. All that is required is the name of the +command or the text of a macro and a key sequence to which +it should be bound. The name may be specified in one of two ways: +as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP +prefixes, or as a key sequence. +.PP +When using the form \fBkeyname\fP:\^\fIfunction\-name\fP or \fImacro\fP, +.I keyname +is the name of a key spelled out in English. For example: +.sp +.RS +Control-u: universal\-argument +.br +Meta-Rubout: backward-kill-word +.br +Control-o: "> output" +.RE +.LP +In the above example, +.I C\-u +is bound to the function +.BR universal\-argument , +.I M\-DEL +is bound to the function +.BR backward\-kill\-word , +and +.I C\-o +is bound to run the macro +expressed on the right hand side (that is, to insert the text +.if t \f(CW> output\fP +.if n ``> output'' +into the line). +.PP +In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP, +.B keyseq +differs from +.B keyname +above in that strings denoting +an entire key sequence may be specified by placing the sequence +within double quotes. Some GNU Emacs style key escapes can be +used, as in the following example, but the symbolic character names +are not recognized. +.sp +.RS +"\eC\-u": universal\-argument +.br +"\eC\-x\eC\-r": re\-read\-init\-file +.br +"\ee[11~": "Function Key 1" +.RE +.PP +In this example, +.I C\-u +is again bound to the function +.BR universal\-argument . +.I "C\-x C\-r" +is bound to the function +.BR re\-read\-init\-file , +and +.I "ESC [ 1 1 ~" +is bound to insert the text +.if t \f(CWFunction Key 1\fP. +.if n ``Function Key 1''. +.PP +The full set of GNU Emacs style escape sequences is +.RS +.PD 0 +.TP +.B \eC\- +control prefix +.TP +.B \eM\- +meta prefix +.TP +.B \ee +an escape character +.TP +.B \e\e +backslash +.TP +.B \e" +literal " +.TP +.B \e' +literal ' +.RE +.PD +.PP +In addition to the GNU Emacs style escape sequences, a second +set of backslash escapes is available: +.RS +.PD 0 +.TP +.B \ea +alert (bell) +.TP +.B \eb +backspace +.TP +.B \ed +delete +.TP +.B \ef +form feed +.TP +.B \en +newline +.TP +.B \er +carriage return +.TP +.B \et +horizontal tab +.TP +.B \ev +vertical tab +.TP +.B \e\fInnn\fP +the eight-bit character whose value is the octal value \fInnn\fP +(one to three digits) +.TP +.B \ex\fIHH\fP +the eight-bit character whose value is the hexadecimal value \fIHH\fP +(one or two hex digits) +.RE +.PD +.PP +When entering the text of a macro, single or double quotes must +be used to indicate a macro definition. +Unquoted text is assumed to be a function name. +In the macro body, the backslash escapes described above are expanded. +Backslash will quote any other character in the macro text, +including " and '. +.PP +.B Bash +allows the current readline key bindings to be displayed or modified +with the +.B bind +builtin command. The editing mode may be switched during interactive +use by using the +.B \-o +option to the +.B set +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). +.SS "Readline Variables" +.PP +Readline has variables that can be used to further customize its +behavior. A variable may be set in the +.I inputrc +file with a statement of the form +.RS +.PP +\fBset\fP \fIvariable\-name\fP \fIvalue\fP +.RE +.PP +Except where noted, readline variables can take the values +.B On +or +.BR Off . +The variables and their default values are: +.PP +.PD 0 +.TP +.B bell\-style (audible) +Controls what happens when readline wants to ring the terminal bell. +If set to \fBnone\fP, readline never rings the bell. If set to +\fBvisible\fP, readline uses a visible bell if one is available. +If set to \fBaudible\fP, readline attempts to ring the terminal's bell. +.TP +.B comment\-begin (``#'') +The string that is inserted when the readline +.B insert\-comment +command is executed. +This command is bound to +.B M\-# +in emacs mode and to +.B # +in vi command mode. +.TP +.B completion\-ignore\-case (Off) +If set to \fBOn\fP, readline performs filename matching and completion +in a case\-insensitive fashion. +.TP +.B completion\-query\-items (100) +This determines when the user is queried about viewing +the number of possible completions +generated by the \fBpossible\-completions\fP command. +It may be set to any integer value greater than or equal to +zero. If the number of possible completions is greater than +or equal to the value of this variable, the user is asked whether +or not he wishes to view them; otherwise they are simply listed +on the terminal. +.TP +.B convert\-meta (On) +If set to \fBOn\fP, readline will convert characters with the +eighth bit set to an ASCII key sequence +by stripping the eighth bit and prefixing an +escape character (in effect, using escape as the \fImeta prefix\fP). +.TP +.B disable\-completion (Off) +If set to \fBOn\fP, readline will inhibit word completion. Completion +characters will be inserted into the line as if they had been +mapped to \fBself-insert\fP. +.TP +.B editing\-mode (emacs) +Controls whether readline begins with a set of key bindings similar +to \fIemacs\fP or \fIvi\fP. +.B editing\-mode +can be set to either +.B emacs +or +.BR vi . +.TP +.B enable\-keypad (Off) +When set to \fBOn\fP, readline will try to enable the application +keypad when it is called. Some systems need this to enable the +arrow keys. +.TP +.B expand\-tilde (Off) +If set to \fBon\fP, tilde expansion is performed when readline +attempts word completion. +.TP +.B history-preserve-point +If set to \fBon\fP, the history code attempts to place point at the +same location on each history line retrived with \fBprevious-history\fP +or \fBnext-history\fP. +.TP +.B horizontal\-scroll\-mode (Off) +When set to \fBOn\fP, makes readline use a single line for display, +scrolling the input horizontally on a single screen line when it +becomes longer than the screen width rather than wrapping to a new line. +.TP +.B input\-meta (Off) +If set to \fBOn\fP, readline will enable eight-bit input (that is, +it will not strip the high bit from the characters it reads), +regardless of what the terminal claims it can support. The name +.B meta\-flag +is a synonym for this variable. +.TP +.B isearch\-terminators (``C\-[C\-J'') +The string of characters that should terminate an incremental +search without subsequently executing the character as a command. +If this variable has not been given a value, the characters +\fIESC\fP and \fIC\-J\fP will terminate an incremental search. +.TP +.B keymap (emacs) +Set the current readline keymap. The set of valid keymap names is +\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi, +vi\-command\fP, and +.IR vi\-insert . +\fIvi\fP is equivalent to \fIvi\-command\fP; \fIemacs\fP is +equivalent to \fIemacs\-standard\fP. The default value is +.IR emacs ; +the value of +.B editing\-mode +also affects the default keymap. +.TP +.B mark\-directories (On) +If set to \fBOn\fP, completed directory names have a slash +appended. +.TP +.B mark\-modified\-lines (Off) +If set to \fBOn\fP, history lines that have been modified are displayed +with a preceding asterisk (\fB*\fP). +.TP +.B mark\-symlinked\-directories (Off) +If set to \fBOn\fP, completed names which are symbolic links to directories +have a slash appended (subject to the value of +\fBmark\-directories\fP). +.TP +.B match\-hidden\-files (On) +This variable, when set to \fBOn\fP, causes readline to match files whose +names begin with a `.' (hidden files) when performing filename +completion, unless the leading `.' is +supplied by the user in the filename to be completed. +.TP +.B output\-meta (Off) +If set to \fBOn\fP, readline will display characters with the +eighth bit set directly rather than as a meta-prefixed escape +sequence. +.TP +.B page\-completions (On) +If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager +to display a screenful of possible completions at a time. +.TP +.B print\-completions\-horizontally (Off) +If set to \fBOn\fP, readline will display completions with matches +sorted horizontally in alphabetical order, rather than down the screen. +.TP +.B show\-all\-if\-ambiguous (Off) +This alters the default behavior of the completion functions. If +set to +.BR on , +words which have more than one possible completion cause the +matches to be listed immediately instead of ringing the bell. +.TP +.B visible\-stats (Off) +If set to \fBOn\fP, a character denoting a file's type as reported +by \fIstat\fP(2) is appended to the filename when listing possible +completions. +.PD +.SS "Readline Conditional Constructs" +.PP +Readline implements a facility similar in spirit to the conditional +compilation features of the C preprocessor which allows key +bindings and variable settings to be performed as the result +of tests. There are four parser directives used. +.IP \fB$if\fP +The +.B $if +construct allows bindings to be made based on the +editing mode, the terminal being used, or the application using +readline. The text of the test extends to the end of the line; +no characters are required to isolate it. +.RS +.IP \fBmode\fP +The \fBmode=\fP form of the \fB$if\fP directive is used to test +whether readline is in emacs or vi mode. +This may be used in conjunction +with the \fBset keymap\fP command, for instance, to set bindings in +the \fIemacs\-standard\fP and \fIemacs\-ctlx\fP keymaps only if +readline is starting out in emacs mode. +.IP \fBterm\fP +The \fBterm=\fP form may be used to include terminal-specific +key bindings, perhaps to bind the key sequences output by the +terminal's function keys. The word on the right side of the +.B = +is tested against the both full name of the terminal and the portion +of the terminal name before the first \fB\-\fP. This allows +.I sun +to match both +.I sun +and +.IR sun\-cmd , +for instance. +.IP \fBapplication\fP +The \fBapplication\fP construct is used to include +application-specific settings. Each program using the readline +library sets the \fIapplication name\fP, and an initialization +file can test for a particular value. +This could be used to bind key sequences to functions useful for +a specific program. For instance, the following command adds a +key sequence that quotes the current or previous word in Bash: +.sp 1 +.RS +.nf +\fB$if\fP Bash +# Quote the current or previous word +"\eC\-xq": "\eeb\e"\eef\e"" +\fB$endif\fP +.fi +.RE +.RE +.IP \fB$endif\fP +This command, as seen in the previous example, terminates an +\fB$if\fP command. +.IP \fB$else\fP +Commands in this branch of the \fB$if\fP directive are executed if +the test fails. +.IP \fB$include\fP +This directive takes a single filename as an argument and reads commands +and bindings from that file. For example, the following directive +would read \fI/etc/inputrc\fP: +.sp 1 +.RS +.nf +\fB$include\fP \^ \fI/etc/inputrc\fP +.fi +.RE +.SS Searching +.PP +Readline provides commands for searching through the command history +(see +.SM +.B HISTORY +below) for lines containing a specified string. +There are two search modes: +.I incremental +and +.IR non-incremental . +.PP +Incremental searches begin before the user has finished typing the +search string. +As each character of the search string is typed, readline displays +the next entry from the history matching the string typed so far. +An incremental search requires only as many characters as needed to +find the desired history entry. +The characters present in the value of the \fBisearch-terminators\fP +variable are used to terminate an incremental search. +If that variable has not been assigned a value the Escape and +Control-J characters will terminate an incremental search. +Control-G will abort an incremental search and restore the original +line. +When the search is terminated, the history entry containing the +search string becomes the current line. +.PP +To find other matching entries in the history list, type Control-S or +Control-R as appropriate. +This will search backward or forward in the history for the next +entry matching the search string typed so far. +Any other key sequence bound to a readline command will terminate +the search and execute that command. +For instance, a \fInewline\fP will terminate the search and accept +the line, thereby executing the command from the history list. +.PP +Readline remembers the last incremental search string. If two +Control-Rs are typed without any intervening characters defining a +new search string, any remembered search string is used. +.PP +Non-incremental searches read the entire search string before starting +to search for matching history lines. The search string may be +typed by the user or be part of the contents of the current line. +.SS "Readline Command Names" +.PP +The following is a list of the names of the commands and the default +key sequences to which they are bound. +Command names without an accompanying key sequence are unbound by default. +In the following descriptions, \fIpoint\fP refers to the current cursor +position, and \fImark\fP refers to a cursor position saved by the +\fBset\-mark\fP command. +The text between the point and mark is referred to as the \fIregion\fP. +.SS Commands for Moving +.PP +.PD 0 +.TP +.B beginning\-of\-line (C\-a) +Move to the start of the current line. +.TP +.B end\-of\-line (C\-e) +Move to the end of the line. +.TP +.B forward\-char (C\-f) +Move forward a character. +.TP +.B backward\-char (C\-b) +Move back a character. +.TP +.B forward\-word (M\-f) +Move forward to the end of the next word. Words are composed of +alphanumeric characters (letters and digits). +.TP +.B backward\-word (M\-b) +Move back to the start of the current or previous word. Words are +composed of alphanumeric characters (letters and digits). +.TP +.B clear\-screen (C\-l) +Clear the screen leaving the current line at the top of the screen. +With an argument, refresh the current line without clearing the +screen. +.TP +.B redraw\-current\-line +Refresh the current line. +.PD +.SS Commands for Manipulating the History +.PP +.PD 0 +.TP +.B accept\-line (Newline, Return) +Accept the line regardless of where the cursor is. If this line is +non-empty, add it to the history list according to the state of the +.SM +.B HISTCONTROL +variable. If the line is a modified history +line, then restore the history line to its original state. +.TP +.B previous\-history (C\-p) +Fetch the previous command from the history list, moving back in +the list. +.TP +.B next\-history (C\-n) +Fetch the next command from the history list, moving forward in the +list. +.TP +.B beginning\-of\-history (M\-<) +Move to the first line in the history. +.TP +.B end\-of\-history (M\->) +Move to the end of the input history, i.e., the line currently being +entered. +.TP +.B reverse\-search\-history (C\-r) +Search backward starting at the current line and moving `up' through +the history as necessary. This is an incremental search. +.TP +.B forward\-search\-history (C\-s) +Search forward starting at the current line and moving `down' through +the history as necessary. This is an incremental search. +.TP +.B non\-incremental\-reverse\-search\-history (M\-p) +Search backward through the history starting at the current line +using a non-incremental search for a string supplied by the user. +.TP +.B non\-incremental\-forward\-search\-history (M\-n) +Search forward through the history using a non-incremental search for +a string supplied by the user. +.TP +.B history\-search\-forward +Search forward through the history for the string of characters +between the start of the current line and the point. +This is a non-incremental search. +.TP +.B history\-search\-backward +Search backward through the history for the string of characters +between the start of the current line and the point. +This is a non-incremental search. +.TP +.B yank\-nth\-arg (M\-C\-y) +Insert the first argument to the previous command (usually +the second word on the previous line) at point. +With an argument +.IR n , +insert the \fIn\fPth word from the previous command (the words +in the previous command begin with word 0). A negative argument +inserts the \fIn\fPth word from the end of the previous command. +.TP +.B +yank\-last\-arg (M\-.\^, M\-_\^) +Insert the last argument to the previous command (the last word of +the previous history entry). With an argument, +behave exactly like \fByank\-nth\-arg\fP. +Successive calls to \fByank\-last\-arg\fP move back through the history +list, inserting the last argument of each line in turn. +.TP +.B shell\-expand\-line (M\-C\-e) +Expand the line as the shell does. This +performs alias and history expansion as well as all of the shell +word expansions. See +.SM +.B HISTORY EXPANSION +below for a description of history expansion. +.TP +.B history\-expand\-line (M\-^) +Perform history expansion on the current line. +See +.SM +.B HISTORY EXPANSION +below for a description of history expansion. +.TP +.B magic\-space +Perform history expansion on the current line and insert a space. +See +.SM +.B HISTORY EXPANSION +below for a description of history expansion. +.TP +.B alias\-expand\-line +Perform alias expansion on the current line. +See +.SM +.B ALIASES +above for a description of alias expansion. +.TP +.B history\-and\-alias\-expand\-line +Perform history and alias expansion on the current line. +.TP +.B insert\-last\-argument (M\-.\^, M\-_\^) +A synonym for \fByank\-last\-arg\fP. +.TP +.B operate\-and\-get\-next (C\-o) +Accept the current line for execution and fetch the next line +relative to the current line from the history for editing. Any +argument is ignored. +.TP +.B edit\-and\-execute\-command (C\-xC\-e) +Invoke an editor on the current command line, and execute the result as shell +commands. +\fBBash\fP attempts to invoke +.SM +.BR $FCEDIT , +.SM +.BR $EDITOR , +and \fIemacs\fP as the editor, in that order. +.PD +.SS Commands for Changing Text +.PP +.PD 0 +.TP +.B 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 \fBdelete\-char\fP, +then return +.SM +.BR EOF . +.TP +.B backward\-delete\-char (Rubout) +Delete the character behind the cursor. When given a numeric argument, +save the deleted text on the kill ring. +.TP +.B forward\-backward\-delete\-char +Delete the character under the cursor, unless the cursor is at the +end of the line, in which case the character behind the cursor is +deleted. +.TP +.B quoted\-insert (C\-q, C\-v) +Add the next character typed to the line verbatim. This is +how to insert characters like \fBC\-q\fP, for example. +.TP +.B tab\-insert (C\-v TAB) +Insert a tab character. +.TP +.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...) +Insert the character typed. +.TP +.B transpose\-chars (C\-t) +Drag the character before point forward over the character at point, +moving point forward as well. +If point is at the end of the line, then this transposes +the two characters before point. +Negative arguments have no effect. +.TP +.B transpose\-words (M\-t) +Drag the word before point past the word after point, +moving point over that word as well. +If point is at the end of the line, this transposes +the last two words on the line. +.TP +.B upcase\-word (M\-u) +Uppercase the current (or following) word. With a negative argument, +uppercase the previous word, but do not move point. +.TP +.B downcase\-word (M\-l) +Lowercase the current (or following) word. With a negative argument, +lowercase the previous word, but do not move point. +.TP +.B capitalize\-word (M\-c) +Capitalize the current (or following) word. With a negative argument, +capitalize the previous word, but do not move point. +.TP +.B overwrite\-mode +Toggle overwrite mode. With an explicit positive numeric argument, +switches to overwrite mode. With an explicit non-positive numeric +argument, switches to insert mode. This command affects only +\fBemacs\fP mode; \fBvi\fP mode does overwrite differently. +Each call to \fIreadline()\fP starts in insert mode. +In overwrite mode, characters bound to \fBself\-insert\fP replace +the text at point rather than pushing the text to the right. +Characters bound to \fBbackward\-delete\-char\fP replace the character +before point with a space. By default, this command is unbound. +.PD +.SS Killing and Yanking +.PP +.PD 0 +.TP +.B kill\-line (C\-k) +Kill the text from point to the end of the line. +.TP +.B backward\-kill\-line (C\-x Rubout) +Kill backward to the beginning of the line. +.TP +.B unix\-line\-discard (C\-u) +Kill backward from point to the beginning of the line. +The killed text is saved on the kill-ring. +.\" There is no real difference between this and backward-kill-line +.TP +.B kill\-whole\-line +Kill all characters on the current line, no matter where point is. +.TP +.B kill\-word (M\-d) +Kill from point to the end of the current word, or if between +words, to the end of the next word. +Word boundaries are the same as those used by \fBforward\-word\fP. +.TP +.B backward\-kill\-word (M\-Rubout) +Kill the word behind point. +Word boundaries are the same as those used by \fBbackward\-word\fP. +.TP +.B unix\-word\-rubout (C\-w) +Kill the word behind point, using white space as a word boundary. +The killed text is saved on the kill-ring. +.TP +.B delete\-horizontal\-space (M\-\e) +Delete all spaces and tabs around point. +.TP +.B kill\-region +Kill the text in the current region. +.TP +.B copy\-region\-as\-kill +Copy the text in the region to the kill buffer. +.TP +.B copy\-backward\-word +Copy the word before point to the kill buffer. +The word boundaries are the same as \fBbackward\-word\fP. +.TP +.B copy\-forward\-word +Copy the word following point to the kill buffer. +The word boundaries are the same as \fBforward\-word\fP. +.TP +.B yank (C\-y) +Yank the top of the kill ring into the buffer at point. +.TP +.B yank\-pop (M\-y) +Rotate the kill ring, and yank the new top. Only works following +.B yank +or +.BR yank\-pop . +.PD +.SS Numeric Arguments +.PP +.PD 0 +.TP +.B digit\-argument (M\-0, M\-1, ..., M\-\-) +Add this digit to the argument already accumulating, or start a new +argument. M\-\- starts a negative argument. +.TP +.B universal\-argument +This is another way to specify an argument. +If this command is followed by one or more digits, optionally with a +leading minus sign, those digits define the argument. +If the command is followed by digits, executing +.B universal\-argument +again ends the numeric argument, but is otherwise ignored. +As a special case, if this command is immediately followed by a +character that is neither a digit or minus sign, the argument count +for the next command is multiplied by four. +The argument count is initially one, so executing this function the +first time makes the argument count four, a second time makes the +argument count sixteen, and so on. +.PD +.SS Completing +.PP +.PD 0 +.TP +.B complete (TAB) +Attempt to perform completion on the text before point. +.B Bash +attempts completion treating the text as a variable (if the +text begins with \fB$\fP), username (if the text begins with +\fB~\fP), hostname (if the text begins with \fB@\fP), or +command (including aliases and functions) in turn. If none +of these produces a match, filename completion is attempted. +.TP +.B possible\-completions (M\-?) +List the possible completions of the text before point. +.TP +.B insert\-completions (M\-*) +Insert all completions of the text before point +that would have been generated by +\fBpossible\-completions\fP. +.TP +.B menu\-complete +Similar to \fBcomplete\fP, but replaces the word to be completed +with a single match from the list of possible completions. +Repeated execution of \fBmenu\-complete\fP steps through the list +of possible completions, inserting each match in turn. +At the end of the list of completions, the bell is rung +(subject to the setting of \fBbell\-style\fP) +and the original text is restored. +An argument of \fIn\fP moves \fIn\fP positions forward in the list +of matches; a negative argument may be used to move backward +through the list. +This command is intended to be bound to \fBTAB\fP, but is unbound +by default. +.TP +.B delete\-char\-or\-list +Deletes the character under the cursor if not at the beginning or +end of the line (like \fBdelete\-char\fP). +If at the end of the line, behaves identically to +\fBpossible\-completions\fP. +This command is unbound by default. +.TP +.B complete\-filename (M\-/) +Attempt filename completion on the text before point. +.TP +.B possible\-filename\-completions (C\-x /) +List the possible completions of the text before point, +treating it as a filename. +.TP +.B complete\-username (M\-~) +Attempt completion on the text before point, treating +it as a username. +.TP +.B possible\-username\-completions (C\-x ~) +List the possible completions of the text before point, +treating it as a username. +.TP +.B complete\-variable (M\-$) +Attempt completion on the text before point, treating +it as a shell variable. +.TP +.B possible\-variable\-completions (C\-x $) +List the possible completions of the text before point, +treating it as a shell variable. +.TP +.B complete\-hostname (M\-@) +Attempt completion on the text before point, treating +it as a hostname. +.TP +.B possible\-hostname\-completions (C\-x @) +List the possible completions of the text before point, +treating it as a hostname. +.TP +.B complete\-command (M\-!) +Attempt completion on the text before point, treating +it as a command name. Command completion attempts to +match the text against aliases, reserved words, shell +functions, shell builtins, and finally executable filenames, +in that order. +.TP +.B possible\-command\-completions (C\-x !) +List the possible completions of the text before point, +treating it as a command name. +.TP +.B dynamic\-complete\-history (M\-TAB) +Attempt completion on the text before point, comparing +the text against lines from the history list for possible +completion matches. +.TP +.B complete\-into\-braces (M\-{) +Perform filename completion and insert the list of possible completions +enclosed within braces so the list is available to the shell (see +.B Brace Expansion +above). +.PD +.SS Keyboard Macros +.PP +.PD 0 +.TP +.B start\-kbd\-macro (C\-x (\^) +Begin saving the characters typed into the current keyboard macro. +.TP +.B end\-kbd\-macro (C\-x )\^) +Stop saving the characters typed into the current keyboard macro +and store the definition. +.TP +.B call\-last\-kbd\-macro (C\-x e) +Re-execute the last keyboard macro defined, by making the characters +in the macro appear as if typed at the keyboard. +.PD +.SS Miscellaneous +.PP +.PD 0 +.TP +.B re\-read\-init\-file (C\-x C\-r) +Read in the contents of the \fIinputrc\fP file, and incorporate +any bindings or variable assignments found there. +.TP +.B abort (C\-g) +Abort the current editing command and +ring the terminal's bell (subject to the setting of +.BR bell\-style ). +.TP +.B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...) +If the metafied character \fIx\fP is lowercase, run the command +that is bound to the corresponding uppercase character. +.TP +.B prefix\-meta (ESC) +Metafy the next character typed. +.SM +.B ESC +.B f +is equivalent to +.BR Meta\-f . +.TP +.B undo (C\-_, C\-x C\-u) +Incremental undo, separately remembered for each line. +.TP +.B revert\-line (M\-r) +Undo all changes made to this line. This is like executing the +.B undo +command enough times to return the line to its initial state. +.TP +.B tilde\-expand (M\-&) +Perform tilde expansion on the current word. +.TP +.B set\-mark (C\-@, M\-<space>) +Set the mark to the point. If a +numeric argument is supplied, the mark is set to that position. +.TP +.B exchange\-point\-and\-mark (C\-x C\-x) +Swap the point with the mark. The current cursor position is set to +the saved position, and the old cursor position is saved as the mark. +.TP +.B character\-search (C\-]) +A character is read and point is moved to the next occurrence of that +character. A negative count searches for previous occurrences. +.TP +.B character\-search\-backward (M\-C\-]) +A character is read and point is moved to the previous occurrence of that +character. A negative count searches for subsequent occurrences. +.TP +.B insert\-comment (M\-#) +Without a numeric argument, the value of the readline +.B comment\-begin +variable is inserted at the beginning of the current line. +If a numeric argument is supplied, this command acts as a toggle: if +the characters at the beginning of the line do not match the value +of \fBcomment\-begin\fP, the value is inserted, otherwise +the characters in \fBcomment-begin\fP are deleted from the beginning of +the line. +In either case, the line is accepted as if a newline had been typed. +The default value of +\fBcomment\-begin\fP causes this command to make the current line +a shell comment. +If a numeric argument causes the comment character to be removed, the line +will be executed by the shell. +.TP +.B glob\-complete\-word (M\-g) +The word before point is treated as a pattern for pathname expansion, +with an asterisk implicitly appended. This pattern is used to +generate a list of matching file names for possible completions. +.TP +.B glob\-expand\-word (C\-x *) +The word before point is treated as a pattern for pathname expansion, +and the list of matching file names is inserted, replacing the word. +If a numeric argument is supplied, an asterisk is appended before +pathname expansion. +.TP +.B glob\-list\-expansions (C\-x g) +The list of expansions that would have been generated by +.B glob\-expand\-word +is displayed, and the line is redrawn. +If a numeric argument is supplied, an asterisk is appended before +pathname expansion. +.TP +.B dump\-functions +Print all of the functions and their key bindings to the +readline output stream. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an \fIinputrc\fP file. +.TP +.B dump\-variables +Print all of the settable readline variables and their values to the +readline output stream. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an \fIinputrc\fP file. +.TP +.B dump\-macros +Print all of the readline key sequences bound to macros and the +strings they ouput. If a numeric argument is supplied, +the output is formatted in such a way that it can be made part +of an \fIinputrc\fP file. +.TP +.B display\-shell\-version (C\-x C\-v) +Display version information about the current instance of +.BR bash . +.PD +.SS Programmable Completion +.PP +When word completion is attempted for an argument to a command for +which a completion specification (a \fIcompspec\fP) has been defined +using the \fBcomplete\fP builtin (see +.SM +.B "SHELL BUILTIN COMMANDS" +below), the programmable completion facilities are invoked. +.PP +First, the command name is identified. +If 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. +.PP +Once a compspec has been found, it is used to generate the list of +matching words. +If a compspec is not found, the default \fBbash\fP completion as +described above under \fBCompleting\fP is performed. +.PP +First, the actions specified by the compspec are used. +Only matches which are prefixed by the word being completed are +returned. +When the +.B \-f +or +.B \-d +option is used for filename or directory name completion, the shell +variable +.SM +.B FIGNORE +is used to filter the matches. +.PP +Any completions specified by a filename expansion pattern to the +\fB\-G\fP option are generated next. +The words generated by the pattern need not match the word +being completed. +The +.SM +.B GLOBIGNORE +shell variable is not used to filter the matches, but the +.SM +.B FIGNORE +variable is used. +.PP +Next, the string specified as the argument to the \fB\-W\fP option +is considered. +The string is first split using the characters in the +.SM +.B IFS +special variable as delimiters. +Shell quoting is honored. +Each word is then expanded using +brace expansion, tilde expansion, parameter and variable expansion, +command substitution, arithmetic expansion, and pathname expansion, +as described above under +.SM +.BR EXPANSION . +The results are split using the rules described above under +\fBWord Splitting\fP. +The results of the expansion are prefix-matched against the word being +completed, and the matching words become the possible completions. +.PP +After these matches have been generated, any shell function or command +specified with the \fB\-F\fP and \fB\-C\fP options is invoked. +When the command or function is invoked, the +.SM +.B COMP_LINE +and +.SM +.B COMP_POINT +variables are assigned values as described above under +\fBShell Variables\fP. +If a shell function is being invoked, the +.SM +.B COMP_WORDS +and +.SM +.B COMP_CWORD +variables are also set. +When the function or command is invoked, the first argument 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. +.PP +Any function specified with \fB\-F\fP is invoked first. +The function may use any of the shell facilities, including the +\fBcompgen\fP builtin described below, to generate the matches. +It must put the possible completions in the +.SM +.B COMPREPLY +array variable. +.PP +Next, any command specified with the \fB\-C\fP option is invoked +in an environment equivalent to command substitution. +It should print a list of completions, one per line, to the +standard output. +Backslash may be used to escape a newline, if necessary. +.PP +After all of the possible completions are generated, any filter +specified with the \fB\-X\fP option is applied to the list. +The filter is a pattern as used for pathname expansion; a \fB&\fP +in the pattern is replaced with the text of the word being completed. +A literal \fB&\fP may be escaped with a backslash; the backslash +is removed before attempting a match. +Any completion that matches the pattern will be removed from the list. +A leading \fB!\fP negates the pattern; in this case any completion +not matching the pattern will be removed. +.PP +Finally, any prefix and suffix specified with the \fB\-P\fP and \fB\-S\fP +options are added to each member of the completion list, and the result is +returned to the readline completion code as the list of possible +completions. +.PP +If the previously-applied actions do not generate any matches, and the +\fB\-o dirnames\fP option was supplied to \fBcomplete\fP when the +compspec was defined, directory name completion is attempted. +.PP +By default, if a compspec is found, whatever it generates is returned +to the completion code as the full set of possible completions. +The default \fBbash\fP completions are not attempted, and the readline +default of filename completion is disabled. +If the \fB-o default\fP option was supplied to \fBcomplete\fP when the +compspec was defined, readline's default completion will be performed +if the compspec generates no matches. +.PP +When a compspec indicates that directory name completion is desired, +the programmable completion functions force readline to append a slash +to completed names which are symbolic links to directories, subject to +the value of the \fBmark\-directories\fP readline variable, regardless +of the setting of the \fBmark-symlinked\-directories\fP readline variable. +.SH HISTORY +When the +.B \-o history +option to the +.B set +builtin is enabled, the shell provides access to the +\fIcommand history\fP, +the list of commands previously typed. +The value of the \fBHISTSIZE\fP variable is used as the +number of commands to save in a history list. +The text of the last +.SM +.B HISTSIZE +commands (default 500) is saved. The shell +stores each command in the history list prior to parameter and +variable expansion (see +.SM +.B EXPANSION +above) but after history expansion is performed, subject to the +values of the shell variables +.SM +.B HISTIGNORE +and +.SM +.BR HISTCONTROL . +.PP +On startup, the history is initialized from the file named by +the variable +.SM +.B HISTFILE +(default \fI~/.bash_history\fP). +The file named by the value of +.SM +.B HISTFILE +is truncated, if necessary, to contain no more than +the number of lines specified by the value of +.SM +.BR HISTFILESIZE . +When an interactive shell exits, the last +.SM +.B $HISTSIZE +lines are copied from the history list to +.SM +.BR $HISTFILE . +If the +.B histappend +shell option is enabled +(see the description of +.B shopt +under +.SM +.B "SHELL BUILTIN COMMANDS" +below), the lines are appended to the history file, +otherwise the history file is overwritten. +If +.SM +.B HISTFILE +is unset, or if the history file is unwritable, the history is +not saved. After saving the history, the history file is truncated +to contain no more than +.SM +.B HISTFILESIZE +lines. If +.SM +.B HISTFILESIZE +is not set, no truncation is performed. +.PP +The builtin command +.B fc +(see +.SM +.B SHELL BUILTIN COMMANDS +below) may be used to list or edit and re-execute a portion of +the history list. +The +.B history +builtin may be used to display or modify the history list and +manipulate the history file. +When using command-line editing, search commands +are available in each editing mode that provide access to the +history list. +.PP +The shell allows control over which commands are saved on the history +list. The +.SM +.B HISTCONTROL +and +.SM +.B HISTIGNORE +variables may be set to cause the shell to save only a subset of the +commands entered. +The +.B cmdhist +shell option, if enabled, causes the shell to attempt to save each +line of a multi-line command in the same history entry, adding +semicolons where necessary to preserve syntactic correctness. +The +.B lithist +shell option causes the shell to save the command with embedded newlines +instead of semicolons. See the description of the +.B shopt +builtin below under +.SM +.B "SHELL BUILTIN COMMANDS" +for information on setting and unsetting shell options. +.SH "HISTORY EXPANSION" +.PP +The shell supports a history expansion feature that +is similar to the history expansion in +.BR csh. +This section describes what syntax features are available. This +feature is enabled by default for interactive shells, and can be +disabled using the +.B \+H +option to the +.B set +builtin command (see +.SM +.B SHELL BUILTIN COMMANDS +below). Non-interactive shells do not perform history expansion +by default. +.PP +History expansions introduce words from the history list into +the input stream, making it easy to repeat commands, insert the +arguments to a previous command into the current input line, or +fix errors in previous commands quickly. +.PP +History expansion is performed immediately after a complete line +is read, before the shell breaks it into words. +It takes place in two parts. +The first is to determine which line from the history list +to use during substitution. +The second is to select portions of that line for inclusion into +the current one. +The line selected from the history is the \fIevent\fP, +and the portions of that line that are acted upon are \fIwords\fP. +Various \fImodifiers\fP are available to manipulate the selected words. +The line is broken into words in the same fashion as when reading input, +so that several \fImetacharacter\fP-separated words surrounded by +quotes are considered one word. +History expansions are introduced by the appearance of the +history expansion character, which is \^\fB!\fP\^ by default. +Only backslash (\^\fB\e\fP\^) and single quotes can quote +the history expansion character. +.PP +Several shell options settable with the +.B shopt +builtin may be used to tailor the behavior of history expansion. +If the +.B histverify +shell option is enabled (see the description of the +.B shopt +builtin), and +.B readline +is being used, history substitutions are not immediately passed to +the shell parser. +Instead, the expanded line is reloaded into the +.B readline +editing buffer for further modification. +If +.B readline +is being used, and the +.B histreedit +shell option is enabled, a failed history substitution will be reloaded +into the +.B readline +editing buffer for correction. +The +.B \-p +option to the +.B history +builtin command may be used to see what a history expansion will +do before using it. +The +.B \-s +option to the +.B history +builtin may be used to add commands to the end of the history list +without actually executing them, so that they are available for +subsequent recall. +.PP +The shell allows control of the various characters used by the +history expansion mechanism (see the description of +.B histchars +above under +.BR "Shell Variables" ). +.SS Event Designators +.PP +An event designator is a reference to a command line entry in the +history list. +.PP +.PD 0 +.TP +.B ! +Start a history substitution, except when followed by a +.BR blank , +newline, = or ( (when the \fBextglob\fP shell option is enabled using +the \fBshopt\fP builtin). +.TP +.B !\fIn\fR +Refer to command line +.IR n . +.TP +.B !\-\fIn\fR +Refer to the current command line minus +.IR n . +.TP +.B !! +Refer to the previous command. This is a synonym for `!\-1'. +.TP +.B !\fIstring\fR +Refer to the most recent command starting with +.IR string . +.TP +.B !?\fIstring\fR\fB[?]\fR +Refer to the most recent command containing +.IR string . +The trailing \fB?\fP may be omitted if +.I string +is followed immediately by a newline. +.TP +.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u +Quick substitution. Repeat the last command, replacing +.I string1 +with +.IR string2 . +Equivalent to +``!!:s/\fIstring1\fP/\fIstring2\fP/'' +(see \fBModifiers\fP below). +.TP +.B !# +The entire command line typed so far. +.PD +.SS Word Designators +.PP +Word designators are used to select desired words from the event. +A +.B : +separates the event specification from the word designator. +It may be omitted if the word designator begins with a +.BR ^ , +.BR $ , +.BR * , +.BR \- , +or +.BR % . +Words are numbered from the beginning of the line, +with the first word being denoted by 0 (zero). +Words are inserted into the current line separated by single spaces. +.PP +.PD 0 +.TP +.B 0 (zero) +The zeroth word. For the shell, this is the command +word. +.TP +.I n +The \fIn\fRth word. +.TP +.B ^ +The first argument. That is, word 1. +.TP +.B $ +The last argument. +.TP +.B % +The word matched by the most recent `?\fIstring\fR?' search. +.TP +.I x\fB\-\fPy +A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'. +.TP +.B * +All of the words but the zeroth. This is a synonym +for `\fI1\-$\fP'. It is not an error to use +.B * +if there is just one +word in the event; the empty string is returned in that case. +.TP +.B x* +Abbreviates \fIx\-$\fP. +.TP +.B x\- +Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word. +.PD +.PP +If a word designator is supplied without an event specification, the +previous command is used as the event. +.SS Modifiers +.PP +After the optional word designator, there may appear a sequence of +one or more of the following modifiers, each preceded by a `:'. +.PP +.PD 0 +.PP +.TP +.B h +Remove a trailing file name component, leaving only the head. +.TP +.B t +Remove all leading file name components, leaving the tail. +.TP +.B r +Remove a trailing suffix of the form \fI.xxx\fP, leaving the +basename. +.TP +.B e +Remove all but the trailing suffix. +.TP +.B p +Print the new command but do not execute it. +.TP +.B q +Quote the substituted words, escaping further substitutions. +.TP +.B x +Quote the substituted words as with +.BR q , +but break into words at +.B blanks +and newlines. +.TP +.B s/\fIold\fP/\fInew\fP/ +Substitute +.I new +for the first occurrence of +.I old +in the event line. Any delimiter can be used in place of /. The +final delimiter is optional if it is the last character of the +event line. The delimiter may be quoted in +.I old +and +.I new +with a single backslash. If & appears in +.IR new , +it is replaced by +.IR old . +A single backslash will quote the &. If +.I old +is null, it is set to the last +.I old +substituted, or, if no previous history substitutions took place, +the last +.I string +in a +.B !?\fIstring\fR\fB[?]\fR +search. +.TP +.B & +Repeat the previous substitution. +.TP +.B g +Cause changes to be applied over the entire event line. This is +used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR') +or `\fB:&\fP'. If used with +`\fB:s\fP', any delimiter can be used +in place of /, and the final delimiter is optional +if it is the last character of the event line. +An \fBa\fP may be used as a synonym for \fBg\fP. +.TP +.B G +Apply the following `\fBs\fP' modifier once to each word in the event line. +.PD +.SH "SHELL BUILTIN COMMANDS" +.\" start of bash_builtins +.zZ +.PP +Unless otherwise noted, each builtin command documented in this +section as accepting options preceded by +.B \- +accepts +.B \-\- +to signify the end of the options. +.sp .5 +.PD 0 +.TP +\fB:\fP [\fIarguments\fP] +.PD +No effect; the command does nothing beyond expanding +.I arguments +and performing any specified +redirections. A zero exit code is returned. +.TP +\fB .\| \fP \fIfilename\fP [\fIarguments\fP] +.PD 0 +.TP +\fBsource\fP \fIfilename\fP [\fIarguments\fP] +.PD +Read and execute commands from +.I filename +in the current +shell environment and return the exit status of the last command +executed from +.IR filename . +If +.I filename +does not contain a slash, file names in +.SM +.B PATH +are used to find the directory containing +.IR filename . +The file searched for in +.SM +.B PATH +need not be executable. +When \fBbash\fP is not in \fIposix mode\fP, the current directory is +searched if no file is found in +.SM +.BR PATH . +If the +.B sourcepath +option to the +.B shopt +builtin command is turned off, the +.SM +.B PATH +is not searched. +If any \fIarguments\fP are supplied, they become the positional +parameters when \fIfilename\fP is executed. Otherwise the positional +parameters are unchanged. +The return status is the status of the last command exited within +the script (0 if no commands are executed), and false if +.I filename +is not found or cannot be read. +.TP +\fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +\fBAlias\fP with no arguments or with the +.B \-p +option prints the list of aliases in the form +\fBalias\fP \fIname\fP=\fIvalue\fP on standard output. +When arguments are supplied, an alias is defined for +each \fIname\fP whose \fIvalue\fP is given. +A trailing space in \fIvalue\fP causes the next word to be +checked for alias substitution when the alias is expanded. +For each \fIname\fP in the argument list for which no \fIvalue\fP +is supplied, the name and value of the alias is printed. +\fBAlias\fP returns true unless a \fIname\fP is given for which +no alias has been defined. +.TP +\fBbg\fP [\fIjobspec\fP] +Resume the 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. +.B bg +.I jobspec +returns 0 unless run when job control is disabled or, when run with +job control enabled, if \fIjobspec\fP was not found or started without +job control. +.TP +\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lpsvPSV\fP] +.PD 0 +.TP +\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-q\fP \fIfunction\fP] [\fB\-u\fP \fIfunction\fP] [\fB\-r\fP \fIkeyseq\fP] +.TP +\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP +.TP +\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP:\fIshell\-command\fP +.TP +\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP +.TP +\fBbind\fP \fIreadline\-command\fP +.PD +Display current +.B readline +key and function bindings, bind a key sequence to a +.B readline +function or macro, or set a +.B readline +variable. +Each non-option argument is a command as it would appear in +.IR .inputrc , +but each binding or command must be passed as a separate argument; +e.g., '"\eC\-x\eC\-r": re\-read\-init\-file'. +Options, if supplied, have the following meanings: +.RS +.PD 0 +.TP +.B \-m \fIkeymap\fP +Use +.I keymap +as the keymap to be affected by the subsequent bindings. +Acceptable +.I keymap +names are +\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi, +vi\-move, vi\-command\fP, and +.IR vi\-insert . +\fIvi\fP is equivalent to \fIvi\-command\fP; \fIemacs\fP is +equivalent to \fIemacs\-standard\fP. +.TP +.B \-l +List the names of all \fBreadline\fP functions. +.TP +.B \-p +Display \fBreadline\fP function names and bindings in such a way +that they can be re-read. +.TP +.B \-P +List current \fBreadline\fP function names and bindings. +.TP +.B \-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. +.TP +.B \-S +Display \fBreadline\fP key sequences bound to macros and the strings +they output. +.TP +.B \-f \fIfilename\fP +Read key bindings from \fIfilename\fP. +.TP +.B \-q \fIfunction\fP +Query about which keys invoke the named \fIfunction\fP. +.TP +.B \-u \fIfunction\fP +Unbind all keys bound to the named \fIfunction\fP. +.TP +.B \-r \fIkeyseq\fP +Remove any current binding for \fIkeyseq\fP. +.TP +.B \-x \fIkeyseq\fP:\fIshell\-command\fP +Cause \fIshell\-command\fP to be executed whenever \fIkeyseq\fP is +entered. +.PD +.PP +The return value is 0 unless an unrecognized option is given or an +error occurred. +.RE +.TP +\fBbreak\fP [\fIn\fP] +Exit from within a +.BR for , +.BR while , +.BR until , +or +.B select +loop. If \fIn\fP is specified, break \fIn\fP levels. +.I n +must be \(>= 1. If +.I n +is greater than the number of enclosing loops, all enclosing loops +are exited. The return value is 0 unless the shell is not executing +a loop when +.B break +is executed. +.TP +\fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP] +Execute the specified shell builtin, passing it +.IR arguments , +and return its exit status. +This is useful when defining a +function whose name is the same as a shell builtin, +retaining the functionality of the builtin within the function. +The \fBcd\fP builtin is commonly redefined this way. +The return status is false if +.I shell\-builtin +is not a shell builtin command. +.TP +\fBcd\fP [\fB\-L|-P\fP] [\fIdir\fP] +Change the current directory to \fIdir\fP. The variable +.SM +.B HOME +is the +default +.IR dir . +The variable +.SM +.B CDPATH +defines the search path for the directory containing +.IR dir . +Alternative directory names in +.SM +.B CDPATH +are separated by a colon (:). A null directory name in +.SM +.B CDPATH +is the same as the current directory, i.e., ``\fB.\fP''. If +.I dir +begins with a slash (/), +then +.SM +.B CDPATH +is not used. The +.B \-P +option says to use the physical directory structure instead of +following symbolic links (see also the +.B \-P +option to the +.B set +builtin command); the +.B \-L +option forces symbolic links to be followed. An argument of +.B \- +is equivalent to +.SM +.BR $OLDPWD . +The return value is true if the directory was successfully changed; +false otherwise. +.TP +\fBcaller\fP [\fIexpr\fP] +Returns the context of any active subroutine call (a shell function or +a script executed with the \fB.\fP or \fBsource\fP builtins. +Without \fIexpr\fP, \fBcaller\fP displays the line number and source +filename of the current subroutine call. +If a non-negative integer is supplied as \fIexpr\fP, \fBcaller\fP +displays the line number, subroutine name, and source file corresponding +to that position in the current execution call stack. This extra +information may be used, for example, to print a stack trace. The +current frame is frame 0. +The return value is 0 unless the shell is not executing a subroutine +call or \fIexpr\fP does not correspond to a valid position in the +call stack. +.TP +\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP ...] +Run +.I command +with +.I args +suppressing the normal shell function lookup. Only builtin +commands or commands found in the +.SM +.B PATH +are executed. If the +.B \-p +option is given, the search for +.I command +is performed using a default value for +.B PATH +that is guaranteed to find all of the standard utilities. +If either the +.B \-V +or +.B \-v +option is supplied, a description of +.I command +is printed. The +.B \-v +option causes a single word indicating the command or file name +used to invoke +.I command +to be displayed; the +.B \-V +option produces a more verbose description. +If the +.B \-V +or +.B \-v +option is supplied, the exit status is 0 if +.I command +was found, and 1 if not. If neither option is supplied and +an error occurred or +.I command +cannot be found, the exit status is 127. Otherwise, the exit status of the +.B command +builtin is the exit status of +.IR command . +.TP +\fBcompgen\fP [\fIoption\fP] [\fIword\fP] +Generate possible completion matches for \fIword\fP according to +the \fIoption\fPs, which may be any option accepted by the +.B complete +builtin with the exception of \fB\-p\fP and \fB\-r\fP, and write +the matches to the standard output. +When using the \fB\-F\fP or \fB\-C\fP options, the various shell variables +set by the programmable completion facilities, while available, will not +have useful values. +.sp 1 +The matches will be generated in the same way as if the programmable +completion code had generated them directly from a completion specification +with the same flags. +If \fIword\fP is specified, only those completions matching \fIword\fP +will be displayed. +.sp 1 +The return value is true unless an invalid option is supplied, or no +matches were generated. +.TP +\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\fP] [\fB\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP] +.br +[\fB\-X\fP \fIfilterpat\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] \fIname\fP [\fIname ...\fP] +.PD 0 +.TP +\fBcomplete\fP \fB\-pr\fP [\fIname\fP ...] +.PD +Specify how arguments to each \fIname\fP should be completed. +If the \fB\-p\fP option is supplied, or if no options are supplied, +existing completion specifications are printed in a way that allows +them to be reused as input. +The \fB\-r\fP option removes a completion specification for +each \fIname\fP, or, if no \fIname\fPs are supplied, all +completion specifications. +.sp 1 +The process of applying these completion specifications when word completion +is attempted is described above under \fBProgrammable Completion\fP. +.sp 1 +Other options, if specified, have the following meanings. +The arguments to the \fB\-G\fP, \fB\-W\fP, and \fB\-X\fP options +(and, if necessary, the \fB\-P\fP and \fB\-S\fP options) +should be quoted to protect them from expansion before the +.B complete +builtin is invoked. +.RS +.PD 0 +.TP 8 +\fB\-o\fP \fIcomp-option\fP +The \fIcomp-option\fP controls several aspects of the compspec's behavior +beyond the simple generation of completions. +\fIcomp-option\fP may be one of: +.RS +.TP 8 +.B default +Use readline's default filename completion if the compspec generates +no matches. +.TP 8 +.B dirnames +Perform directory name completion if the compspec generates no matches. +.TP 8 +.B filenames +Tell readline that the compspec generates filenames, so it can perform any +filename\-specific processing (like adding a slash to directory names or +suppressing trailing spaces). Intended to be used with shell functions. +.TP 8 +.B nospace +Tell readline not to append a space (the default) to words completed at +the end of the line. +.RE +.TP 8 +\fB\-A\fP \fIaction\fP +The \fIaction\fP may be one of the following to generate a list of possible +completions: +.RS +.TP 8 +.B alias +Alias names. May also be specified as \fB\-a\fP. +.TP 8 +.B arrayvar +Array variable names. +.TP 8 +.B binding +\fBReadline\fP key binding names. +.TP 8 +.B builtin +Names of shell builtin commands. May also be specified as \fB\-b\fP. +.TP 8 +.B command +Command names. May also be specified as \fB\-c\fP. +.TP 8 +.B directory +Directory names. May also be specified as \fB\-d\fP. +.TP 8 +.B disabled +Names of disabled shell builtins. +.TP 8 +.B enabled +Names of enabled shell builtins. +.TP 8 +.B export +Names of exported shell variables. May also be specified as \fB\-e\fP. +.TP 8 +.B file +File names. May also be specified as \fB\-f\fP. +.TP 8 +.B function +Names of shell functions. +.TP 8 +.B group +Group names. May also be specified as \fB\-g\fP. +.TP 8 +.B helptopic +Help topics as accepted by the \fBhelp\fP builtin. +.TP 8 +.B hostname +Hostnames, as taken from the file specified by the +.SM +.B HOSTFILE +shell variable. +.TP 8 +.B job +Job names, if job control is active. May also be specified as \fB\-j\fP. +.TP 8 +.B keyword +Shell reserved words. May also be specified as \fB\-k\fP. +.TP 8 +.B running +Names of running jobs, if job control is active. +.TP 8 +.B service +Service names. May also be specified as \fB\-s\fP. +.TP 8 +.B setopt +Valid arguments for the \fB\-o\fP option to the \fBset\fP builtin. +.TP 8 +.B shopt +Shell option names as accepted by the \fBshopt\fP builtin. +.TP 8 +.B signal +Signal names. +.TP 8 +.B stopped +Names of stopped jobs, if job control is active. +.TP 8 +.B user +User names. May also be specified as \fB\-u\fP. +.TP 8 +.B variable +Names of all shell variables. May also be specified as \fB\-v\fP. +.RE +.TP 8 +\fB\-G\fP \fIglobpat\fP +The filename expansion pattern \fIglobpat\fP is expanded to generate +the possible completions. +.TP 8 +\fB\-W\fP \fIwordlist\fP +The \fIwordlist\fP is split using the characters in the +.SM +.B IFS +special variable as delimiters, and each resultant word is expanded. +The possible completions are the members of the resultant list which +match the word being completed. +.TP 8 +\fB\-C\fP \fIcommand\fP +\fIcommand\fP is executed in a subshell environment, and its output is +used as the possible completions. +.TP 8 +\fB\-F\fP \fIfunction\fP +The shell function \fIfunction\fP is executed in the current shell +environment. +When it finishes, the possible completions are retrieved from the value +of the +.SM +.B COMPREPLY +array variable. +.TP 8 +\fB\-X\fP \fIfilterpat\fP +\fIfilterpat\fP 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 +\fIfilterpat\fP is removed from the list. +A leading \fB!\fP in \fIfilterpat\fP negates the pattern; in this +case, any completion not matching \fIfilterpat\fP is removed. +.TP 8 +\fB\-P\fP \fIprefix\fP +\fIprefix\fP is added at the beginning of each possible completion +after all other options have been applied. +.TP 8 +\fB\-S\fP \fIsuffix\fP +\fIsuffix\fP is appended to each possible completion +after all other options have been applied. +.PD +.PP +The return value is true unless an invalid option is supplied, an option +other than \fB\-p\fP or \fB\-r\fP is supplied without a \fIname\fP +argument, an attempt is made to remove a completion specification for +a \fIname\fP for which no specification exists, or +an error occurs adding a completion specification. +.RE +.TP +\fBcontinue\fP [\fIn\fP] +Resume the next iteration of the enclosing +.BR for , +.BR while , +.BR until , +or +.B select +loop. +If +.I n +is specified, resume at the \fIn\fPth enclosing loop. +.I n +must be \(>= 1. If +.I n +is greater than the number of enclosing loops, the last enclosing loop +(the ``top-level'' loop) is resumed. The return value is 0 unless the +shell is not executing a loop when +.B continue +is executed. +.TP +\fBdeclare\fP [\fB\-afFirtx\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +.PD 0 +.TP +\fBtypeset\fP [\fB\-afFirtx\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...] +.PD +Declare variables and/or give them attributes. +If no \fIname\fPs are given then display the values of variables. +The +.B \-p +option will display the attributes and values of each +.IR name . +When +.B \-p +is used, additional options are ignored. +The +.B \-F +option inhibits the display of function definitions; only the +function name and attributes are printed. +If the \fBextdebug\fP shell option is enabled using \fBshopt\fP, +the source file name and line number where the function is defined +are displayed as well. The +.B \-F +option implies +.BR \-f . +The following options can +be used to restrict output to variables with the specified attribute or +to give variables attributes: +.RS +.PD 0 +.TP +.B \-a +Each \fIname\fP is an array variable (see +.B Arrays +above). +.TP +.B \-f +Use function names only. +.TP +.B \-i +The variable is treated as an integer; arithmetic evaluation (see +.SM +.B "ARITHMETIC EVALUATION" ") " +is performed when the variable is assigned a value. +.TP +.B \-r +Make \fIname\fPs readonly. These names cannot then be assigned values +by subsequent assignment statements or unset. +.TP +.B \-t +Give each \fIname\fP the \fItrace\fP attribute. +Traced functions inherit the \fBDEBUG\fP trap from the calling shell. +The trace attribute has no special meaning for variables. +.TP +.B \-x +Mark \fIname\fPs for export to subsequent commands via the environment. +.PD +.PP +Using `+' instead of `\-' +turns off the attribute instead, with the exception that \fB+a\fP +may not be used to destroy an array variable. When used in a function, +makes each +\fIname\fP local, as with the +.B local +command. +If a variable name is followed by =\fIvalue\fP, the value of +the variable is set to \fIvalue\fP. +The return value is 0 unless an invalid option is encountered, +an attempt is made to define a function using +.if n ``\-f foo=bar'', +.if t \f(CW\-f foo=bar\fP, +an attempt is made to assign a value to a readonly variable, +an attempt is made to assign a value to an array variable without +using the compound assignment syntax (see +.B Arrays +above), one of the \fInames\fP is not a valid shell variable name, +an attempt is made to turn off readonly status for a readonly variable, +an attempt is made to turn off array status for an array variable, +or an attempt is made to display a non-existent function with \fB\-f\fP. +.RE +.TP +.B dirs [\fB\-clpv\fP] [+\fIn\fP] [\-\fIn\fP] +Without options, displays the list of currently remembered directories. +The default display is on a single line with directory names separated +by spaces. +Directories are added to the list with the +.B pushd +command; the +.B popd +command removes entries from the list. +.RS +.PD 0 +.TP +\fB+\fP\fIn\fP +Displays the \fIn\fPth entry counting from the left of the list +shown by +.B dirs +when invoked without options, starting with zero. +.TP +\fB\-\fP\fIn\fP +Displays the \fIn\fPth entry counting from the right of the list +shown by +.B dirs +when invoked without options, starting with zero. +.TP +.B \-c +Clears the directory stack by deleting all of the entries. +.TP +.B \-l +Produces a longer listing; the default listing format uses a +tilde to denote the home directory. +.TP +.B \-p +Print the directory stack with one entry per line. +.TP +.B \-v +Print the directory stack with one entry per line, +prefixing each entry with its index in the stack. +.PD +.PP +The return value is 0 unless an +invalid option is supplied or \fIn\fP indexes beyond the end +of the directory stack. +.RE +.TP +\fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIjobspec\fP ...] +Without options, each +.I jobspec +is removed from the table of active jobs. +If the \fB\-h\fP option is given, each +.I jobspec +is not removed from the table, but is marked so that +.SM +.B SIGHUP +is not sent to the job if the shell receives a +.SM +.BR SIGHUP . +If no +.I jobspec +is present, and neither the +.B \-a +nor the +.B \-r +option is supplied, the \fIcurrent job\fP is used. +If no +.I jobspec +is supplied, the +.B \-a +option means to remove or mark all jobs; the +.B \-r +option without a +.I jobspec +argument restricts operation to running jobs. +The return value is 0 unless a +.I jobspec +does not specify a valid job. +.TP +\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...] +Output the \fIarg\fPs, separated by spaces, followed by a newline. +The return status is always 0. +If \fB\-n\fP is specified, the trailing newline is +suppressed. If the \fB\-e\fP option is given, interpretation of +the following backslash-escaped characters is enabled. The +.B \-E +option disables the interpretation of these escape characters, +even on systems where they are interpreted by default. +The \fBxpg_echo\fP shell option may be used to +dynamically determine whether or not \fBecho\fP expands these +escape characters by default. +.B echo +does not interpret +.B \-\- +to mean the end of options. +.B echo +interprets the following escape sequences: +.RS +.PD 0 +.TP +.B \ea +alert (bell) +.TP +.B \eb +backspace +.TP +.B \ec +suppress trailing newline +.TP +.B \ee +an escape character +.TP +.B \ef +form feed +.TP +.B \en +new line +.TP +.B \er +carriage return +.TP +.B \et +horizontal tab +.TP +.B \ev +vertical tab +.TP +.B \e\e +backslash +.TP +.B \e0\fInnn\fP +the eight-bit character whose value is the octal value \fInnn\fP +(zero to three octal digits) +.TP +.B \e\fInnn\fP +the eight-bit character whose value is the octal value \fInnn\fP +(one to three octal digits) +.TP +.B \ex\fIHH\fP +the eight-bit character whose value is the hexadecimal value \fIHH\fP +(one or two hex digits) +.PD +.RE +.TP +\fBenable\fP [\fB\-adnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...] +Enable and disable builtin shell commands. +Disabling a builtin allows a disk command which has the same name +as a shell builtin to be executed without specifying a full pathname, +even though the shell normally searches for builtins before disk commands. +If \fB\-n\fP is used, each \fIname\fP +is disabled; otherwise, +\fInames\fP are enabled. For example, to use the +.B test +binary found via the +.SM +.B PATH +instead of the shell builtin version, run +.if t \f(CWenable -n test\fP. +.if n ``enable -n test''. +The +.B \-f +option means to load the new builtin command +.I name +from shared object +.IR filename , +on systems that support dynamic loading. The +.B \-d +option will delete a builtin previously loaded with +.BR \-f . +If no \fIname\fP arguments are given, or if the +.B \-p +option is supplied, a list of shell builtins is printed. +With no other option arguments, the list consists of all enabled +shell builtins. +If \fB\-n\fP is supplied, only disabled builtins are printed. +If \fB\-a\fP is supplied, the list printed includes all builtins, with an +indication of whether or not each is enabled. +If \fB\-s\fP is supplied, the output is restricted to the POSIX +\fIspecial\fP builtins. +The return value is 0 unless a +.I name +is not a shell builtin or there is an error loading a new builtin +from a shared object. +.TP +\fBeval\fP [\fIarg\fP ...] +The \fIarg\fPs are read and concatenated together into a single +command. This command is then read and executed by the shell, and +its exit status is returned as the value of +.BR eval . +If there are no +.IR args , +or only null arguments, +.B eval +returns 0. +.TP +\fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]] +If +.I command +is specified, it replaces the shell. +No new process is created. The +.I arguments +become the arguments to \fIcommand\fP. +If the +.B \-l +option is supplied, +the shell places a dash at the beginning of the zeroth arg passed to +.IR command . +This is what +.IR login (1) +does. The +.B \-c +option causes +.I command +to be executed with an empty environment. If +.B \-a +is supplied, the shell passes +.I name +as the zeroth argument to the executed command. If +.I command +cannot be executed for some reason, a non-interactive shell exits, +unless the shell option +.B execfail +is enabled, in which case it returns failure. +An interactive shell returns failure if the file cannot be executed. +If +.I command +is not specified, any redirections take effect in the current shell, +and the return status is 0. If there is a redirection error, the +return status is 1. +.TP +\fBexit\fP [\fIn\fP] +Cause the shell to exit +with a status of \fIn\fP. If +.I n +is omitted, the exit status +is that of the last command executed. +A trap on +.SM +.B EXIT +is executed before the shell terminates. +.TP +\fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIword\fP]] ... +.PD 0 +.TP +.B export \-p +.PD +The supplied +.I names +are marked for automatic export to the environment of +subsequently executed commands. If the +.B \-f +option is given, +the +.I names +refer to functions. +If no +.I names +are given, or if the +.B \-p +option is supplied, a list +of all names that are exported in this shell is printed. +The +.B \-n +option causes the export property to be removed from the +named variables. +If a variable name is followed by =\fIword\fP, the value of +the variable is set to \fIword\fP. +.B export +returns an exit status of 0 unless an invalid option is +encountered, +one of the \fInames\fP is not a valid shell variable name, or +.B \-f +is supplied with a +.I name +that is not a function. +.TP +\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-nlr\fP] [\fIfirst\fP] [\fIlast\fP] +.PD 0 +.TP +\fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP] +.PD +Fix Command. In the first form, a range of commands from +.I first +to +.I last +is selected from the history list. +.I First +and +.I last +may be specified as a string (to locate the last command beginning +with that string) or as a number (an index into the history list, +where a negative number is used as an offset from the current +command number). If +.I last +is not specified it is set to +the current command for listing (so that +.if n ``fc \-l \-10'' +.if t \f(CWfc \-l \-10\fP +prints the last 10 commands) and to +.I first +otherwise. +If +.I first +is not specified it is set to the previous +command for editing and \-16 for listing. +.sp 1 +The +.B \-n +option suppresses +the command numbers when listing. The +.B \-r +option reverses the order of +the commands. If the +.B \-l +option is given, +the commands are listed on +standard output. Otherwise, the editor given by +.I ename +is invoked +on a file containing those commands. If +.I ename +is not given, the +value of the +.SM +.B FCEDIT +variable is used, and +the value of +.SM +.B EDITOR +if +.SM +.B FCEDIT +is not set. If neither variable is set, +.FN vi +is used. When editing is complete, the edited commands are +echoed and executed. +.sp 1 +In the second form, \fIcommand\fP is re-executed after each instance +of \fIpat\fP is replaced by \fIrep\fP. +A useful alias to use with this is +.if n ``r="fc -s"'', +.if t \f(CWr='fc \-s'\fP, +so that typing +.if n ``r cc'' +.if t \f(CWr cc\fP +runs the last command beginning with +.if n ``cc'' +.if t \f(CWcc\fP +and typing +.if n ``r'' +.if t \f(CWr\fP +re-executes the last command. +.sp 1 +If the first form is used, the return value is 0 unless an invalid +option is encountered or +.I first +or +.I last +specify history lines out of range. +If the +.B \-e +option is supplied, the return value is the value of the last +command executed or failure if an error occurs with the temporary +file of commands. If the second form is used, the return status +is that of the command re-executed, unless +.I cmd +does not specify a valid history line, in which case +.B fc +returns failure. +.TP +\fBfg\fP [\fIjobspec\fP] +Resume +.I jobspec +in the foreground, and make it the current job. +If +.I jobspec +is not present, the shell's notion of the \fIcurrent job\fP is used. +The return value is that of the command placed into the foreground, +or failure if run when job control is disabled or, when run with +job control enabled, if +.I jobspec +does not specify a valid job or +.I jobspec +specifies a job that was started without job control. +.TP +\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIargs\fP] +.B getopts +is used by shell procedures to parse positional parameters. +.I optstring +contains the option characters to be recognized; if a character +is followed by a colon, the option is expected to have an +argument, which should be separated from it by white space. +The colon and question mark characters may not be used as +option characters. +Each time it is invoked, +.B getopts +places the next option in the shell variable +.IR name , +initializing +.I name +if it does not exist, +and the index of the next argument to be processed into the +variable +.SM +.BR OPTIND . +.SM +.B OPTIND +is initialized to 1 each time the shell or a shell script +is invoked. When an option requires an argument, +.B getopts +places that argument into the variable +.SM +.BR OPTARG . +The shell does not reset +.SM +.B OPTIND +automatically; it must be manually reset between multiple +calls to +.B getopts +within the same shell invocation if a new set of parameters +is to be used. +.sp 1 +When the end of options is encountered, \fBgetopts\fP exits with a +return value greater than zero. +\fBOPTIND\fP is set to the index of the first non-option argument, +and \fBname\fP is set to ?. +.sp 1 +.B getopts +normally parses the positional parameters, but if more arguments are +given in +.IR args , +.B getopts +parses those instead. +.sp 1 +.B getopts +can report errors in two ways. If the first character of +.I optstring +is a colon, +.I silent +error reporting is used. In normal operation diagnostic messages +are printed when invalid options or missing option arguments are +encountered. +If the variable +.SM +.B OPTERR +is set to 0, no error messages will be displayed, even if the first +character of +.I optstring +is not a colon. +.sp 1 +If an invalid option is seen, +.B getopts +places ? into +.I name +and, if not silent, +prints an error message and unsets +.SM +.BR OPTARG . +If +.B getopts +is silent, +the option character found is placed in +.SM +.B OPTARG +and no diagnostic message is printed. +.sp 1 +If a required argument is not found, and +.B getopts +is not silent, +a question mark (\^\fB?\fP\^) is placed in +.IR name , +.SM +.B OPTARG +is unset, and a diagnostic message is printed. +If +.B getopts +is silent, then a colon (\^\fB:\fP\^) is placed in +.I name +and +.SM +.B OPTARG +is set to the option character found. +.sp 1 +.B getopts +returns true if an option, specified or unspecified, is found. +It returns false if the end of options is encountered or an +error occurs. +.TP +\fBhash\fP [\fB\-lr\fP] [\fB\-p\fP \fIfilename\fP] [\fB\-dt\fP] [\fIname\fP] +For each +.IR name , +the full file name of the command is determined by searching +the directories in +.B $PATH +and remembered. +If the +.B \-p +option is supplied, no path search is performed, and +.I filename +is used as the full file name of the command. +The +.B \-r +option causes the shell to forget all +remembered locations. +The +.B \-d +option causes the shell to forget the remembered location of each \fIname\fP. +If the +.B \-t +option is supplied, the full pathname to which each \fIname\fP corresponds +is printed. If multiple \fIname\fP arguments are supplied with \fB\-t\fP, +the \fIname\fP is printed before the hashed full pathname. +The +.B \-l +option causes output to be displayed in a format that may be reused as input. +If no arguments are given, or if only \fB\-l\fP is supplied, +information about remembered commands is printed. +The return status is true unless a +.I name +is not found or an invalid option is supplied. +.TP +\fBhelp\fP [\fB\-s\fP] [\fIpattern\fP] +Display helpful information about builtin commands. If +.I pattern +is specified, +.B help +gives detailed help on all commands matching +.IR pattern ; +otherwise help for all the builtins and shell control structures +is printed. +The \fB\-s\fP option restricts the information displayed to a short +usage synopsis. +The return status is 0 unless no command matches +.IR pattern . +.TP +\fBhistory [\fIn\fP] +.PD 0 +.TP +\fBhistory\fP \fB\-c\fP +.TP +\fBhistory \-d\fP \fIoffset\fP +.TP +\fBhistory\fP \fB\-anrw\fP [\fIfilename\fP] +.TP +\fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg ...\fP] +.TP +\fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg ...\fP] +.PD +With no options, display the command +history list with line numbers. Lines listed +with a +.B * +have been modified. An argument of +.I n +lists only the last +.I n +lines. If \fIfilename\fP is supplied, it is used as the +name of the history file; if not, the value of +.SM +.B HISTFILE +is used. Options, if supplied, have the following meanings: +.RS +.PD 0 +.TP +.B \-c +Clear the history list by deleting all the entries. +.TP +\fB\-d\fP \fIoffset\fP +Delete the history entry at position \fIoffset\fP. +.TP +.B \-a +Append the ``new'' history lines (history lines entered since the +beginning of the current \fBbash\fP session) to the history file. +.TP +.B \-n +Read the history lines not already read from the history +file into the current history list. These are lines +appended to the history file since the beginning of the +current \fBbash\fP session. +.TP +.B \-r +Read the contents of the history file +and use them as the current history. +.TP +.B \-w +Write the current history to the history file, overwriting the +history file's contents. +.TP +.B \-p +Perform history substitution on the following \fIargs\fP and display +the result on the standard output. +Does not store the results in the history list. +Each \fIarg\fP must be quoted to disable normal history expansion. +.TP +.B \-s +Store the +.I args +in the history list as a single entry. The last command in the +history list is removed before the +.I args +are added. +.PD +.PP +The return value is 0 unless an invalid option is encountered, an +error occurs while reading or writing the history file, an invalid +\fIoffset\fP is supplied as an argument to \fB\-d\fP, or the +history expansion supplied as an argument to \fB\-p\fP fails. +.RE +.TP +\fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP ... ] +.PD 0 +.TP +\fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP ... ] +.PD +The first form lists the active jobs. The options have the following +meanings: +.RS +.PD 0 +.TP +.B \-l +List process IDs +in addition to the normal information. +.TP +.B \-p +List only the process ID of the job's process group +leader. +.TP +.B \-n +Display information only about jobs that have changed status since +the user was last notified of their status. +.TP +.B \-r +Restrict output to running jobs. +.TP +.B \-s +Restrict output to stopped jobs. +.PD +.PP +If +.I jobspec +is given, output is restricted to information about that job. +The return status is 0 unless an invalid option is encountered +or an invalid +.I jobspec +is supplied. +.PP +If the +.B \-x +option is supplied, +.B jobs +replaces any +.I jobspec +found in +.I command +or +.I args +with the corresponding process group ID, and executes +.I command +passing it +.IR args , +returning its exit status. +.RE +.TP +\fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] [\fIpid\fP | \fIjobspec\fP] ... +.PD 0 +.TP +\fBkill\fP \fB\-l\fP [\fIsigspec\fP | \fIexit_status\fP] +.PD +Send the signal named by +.I sigspec +or +.I signum +to the processes named by +.I pid +or +.IR jobspec . +.I sigspec +is either a signal name such as +.SM +.B SIGKILL +or a signal number; +.I signum +is a signal number. If +.I sigspec +is a signal name, the name may be +given with or without the +.SM +.B SIG +prefix. +If +.I sigspec +is not present, then +.SM +.B SIGTERM +is assumed. +An argument of +.B \-l +lists the signal names. +If any arguments are supplied when +.B \-l +is given, the names of the signals corresponding to the arguments are +listed, and the return status is 0. +The \fIexit_status\fP argument to +.B \-l +is a number specifying either a signal number or the exit status of +a process terminated by a signal. +.B kill +returns true if at least one signal was successfully sent, or false +if an error occurs or an invalid option is encountered. +.TP +\fBlet\fP \fIarg\fP [\fIarg\fP ...] +Each +.I arg +is an arithmetic expression to be evaluated (see +.SM +.BR "ARITHMETIC EVALUATION" ). +If the last +.I arg +evaluates to 0, +.B let +returns 1; 0 is returned otherwise. +.TP +\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] ...] +For each argument, a local variable named +.I name +is created, and assigned +.IR value . +The \fIoption\fP can be any of the options accepted by \fBdeclare\fP. +When +.B local +is used within a function, it causes the variable +.I name +to have a visible scope restricted to that function and its children. +With no operands, +.B local +writes a list of local variables to the standard output. It is +an error to use +.B local +when not within a function. The return status is 0 unless +.B local +is used outside a function, an invalid +.I name +is supplied, or +\fIname\fP is a readonly variable. +.TP +.B logout +Exit a login shell. +.TP +\fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP] +Removes entries from the directory stack. With no arguments, +removes the top directory from the stack, and performs a +.B cd +to the new top directory. +Arguments, if supplied, have the following meanings: +.RS +.PD 0 +.TP +\fB+\fP\fIn\fP +Removes the \fIn\fPth entry counting from the left of the list +shown by +.BR dirs , +starting with zero. For example: +.if n ``popd +0'' +.if t \f(CWpopd +0\fP +removes the first directory, +.if n ``popd +1'' +.if t \f(CWpopd +1\fP +the second. +.TP +\fB\-\fP\fIn\fP +Removes the \fIn\fPth entry counting from the right of the list +shown by +.BR dirs , +starting with zero. For example: +.if n ``popd -0'' +.if t \f(CWpopd -0\fP +removes the last directory, +.if n ``popd -1'' +.if t \f(CWpopd -1\fP +the next to last. +.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 +.B popd +command is successful, a +.B dirs +is performed as well, and the return status is 0. +.B popd +returns false if an invalid option is encountered, the directory stack +is empty, a non-existent directory stack entry is specified, or the +directory change fails. +.RE +.TP +\fBprintf\fP \fIformat\fP [\fIarguments\fP] +Write the formatted \fIarguments\fP to the standard output under the +control of the \fIformat\fP. +The \fIformat\fP is a character string which contains three types of objects: +plain characters, which are simply copied to standard output, character +escape sequences, which are converted and copied to the standard output, and +format specifications, each of which causes printing of the next successive +\fIargument\fP. +In addition to the standard \fIprintf\fP(1) formats, \fB%b\fP causes +\fBprintf\fP to expand backslash escape sequences in the corresponding +\fIargument\fP, and \fB%q\fP causes \fBprintf\fP to output the corresponding +\fIargument\fP in a format that can be reused as shell input. +.sp 1 +The \fIformat\fP is reused as necessary to consume all of the \fIarguments\fP. +If the \fIformat\fP requires more \fIarguments\fP than are supplied, the +extra format specifications behave as if a zero value or null string, as +appropriate, had been supplied. The return value is zero on success, +non-zero on failure. +.TP +\fBpushd\fP [\fB\-n\fP] [\fIdir\fP] +.PD 0 +.TP +\fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP] +.PD +Adds a directory to the top of the directory stack, or rotates +the stack, making the new top of the stack the current working +directory. With no arguments, exchanges the top two directories +and returns 0, unless the directory stack is empty. +Arguments, if supplied, have the following meanings: +.RS +.PD 0 +.TP +\fB+\fP\fIn\fP +Rotates the stack so that the \fIn\fPth directory +(counting from the left of the list shown by +.BR dirs , +starting with zero) +is at the top. +.TP +\fB\-\fP\fIn\fP +Rotates the stack so that the \fIn\fPth directory +(counting from the right of the list shown by +.BR dirs , +starting with zero) is at the top. +.TP +.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 +to the directory stack at the top, making it the +new current working directory. +.PD +.PP +If the +.B pushd +command is successful, a +.B dirs +is performed as well. +If the first form is used, +.B pushd +returns 0 unless the cd to +.I dir +fails. With the second form, +.B pushd +returns 0 unless the directory stack is empty, +a non-existent directory stack element is specified, +or the directory change to the specified new current directory +fails. +.RE +.TP +\fBpwd\fP [\fB\-LP\fP] +Print the absolute pathname of the current working directory. +The pathname printed contains no symbolic links if the +.B \-P +option is supplied or the +.B \-o physical +option to the +.B set +builtin command is enabled. +If the +.B \-L +option is used, the pathname printed may contain symbolic links. +The return status is 0 unless an error occurs while +reading the name of the current directory or an +invalid option is supplied. +.TP +\fBread\fP [\fB\-ers\fP] [\fB\-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 ...] +One line is read from the standard input, or from the file descriptor +\fIfd\fP supplied as an argument to the \fB\-u\fP option, and the first word +is assigned to the first +.IR name , +the second word to the second +.IR name , +and so on, with leftover words and their intervening separators assigned +to the last +.IR name . +If there are fewer words read from the input stream than names, +the remaining names are assigned empty values. +The characters in +.SM +.B IFS +are used to split the line into words. +The backslash character (\fB\e\fP) may be used to remove any special +meaning for the next character read and for line continuation. +Options, if supplied, have the following meanings: +.RS +.PD 0 +.TP +.B \-a \fIaname\fP +The words are assigned to sequential indices +of the array variable +.IR aname , +starting at 0. +.I aname +is unset before any new values are assigned. +Other \fIname\fP arguments are ignored. +.TP +.B \-d \fIdelim\fP +The first character of \fIdelim\fP is used to terminate the input line, +rather than newline. +.TP +.B \-e +If the standard input +is coming from a terminal, +.B readline +(see +.SM +.B READLINE +above) is used to obtain the line. +.TP +.B \-n \fInchars\fP +\fBread\fP returns after reading \fInchars\fP characters rather than +waiting for a complete line of input. +.TP +.B \-p \fIprompt\fP +Display \fIprompt\fP on standard error, without a +trailing newline, before attempting to read any input. The prompt +is displayed only if input is coming from a terminal. +.TP +.B \-r +Backslash does not act as an escape character. +The backslash is considered to be part of the line. +In particular, a backslash-newline pair may not be used as a line +continuation. +.TP +.B \-s +Silent mode. If input is coming from a terminal, characters are +not echoed. +.TP +.B \-t \fItimeout\fP +Cause \fBread\fP to time out and return failure if a complete line of +input is not read within \fItimeout\fP seconds. +This option has no effect if \fBread\fP is not reading input from the +terminal or a pipe. +.TP +.B \-u \fIfd\FP +Read input from file descriptor \fIfd\fP. +.PD +.PP +If no +.I names +are supplied, the line read is assigned to the variable +.SM +.BR REPLY . +The return code is zero, unless end-of-file is encountered, \fBread\fP +times out, or an invalid file descriptor is supplied as the argument to +\fB\-u\fP. +.RE +.TP +\fBreadonly\fP [\fB\-apf\fP] [\fIname\fP[=\fIword\fP] ...] +.PD +The given +\fInames\fP are marked readonly; the values of these +.I names +may not be changed by subsequent assignment. +If the +.B \-f +option is supplied, the functions corresponding to the +\fInames\fP are so +marked. +The +.B \-a +option restricts the variables to arrays. +If no +.I name +arguments are given, or if the +.B \-p +option is supplied, a list of all readonly names is printed. +The +.B \-p +option causes output to be displayed in a format that +may be reused as input. +If a variable name is followed by =\fIword\fP, the value of +the variable is set to \fIword\fP. +The return status is 0 unless an invalid option is encountered, +one of the +.I names +is not a valid shell variable name, or +.B \-f +is supplied with a +.I name +that is not a function. +.TP +\fBreturn\fP [\fIn\fP] +Causes a function to exit with the return value specified by +.IR n . +If +.I n +is omitted, the return status is that of the last command +executed in the function body. If used outside a function, +but during execution of a script by the +.B . +(\fBsource\fP) command, it causes the shell to stop executing +that script and return either +.I n +or the exit status of the last command executed within the +script as the exit status of the script. If used outside a +function and not during execution of a script by \fB.\fP\^, +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 ...] +Without options, the name and value of each shell variable are displayed +in a format that can be reused as input. +The output is sorted according to the current locale. +When options are specified, they set or unset shell attributes. +Any arguments remaining after the options are processed are treated +as values for the positional parameters and are assigned, in order, to +.BR $1 , +.BR $2 , +.B ... +.BR $\fIn\fP . +Options, if specified, have the following meanings: +.RS +.PD 0 +.TP 8 +.B \-a +Automatically mark variables and functions which are modified or created +for export to the environment of subsequent commands. +.TP 8 +.B \-b +Report the status of terminated background jobs +immediately, rather than before the next primary prompt. This is +effective only when job control is enabled. +.TP 8 +.B \-e +Exit immediately if a \fIsimple command\fP (see +.SM +.B SHELL GRAMMAR +above) exits with a non-zero status. +The shell does not exit if the +command that fails is part of the command list immediately following a +.B while +or +.B until +keyword, +part of the test in an +.I if +statement, part of a +.B && +or +.B \(bv\(bv +list, 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. +.TP 8 +.B \-f +Disable pathname expansion. +.TP 8 +.B \-h +Remember the location of commands as they are looked up for execution. +This is enabled by default. +.TP 8 +.B \-k +All arguments in the form of assignment statements +are placed in the environment for a command, not just +those that precede the command name. +.TP 8 +.B \-m +Monitor mode. Job control is enabled. This option is on +by default for interactive shells on systems that support +it (see +.SM +.B JOB CONTROL +above). Background processes run in a separate process +group and a line containing their exit status is printed +upon their completion. +.TP 8 +.B \-n +Read commands but do not execute them. This may be used to +check a shell script for syntax errors. This is ignored by +interactive shells. +.TP 8 +.B \-o \fIoption\-name\fP +The \fIoption\-name\fP can be one of the following: +.RS +.TP 8 +.B allexport +Same as +.BR \-a . +.TP 8 +.B braceexpand +Same as +.BR \-B . +.TP 8 +.B emacs +Use an emacs-style command line editing interface. This is enabled +by default when the shell is interactive, unless the shell is started +with the +.B \-\-noediting +option. +.TP 8 +.B errtrace +Same as +.BR \-E . +.TP 8 +.B functrace +Same as +.BR \-T . +.TP 8 +.B errexit +Same as +.BR \-e . +.TP 8 +.B hashall +Same as +.BR \-h . +.TP 8 +.B histexpand +Same as +.BR \-H . +.TP 8 +.B history +Enable command history, as described above under +.SM +.BR HISTORY . +This option is on by default in interactive shells. +.TP 8 +.B ignoreeof +The effect is as if the shell command +.if t \f(CWIGNOREEOF=10\fP +.if n ``IGNOREEOF=10'' +had been executed +(see +.B Shell Variables +above). +.TP 8 +.B keyword +Same as +.BR \-k . +.TP 8 +.B monitor +Same as +.BR \-m . +.TP 8 +.B noclobber +Same as +.BR \-C . +.TP 8 +.B noexec +Same as +.BR \-n . +.TP 8 +.B noglob +Same as +.BR \-f . +.B nolog +Currently ignored. +.TP 8 +.B notify +Same as +.BR \-b . +.TP 8 +.B nounset +Same as +.BR \-u . +.TP 8 +.B onecmd +Same as +.BR \-t . +.TP 8 +.B physical +Same as +.BR \-P . +.TP 8 +.B posix +Change the behavior of +.B bash +where the default operation differs +from the POSIX 1003.2 standard to match the standard (\fIposix mode\fP). +.TP 8 +.B privileged +Same as +.BR \-p . +.TP 8 +.B verbose +Same as +.BR \-v . +.TP 8 +.B vi +Use a vi-style command line editing interface. +.TP 8 +.B xtrace +Same as +.BR \-x . +.sp .5 +.PP +If +.B \-o +is supplied with no \fIoption\-name\fP, the values of the current options are +printed. +If +.B +o +is supplied with no \fIoption\-name\fP, a series of +.B set +commands to recreate the current option settings is displayed on +the standard output. +.RE +.TP 8 +.B \-p +Turn on +.I privileged +mode. In this mode, the +.SM +.B $ENV +and +.SM +.B $BASH_ENV +files are not processed, shell functions are not inherited from the +environment, and the +.SM +.B SHELLOPTS +variable, if it appears in the environment, is ignored. +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the \fB\-p\fP option is not supplied, these actions +are taken and the effective user id is set to the real user id. +If the \fB\-p\fP option is supplied at startup, the effective user id is +not reset. +Turning this option off causes the effective user +and group ids to be set to the real user and group ids. +.TP 8 +.B \-t +Exit after reading and executing one command. +.TP 8 +.B \-u +Treat unset variables as an error when performing +parameter expansion. If expansion is attempted on an +unset variable, the shell prints an error message, and, +if not interactive, exits with a non-zero status. +.TP 8 +.B \-v +Print shell input lines as they are read. +.TP 8 +.B \-x +After expanding each \fIsimple command\fP, +\fBfor\fP command, \fBcase\fP command, \fBselect\fP command, or +arithmetic \fBfor\fP command, display the expanded value of +.SM +.BR PS4 , +followed by the command and its expanded arguments +or associated word list. +.TP 8 +.B \-B +The shell performs brace expansion (see +.B Brace Expansion +above). This is on by default. +.TP 8 +.B \-C +If set, +.B bash +does not overwrite an existing file with the +.BR > , +.BR >& , +and +.B <> +redirection operators. This may be overridden when +creating output files by using the redirection operator +.B >| +instead of +.BR > . +.TP 8 +.B \-E +If set, any trap on \fBERR\fP is inherited by shell functions, command +substitutions, and commands executed in a subshell environment. +The \fBERR\fP trap is normally not inherited in such cases. +.TP 8 +.B \-H +Enable +.B ! +style history substitution. This option is on by +default when the shell is interactive. +.TP 8 +.B \-P +If set, the shell does not follow symbolic links when executing +commands such as +.B cd +that change the current working directory. It uses the +physical directory structure instead. By default, +.B bash +follows the logical chain of directories when performing commands +which change the current directory. +.TP 8 +.B \-T +If set, any trap on \fBDEBUG\fP is inherited by shell functions, command +substitutions, and commands executed in a subshell environment. +The \fBDEBUG\fP trap is normally not inherited in such cases. +.TP 8 +.B \-\- +If no arguments follow this option, then the positional parameters are +unset. Otherwise, the positional parameters are set to the +\fIarg\fPs, even if some of them begin with a +.BR \- . +.TP 8 +.B \- +Signal the end of options, cause all remaining \fIarg\fPs to be +assigned to the positional parameters. The +.B \-x +and +.B \-v +options are turned off. +If there are no \fIarg\fPs, +the positional parameters remain unchanged. +.PD +.PP +The options are off by default unless otherwise noted. +Using + rather than \- causes these options to be turned off. +The options can also be specified as arguments to an invocation of +the shell. +The current set of options may be found in +.BR $\- . +The return status is always true unless an invalid option is encountered. +.RE +.TP +\fBshift\fP [\fIn\fP] +The positional parameters from \fIn\fP+1 ... are renamed to +.B $1 +.B .... +Parameters represented by the numbers \fB$#\fP +down to \fB$#\fP\-\fIn\fP+1 are unset. +.I n +must be a non-negative number less than or equal to \fB$#\fP. +If +.I n +is 0, no parameters are changed. +If +.I n +is not given, it is assumed to be 1. +If +.I n +is greater than \fB$#\fP, the positional parameters are not changed. +The return status is greater than zero if +.I n +is greater than +.B $# +or less than zero; otherwise 0. +.TP +\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...] +Toggle the values of variables controlling optional shell behavior. +With no options, or with the +.B \-p +option, a list of all settable options is displayed, with +an indication of whether or not each is set. +The \fB\-p\fP option causes output to be displayed in a form that +may be reused as input. +Other options have the following meanings: +.RS +.PD 0 +.TP +.B \-s +Enable (set) each \fIoptname\fP. +.TP +.B \-u +Disable (unset) each \fIoptname\fP. +.TP +.B \-q +Suppresses normal output (quiet mode); the return status indicates +whether the \fIoptname\fP is set or unset. +If multiple \fIoptname\fP arguments are given with +.BR \-q , +the return status is zero if all \fIoptnames\fP are enabled; non-zero +otherwise. +.TP +.B \-o +Restricts the values of \fIoptname\fP to be those defined for the +.B \-o +option to the +.B set +builtin. +.PD +.PP +If either +.B \-s +or +.B \-u +is used with no \fIoptname\fP arguments, the display is limited to +those options which are set or unset, respectively. +Unless otherwise noted, the \fBshopt\fP options are disabled (unset) +by default. +.PP +The return status when listing options is zero if all \fIoptnames\fP +are enabled, non-zero otherwise. When setting or unsetting options, +the return status is zero unless an \fIoptname\fP is not a valid shell +option. +.PP +The list of \fBshopt\fP options is: +.if t .sp .5v +.if n .sp 1v +.PD 0 +.TP 8 +.B cdable_vars +If set, an argument to the +.B cd +builtin command that +is not a directory is assumed to be the name of a variable whose +value is the directory to change to. +.TP 8 +.B cdspell +If set, minor errors in the spelling of a directory component in a +.B cd +command will be corrected. +The errors checked for are transposed characters, +a missing character, and one character too many. +If a correction is found, the corrected file name is printed, +and the command proceeds. +This option is only used by interactive shells. +.TP 8 +.B checkhash +If set, \fBbash\fP checks that a command found in the hash +table exists before trying to execute it. If a hashed command no +longer exists, a normal path search is performed. +.TP 8 +.B checkwinsize +If set, \fBbash\fP checks the window size after each command +and, if necessary, updates the values of +.SM +.B LINES +and +.SM +.BR COLUMNS . +.TP 8 +.B cmdhist +If set, +.B bash +attempts to save all lines of a multiple-line +command in the same history entry. This allows +easy re-editing of multi-line commands. +.TP 8 +.B dotglob +If set, +.B bash +includes filenames beginning with a `.' in the results of pathname +expansion. +.TP 8 +.B execfail +If set, a non-interactive shell will not exit if +it cannot execute the file specified as an argument to the +.B exec +builtin command. An interactive shell does not exit if +.B exec +fails. +.TP 8 +.B expand_aliases +If set, aliases are expanded as described above under +.SM +.BR ALIASES . +This option is enabled by default for interactive shells. +.TP 8 +.B extdebug +If set, behavior intended for use by debuggers is enabled: +.RS +.TP +.B 1. +The \fB\-F\fP option to the \fBdeclare\fP builtin displays the source +file name and line number corresponding to each function name supplied +as an argument. +.TP +.B 2. +If the command run by the \fBDEBUG\fP trap returns a non-zero value, the +next command is skipped and not executed. +.TP +.B 3. +If the command run by the \fBDEBUG\fP trap returns a value of 2, and the +shell is executing in a subroutine (a shell function or a shell script +executed by the \fB.\fP or \fBsource\fP builtins), a call to +\fBreturn\fP is simulated. +.RE +.TP 8 +.B extglob +If set, the extended pattern matching features described above under +\fBPathname Expansion\fP are enabled. +.TP 8 +.B extquote +If set, \fB$\fP'\fIstring\fP' and \fB$\fP"\fIstring\fP" quoting is +performed within \fB${\fP\fIparameter\fP\fB}\fP expansions +enclosed in double quotes. This option is enabled by default. +.TP 8 +.B histappend +If set, the history list is appended to the file named by the value +of the +.B HISTFILE +variable when the shell exits, rather than overwriting the file. +.TP 8 +.B histreedit +If set, and +.B readline +is being used, a user is given the opportunity to re-edit a +failed history substitution. +.TP 8 +.B histverify +If set, and +.B readline +is being used, the results of history substitution are not immediately +passed to the shell parser. Instead, the resulting line is loaded into +the \fBreadline\fP editing buffer, allowing further modification. +.TP 8 +.B hostcomplete +If set, and +.B readline +is being used, \fBbash\fP will attempt to perform hostname completion when a +word containing a \fB@\fP is being completed (see +.B Completing +under +.SM +.B READLINE +above). +This is enabled by default. +.TP 8 +.B huponexit +If set, \fBbash\fP will send +.SM +.B SIGHUP +to all jobs when an interactive login shell exits. +.TP 8 +.B interactive_comments +If set, allow a word beginning with +.B # +to cause that word and all remaining characters on that +line to be ignored in an interactive shell (see +.SM +.B COMMENTS +above). This option is enabled by default. +.TP 8 +.B lithist +If set, and the +.B cmdhist +option is enabled, multi-line commands are saved to the history with +embedded newlines rather than using semicolon separators where possible. +.TP 8 +.B login_shell +The shell sets this option if it is started as a login shell (see +.SM +.B "INVOCATION" +above). +The value may not be changed. +.TP 8 +.B mailwarn +If set, and a file that \fBbash\fP is checking for mail has been +accessed since the last time it was checked, the message ``The mail in +\fImailfile\fP has been read'' is displayed. +.TP 8 +.B no_empty_cmd_completion +If set, and +.B readline +is being used, +.B bash +will not attempt to search the \fBPATH\fP for possible completions when +completion is attempted on an empty line. +.TP 8 +.B nocaseglob +If set, +.B bash +matches filenames in a case\-insensitive fashion when performing pathname +expansion (see +.B Pathname Expansion +above). +.TP 8 +.B nullglob +If set, +.B bash +allows patterns which match no +files (see +.B Pathname Expansion +above) +to expand to a null string, rather than themselves. +.TP 8 +.B progcomp +If set, the programmable completion facilities (see +\fBProgrammable Completion\fP above) are enabled. +This option is enabled by default. +.TP 8 +.B promptvars +If set, prompt strings undergo variable and parameter expansion after +being expanded as described in +.SM +.B PROMPTING +above. This option is enabled by default. +.TP 8 +.B restricted_shell +The shell sets this option if it is started in restricted mode (see +.SM +.B "RESTRICTED SHELL" +below). +The value may not be changed. +This is not reset when the startup files are executed, allowing +the startup files to discover whether or not a shell is restricted. +.TP 8 +.B shift_verbose +If set, the +.B shift +builtin prints an error message when the shift count exceeds the +number of positional parameters. +.TP 8 +.B sourcepath +If set, the +\fBsource\fP (\fB.\fP) builtin uses the value of +.SM +.B PATH +to find the directory containing the file supplied as an argument. +This option is enabled by default. +.TP 8 +.B xpg_echo +If set, the \fBecho\fP builtin expands backslash-escape sequences +by default. +.RE +.TP +\fBsuspend\fP [\fB\-f\fP] +Suspend the execution of this shell until it receives a +.SM +.B SIGCONT +signal. The +.B \-f +option says not to complain if this is +a login shell; just suspend anyway. The return status is 0 unless +the shell is a login shell and +.B \-f +is not supplied, or if job control is not enabled. +.TP +\fBtest\fP \fIexpr\fP +.PD 0 +.TP +\fB[\fP \fIexpr\fP \fB]\fP +Return a status of 0 or 1 depending on +the evaluation of the conditional expression +.IR expr . +Each operator and operand must be a separate argument. +Expressions are composed of the primaries described above under +.SM +.BR "CONDITIONAL EXPRESSIONS" . +.if t .sp 0.5 +.if n .sp 1 +Expressions may be combined using the following operators, listed +in decreasing order of precedence. +.RS +.PD 0 +.TP +.B ! \fIexpr\fP +True if +.I expr +is false. +.TP +.B ( \fIexpr\fP ) +Returns the value of \fIexpr\fP. +This may be used to override the normal precedence of operators. +.TP +\fIexpr1\fP \-\fBa\fP \fIexpr2\fP +True if both +.I expr1 +and +.I expr2 +are true. +.TP +\fIexpr1\fP \-\fBo\fP \fIexpr2\fP +True if either +.I expr1 +or +.I expr2 +is true. +.PD +.PP +\fBtest\fP and \fB[\fP evaluate conditional +expressions using a set of rules based on the number of arguments. +.if t .sp 0.5 +.if n .sp 1 +.PD 0 +.TP +0 arguments +The expression is false. +.TP +1 argument +The expression is true if and only if the argument is not null. +.TP +2 arguments +If the first argument is \fB!\fP, the expression is true if and +only if the second argument is null. +If the first argument is one of the unary conditional operators listed above +under +.SM +.BR "CONDITIONAL EXPRESSIONS" , +the expression is true if the unary test is true. +If the first argument is not a valid unary conditional operator, the expression +is false. +.TP +3 arguments +If the second argument is one of the binary conditional operators listed above +under +.SM +.BR "CONDITIONAL EXPRESSIONS" , +the result of the expression is the result of the binary test using +the first and third arguments as operands. +If the first argument is \fB!\fP, the value is the negation of +the two-argument test using the second and third arguments. +If the first argument is exactly \fB(\fP and the third argument is +exactly \fB)\fP, the result is the one-argument test of the second +argument. +Otherwise, the expression is false. +The \fB\-a\fP and \fB\-o\fP operators are considered binary operators +in this case. +.TP +4 arguments +If the first argument is \fB!\fP, the result is the negation of +the three-argument expression composed of the remaining arguments. +Otherwise, the expression is parsed and evaluated according to +precedence using the rules listed above. +.TP +5 or more arguments +The expression is parsed and evaluated according to precedence +using the rules listed above. +.RE +.PD +.TP +.B times +Print the accumulated user and system times for the shell and +for processes run from the shell. The return status is 0. +.TP +\fBtrap\fP [\fB\-lp\fP] [\fIarg\fP] [\fIsigspec\fP ...] +The command +.I arg +is to be read and executed when the shell receives +signal(s) +.IR sigspec . +If +.I arg +is absent or +.BR \- , +all specified signals are +reset to their original values (the values they had +upon entrance to the shell). +If +.I arg +is the null string the signal specified by each +.I sigspec +is ignored by the shell and by the commands it invokes. +If +.I arg +is not present and +.B \-p +has been supplied, then the trap commands associated with each +.I sigspec +are displayed. +If no arguments are supplied or if only +.B \-p +is given, +.B trap +prints the list of commands associated with each signal number. +The +.B \-l +option causes the shell to print a list of signal names and +their corresponding numbers. +Each +.I sigspec +is either +a signal name defined in <\fIsignal.h\fP>, or a signal number. +If a +.I sigspec +is +.SM +.B EXIT +(0) the command +.I arg +is executed on exit from the shell. +If a +.I sigspec +is +.SM +.BR DEBUG , +the command +.I arg +is executed before every \fIsimple command\fP, \fIfor\fP command, +\fIcase\fP command, \fIselect\fP command, every arithmetic \fIfor\fP +command, and before the first command executes in a shell function (see +.SM +.B SHELL GRAMMAR +above). +Refer to the description of the \fBextglob\fP option to the +\fBshopt\fP builtin for details of its effect on the \fBDEBUG\fP trap. +If a +.I sigspec +is +.SM +.BR ERR , +the command +.I arg +is executed whenever a simple command has a non\-zero exit status. +The +.SM +.B ERR +trap is not executed if the failed +command is part of the command list immediately following a +.B while +or +.B until +keyword, +part of the test in an +.I if +statement, part of a +.B && +or +.B \(bv\(bv +list, or if the command's return value is +being inverted via +.BR ! . +If a +.I sigspec +is +.SM +.BR RETURN , +the command +.I arg +is executed each time a shell function or a script executed with the +\fB.\fP or \fBsource\fP builtins finishes executing. +Signals ignored upon entry to the shell cannot be trapped or reset. +Trapped signals are reset to their original values in a child +process when it is created. +The return status is false if any +.I sigspec +is invalid; otherwise +.B trap +returns true. +.TP +\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP ...] +With no options, +indicate how each +.I name +would be interpreted if used as a command name. +If the +.B \-t +option is used, +.B type +prints a string which is one of +.IR alias , +.IR keyword , +.IR function , +.IR builtin , +or +.I file +if +.I name +is an alias, shell reserved word, function, builtin, or disk file, +respectively. +If the +.I name +is not found, then nothing is printed, and an exit status of false +is returned. +If the +.B \-p +option is used, +.B type +either returns the name of the disk file +that would be executed if +.I name +were specified as a command name, +or nothing if +.if t \f(CWtype -t name\fP +.if n ``type -t name'' +would not return +.IR file . +The +.B \-P +option forces a +.SM +.B PATH +search for each \fIname\fP, even if +.if t \f(CWtype -t name\fP +.if n ``type -t name'' +would not return +.IR file . +If a command is hashed, +.B \-p +and +.B \-P +print the hashed value, not necessarily the file that appears +first in +.SM +.BR PATH . +If the +.B \-a +option is used, +.B type +prints all of the places that contain +an executable named +.IR name . +This includes aliases and functions, +if and only if the +.B \-p +option is not also used. +The table of hashed commands is not consulted +when using +.BR \-a . +The +.B \-f +option suppresses shell function lookup, as with the \fBcommand\fP builtin. +.B type +returns true if any of the arguments are found, false if +none are found. +.TP +\fBulimit\fP [\fB\-SHacdflmnpstuv\fP [\fIlimit\fP]] +Provides control over the resources available to the shell and to +processes started by it, on systems that allow such control. +The \fB\-H\fP and \fB\-S\fP options specify that the hard or soft limit is +set for the given resource. A hard limit cannot be increased once it +is set; a soft limit may be increased up to the value of the hard limit. +If neither \fB\-H\fP nor \fB\-S\fP is specified, both the soft and hard +limits are set. +The value of +.I limit +can be a number in the unit specified for the resource +or one of the special values +.BR hard , +.BR soft , +or +.BR unlimited , +which stand for the current hard limit, the current soft limit, and +no limit, respectively. +If +.I limit +is omitted, the current value of the soft limit of the resource is +printed, unless the \fB\-H\fP option is given. When more than one +resource is specified, the limit name and unit are printed before the value. +Other options are interpreted as follows: +.RS +.PD 0 +.TP +.B \-a +All current limits are reported +.TP +.B \-c +The maximum size of core files created +.TP +.B \-d +The maximum size of a process's data segment +.TP +.B \-f +The maximum size of files created by the shell +.TP +.B \-l +The maximum size that may be locked into memory +.TP +.B \-m +The maximum resident set size +.TP +.B \-n +The maximum number of open file descriptors (most systems do not +allow this value to be set) +.TP +.B \-p +The pipe size in 512-byte blocks (this may not be set) +.TP +.B \-s +The maximum stack size +.TP +.B \-t +The maximum amount of cpu time in seconds +.TP +.B \-u +The maximum number of processes available to a single user +.TP +.B \-v +The maximum amount of virtual memory available to the shell +.PD +.PP +If +.I limit +is given, it is the new value of the specified resource (the +.B \-a +option is display only). +If no option is given, then +.B \-f +is assumed. Values are in 1024-byte increments, except for +.BR \-t , +which is in seconds, +.BR \-p , +which is in units of 512-byte blocks, +and +.B \-n +and +.BR \-u , +which are unscaled values. +The return status is 0 unless an invalid option or argument is supplied, +or an error occurs while setting a new limit. +.RE +.TP +\fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP] +The user file-creation mask is set to +.IR mode . +If +.I mode +begins with a digit, it +is interpreted as an octal number; otherwise +it is interpreted as a symbolic mode mask similar +to that accepted by +.IR chmod (1). +If +.I mode +is omitted, the current value of the mask is printed. +The +.B \-S +option causes the mask to be printed in symbolic form; the +default output is an octal number. +If the +.B \-p +option is supplied, and +.I mode +is omitted, the output is in a form that may be reused as input. +The return status is 0 if the mode was successfully changed or if +no \fImode\fP argument was supplied, and false otherwise. +.TP +\fBunalias\fP [\-\fBa\fP] [\fIname\fP ...] +Remove each \fIname\fP from the list of defined aliases. If +.B \-a +is supplied, all alias definitions are removed. The return +value is true unless a supplied +.I name +is not a defined alias. +.TP +\fBunset\fP [\-\fBfv\fP] [\fIname\fP ...] +For each +.IR name , +remove the corresponding variable or function. +If no options are supplied, or the +.B \-v +option is given, each +.I name +refers to a shell variable. +Read-only variables may not be unset. +If +.B \-f +is specifed, +each +.I name +refers to a shell function, and the function definition +is removed. +Each unset variable or function is removed from the environment +passed to subsequent commands. +If any of +.SM +.BR RANDOM , +.SM +.BR SECONDS , +.SM +.BR LINENO , +.SM +.BR HISTCMD , +.SM +.BR FUNCNAME , +.SM +.BR GROUPS , +or +.SM +.B DIRSTACK +are unset, they lose their special properties, even if they are +subsequently reset. The exit status is true unless a +.I name +is readonly. +.TP +\fBwait\fP [\fIn\fP] +Wait for the specified process and return its termination +status. +.I n +may be a process +ID or a job specification; if a job spec is given, all processes +in that job's pipeline are waited for. If +.I n +is not given, all currently active child processes +are waited for, and the return status is zero. If +.I n +specifies a non-existent process or job, the return status is +127. Otherwise, the return status is the exit status of the last +process or job waited for. +.\" bash_builtins +.if \n(zZ=1 .ig zZ +.SH "RESTRICTED SHELL" +.\" rbash.1 +.zY +.PP +If +.B bash +is started with the name +.BR rbash , +or the +.B \-r +option is supplied at invocation, +the shell becomes restricted. +A restricted shell is used to +set up an environment more controlled than the standard shell. +It behaves identically to +.B bash +with the exception that the following are disallowed or not performed: +.IP \(bu +changing directories with \fBcd\fP +.IP \(bu +setting or unsetting the values of +.BR SHELL , +.BR PATH , +.BR ENV , +or +.B BASH_ENV +.IP \(bu +specifying command names containing +.B / +.IP \(bu +specifying a file name containing a +.B / +as an argument to the +.B . +builtin command +.IP \(bu +Specifying a filename containing a slash as an argument to the +.B \-p +option to the +.B hash +builtin command +.IP \(bu +importing function definitions from the shell environment at startup +.IP \(bu +parsing the value of \fBSHELLOPTS\fP from the shell environment at startup +.IP \(bu +redirecting output using the >, >|, <>, >&, &>, and >> redirection operators +.IP \(bu +using the +.B exec +builtin command to replace the shell with another command +.IP \(bu +adding or deleting builtin commands with the +.B \-f +and +.B \-d +options to the +.B enable +builtin command +.IP \(bu +Using the \fBenable\fP builtin command to enable disabled shell builtins +.IP \(bu +specifying the +.B \-p +option to the +.B command +builtin command +.IP \(bu +turning off restricted mode with +\fBset +r\fP or \fBset +o restricted\fP. +.PP +These restrictions are enforced after any startup files are read. +.PP +When a command that is found to be a shell script is executed (see +.SM +.B "COMMAND EXECUTION" +above), +.B rbash +turns off any restrictions in the shell spawned to execute the +script. +.\" end of rbash.1 +.if \n(zY=1 .ig zY +.SH "SEE ALSO" +.PD 0 +.TP +\fIBash Reference Manual\fP, Brian Fox and Chet Ramey +.TP +\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey +.TP +\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey +.TP +\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE +.TP +\fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1) +.TP +\fIemacs\fP(1), \fIvi\fP(1) +.TP +\fIreadline\fP(3) +.PD +.SH FILES +.PD 0 +.TP +.FN /bin/bash +The \fBbash\fP executable +.TP +.FN /etc/profile +The systemwide initialization file, executed for login shells +.TP +.FN ~/.bash_profile +The personal initialization file, executed for login shells +.TP +.FN ~/.bashrc +The individual per-interactive-shell startup file +.TP +.FN ~/.bash_logout +The individual login shell cleanup file, executed when a login shell exits +.TP +.FN ~/.inputrc +Individual \fIreadline\fP initialization file +.PD +.SH AUTHORS +Brian Fox, Free Software Foundation +.br +bfox@gnu.org +.PP +Chet Ramey, Case Western Reserve University +.br +chet@po.CWRU.Edu +.SH BUG REPORTS +If you find a bug in +.B bash, +you should report it. But first, you should +make sure that it really is a bug, and that it appears in the latest +version of +.BR bash . +The latest version is always available from +\fIftp://ftp.gnu.org/pub/bash/\fP. +.PP +Once you have determined that a bug actually exists, use the +.I bashbug +command to submit a bug report. +If you have a fix, you are encouraged to mail that as well! +Suggestions and `philosophical' bug reports may be mailed +to \fIbug-bash@gnu.org\fP or posted to the Usenet +newsgroup +.BR gnu.bash.bug . +.PP +ALL bug reports should include: +.PP +.PD 0 +.TP 20 +The version number of \fBbash\fR +.TP +The hardware and operating system +.TP +The compiler used to compile +.TP +A description of the bug behaviour +.TP +A short script or `recipe' which exercises the bug +.PD +.PP +.I bashbug +inserts the first three items automatically into the template +it provides for filing a bug report. +.PP +Comments and bug reports concerning +this manual page should be directed to +.IR chet@po.CWRU.Edu . +.SH BUGS +.PP +It's too big and too slow. +.PP +There are some subtle differences between +.B bash +and traditional versions of +.BR sh , +mostly because of the +.SM +.B POSIX +specification. +.PP +Aliases are confusing in some uses. +.PP +Shell builtin commands and functions are not stoppable/restartable. +.PP +Compound commands and command sequences of the form `a ; b ; c' +are not handled gracefully when process suspension is attempted. +When a process is stopped, the shell immediately executes the next +command in the sequence. +It suffices to place the sequence of commands between +parentheses to force it into a subshell, which may be stopped as +a unit. +.PP +Commands inside of \fB$(\fP...\fB)\fP command substitution are not +parsed until substitution is attempted. This will delay error +reporting until some time after the command is entered. +.PP +Array variables may not (yet) be exported. +.zZ +.zY diff --git a/doc/bash.html b/doc/bash.html index 2cfb6547..c19bc7be 100644 --- a/doc/bash.html +++ b/doc/bash.html @@ -642,7 +642,6 @@ command: </DL> - <A NAME="lbAK"> </A> <H2>SHELL GRAMMAR</H2> @@ -5411,7 +5410,7 @@ the version of <B>bash</B> (e.g., 2.00) <DT><B>\V</B> <DD> -the release of <B>bash</B>, version + patchelvel (e.g., 2.00.0) +the release of <B>bash</B>, version + patch level (e.g., 2.00.0) <DT><B>\w</B> <DD> @@ -11355,6 +11354,6 @@ Array variables may not (yet) be exported. </DL> <HR> This document was created by man2html from bash.1.<BR> -Time: 29 June 2004 10:37:49 EDT +Time: 19 July 2004 16:04:22 EDT </BODY> </HTML> diff --git a/doc/bash.pdf b/doc/bash.pdf Binary files differindex 0d7436b5..9a671a1a 100644 --- a/doc/bash.pdf +++ b/doc/bash.pdf diff --git a/doc/bash.ps b/doc/bash.ps index 2c086e6e..f2686220 100644 --- a/doc/bash.ps +++ b/doc/bash.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.18.1 -%%CreationDate: Tue Jun 29 10:37:28 2004 +%%CreationDate: Mon Jul 19 16:03:47 2004 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic @@ -3625,15 +3625,16 @@ F1(\\@)144 156 Q F0(the current time in 12-hour am/pm format)23.92 E F1 144 180 Q F0(the username of the current user)27.66 E F1(\\v)144 192 Q F0(the v)28.22 E(ersion of)-.15 E F1(bash)2.5 E F0(\(e.g., 2.00\))2.5 E F1(\\V)144 204 Q F0(the release of)26 E F1(bash)2.5 E F0 2.5(,v)C -(ersion + patchelv)-2.65 E(el \(e.g., 2.00.0\))-.15 E F1(\\w)144 216 Q -F0(the current w)26 E(orking directory)-.1 E 2.5(,w)-.65 G(ith)-2.5 E F1 -($HOME)2.5 E F0(abbre)2.5 E(viated with a tilde)-.25 E F1(\\W)144 228 Q -F0(the basename of the current w)23.22 E(orking directory)-.1 E 2.5(,w) --.65 G(ith)-2.5 E F1($HOME)2.5 E F0(abbre)2.5 E(viated with a tilde)-.25 -E F1(\\!)144 240 Q F0(the history number of this command)29.89 E F1(\\#) -144 252 Q F0(the command number of this command)28.22 E F1(\\$)144 264 Q -F0(if the ef)28.22 E(fecti)-.25 E .3 -.15(ve U)-.25 H(ID is 0, a).15 E -F1(#)2.5 E F0 2.5(,o)C(therwise a)-2.5 E F1($)2.5 E(\\)144 276 Q/F2 10 +(ersion + patch le)-2.65 E -.15(ve)-.25 G 2.5(l\().15 G(e.g., 2.00.0\)) +-2.5 E F1(\\w)144 216 Q F0(the current w)26 E(orking directory)-.1 E 2.5 +(,w)-.65 G(ith)-2.5 E F1($HOME)2.5 E F0(abbre)2.5 E(viated with a tilde) +-.25 E F1(\\W)144 228 Q F0(the basename of the current w)23.22 E +(orking directory)-.1 E 2.5(,w)-.65 G(ith)-2.5 E F1($HOME)2.5 E F0 +(abbre)2.5 E(viated with a tilde)-.25 E F1(\\!)144 240 Q F0 +(the history number of this command)29.89 E F1(\\#)144 252 Q F0 +(the command number of this command)28.22 E F1(\\$)144 264 Q F0 +(if the ef)28.22 E(fecti)-.25 E .3 -.15(ve U)-.25 H(ID is 0, a).15 E F1 +(#)2.5 E F0 2.5(,o)C(therwise a)-2.5 E F1($)2.5 E(\\)144 276 Q/F2 10 /Times-Italic@0 SF(nnn)A F0 (the character corresponding to the octal number)18.22 E F2(nnn)2.5 E F1 (\\\\)144 288 Q F0 2.5(ab)30.44 G(ackslash)-2.5 E F1(\\[)144 300 Q F0 diff --git a/doc/bashref.dvi b/doc/bashref.dvi Binary files differindex 333e9c48..f8894897 100644 --- a/doc/bashref.dvi +++ b/doc/bashref.dvi diff --git a/doc/bashref.html b/doc/bashref.html index e71130a3..0189bd46 100644 --- a/doc/bashref.html +++ b/doc/bashref.html @@ -1,6 +1,6 @@ <HTML> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<!-- Created on June, 29 2004 by texi2html 1.64 --> +<!-- Created on July, 27 2004 by texi2html 1.64 --> <!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> @@ -33,12 +33,12 @@ 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.0-rc1, 26 June 2004).. +the Bash shell (version 3.0, 27 July 2004).. </P><P> -This is Edition 3.0, last updated 26 June 2004, +This is Edition 3.0, last updated 27 July 2004, of <CITE>The GNU Bash Reference Manual</CITE>, -for <CODE>Bash</CODE>, Version 3.0-rc1. +for <CODE>Bash</CODE>, Version 3.0. </P><P> Bash contains features that appear in other popular shells, and some @@ -15013,7 +15013,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>June, 29 2004</I> +This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> <P></P> @@ -15175,7 +15175,7 @@ the following structure: <BR> <FONT SIZE="-1"> This document was generated -by <I>Chet Ramey</I> on <I>June, 29 2004</I> +by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> diff --git a/doc/bashref.log b/doc/bashref.log index 1d427409..3ced88d7 100644 --- a/doc/bashref.log +++ b/doc/bashref.log @@ -1,6 +1,6 @@ -This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 29 JUN 2004 10:37 -**/usr/homes/chet/src/bash/src/doc/bashref.texi -(/usr/homes/chet/src/bash/src/doc/bashref.texi (texinfo.tex +This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2003.12.31) 27 JUL 2004 09:12 +**/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, \bindingoffset=\dimen16 \normaloffset=\dimen17 @@ -106,7 +106,7 @@ cross references, \auxfile=\write2 \savesfregister=\count46 \footnoteno=\count47 - (/usr/local/share/texmf/tex/plain/dvips/epsf.tex + (/sw/share/texmf/tex/generic/misc/epsf.tex \epsffilein=\read0 \epsfframemargin=\dimen39 \epsfframethickness=\dimen40 @@ -119,18 +119,18 @@ 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,11 +152,12 @@ localization, \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 862--862 []@texttt case @textttsl word @texttt in [ [(] @textttsl pat-tern @texttt [| @ textttsl pat-tern@texttt ][]) @textttsl command-list @texttt ;;][] esac[][] @@ -264,7 +265,7 @@ the file .etc. [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] Chapter 7 -[78] [79] [80] [81] (/usr/homes/chet/src/bash/src/lib/readline/doc/rluser.texi +[78] [79] [80] [81] (/Users/chet/src/bash/src/lib/readline/doc/rluser.texi Chapter 8 [82] [83] [84] [85] [86] [87] Underfull \hbox (badness 5231) in paragraph at lines 488--504 @texttt emacs-meta[]@textrm , @texttt emacs-ctlx[]@textrm , @texttt vi[]@textr @@ -316,7 +317,7 @@ Underfull \hbox (badness 2753) in paragraph at lines 1742--1745 .@texttt o .etc. -[107]) (/usr/homes/chet/src/bash/src/lib/readline/doc/hsuser.texi Chapter 9 +[107]) (/Users/chet/src/bash/src/lib/readline/doc/hsuser.texi Chapter 9 [108] [109] [110] [111] [112]) Chapter 10 [113] [114] [115] [116] [117] Underfull \hbox (badness 2772) in paragraph at lines 6610--6614 []@textrm Enable sup-port for large files (@texttt http://www.sas.com/standard @@ -331,8 +332,8 @@ s/large_ .etc. [118] [119] [120] Appendix A [121] [122] Appendix B [123] [124] [125] [126] -[127] [128] Appendix C [129] [130] (fdl.texi [131] [132] [133] [134] [135] -[136]) (Index of Shell Builtin Commands) [137] [138] (bashref.bts) +[127] [128] Appendix C [129] [130] (./fdl.texi [131] [132] [133] [134] [135] +[136]) (Index of Shell Builtin Commands) [137] [138] (./bashref.bts) (Index of Shell Reserved Words) Overfull \vbox (42.26959pt too high) has occurred while \output is active \vbox(643.19986+0.0)x433.62, glue set - 1.0 @@ -351,16 +352,16 @@ Overfull \vbox (42.26959pt too high) has occurred while \output is active .etc. -[139] [140] (bashref.rws) (Parameter and Variable Index) [141] [142] -(bashref.vrs [143]) (Function Index) [144] (bashref.fns [145]) (Concept Index) -[146] (bashref.cps [147]) [148] ) +[139] [140] (./bashref.rws) (Parameter and Variable Index) [141] [142] +(./bashref.vrs [143]) (Function Index) [144] (./bashref.fns [145]) +(Concept Index) [146] (./bashref.cps [147]) [148] ) Here is how much of TeX's memory you used: - 1713 strings out of 13013 - 23227 string characters out of 97233 - 52385 words of memory out of 263001 - 2577 multiletter control sequences out of 10000+0 - 31953 words of font info for 111 fonts, out of 400000 for 1000 + 1726 strings out of 98002 + 23501 string characters out of 1221986 + 52362 words of memory out of 1000001 + 2577 multiletter control sequences out of 10000+50000 + 31953 words of font info for 111 fonts, out of 500000 for 1000 19 hyphenation exceptions out of 1000 - 15i,8n,11p,273b,465s stack positions out of 300i,100n,500p,50000b,4000s + 15i,8n,11p,269b,465s stack positions out of 1500i,500n,5000p,200000b,5000s -Output written on bashref.dvi (154 pages, 580120 bytes). +Output written on bashref.dvi (154 pages, 580108 bytes). diff --git a/doc/bashref.pdf b/doc/bashref.pdf Binary files differindex bcb8bc09..6221fbe4 100644 --- a/doc/bashref.pdf +++ b/doc/bashref.pdf diff --git a/doc/bashref.ps b/doc/bashref.ps index c8c13016..89c20806 100644 --- a/doc/bashref.ps +++ b/doc/bashref.ps @@ -1,14 +1,16 @@ %!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software +%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software %%Title: bashref.dvi %%Pages: 154 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMBX12 CMR10 CMTT10 CMSL10 CMSY10 CMBXTI10 CMTI10 +%%+ CMCSC10 CMSLTT10 CMTT12 CMSY9 CMR8 CMTT9 CMTI9 CMR9 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi %DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2004.06.29:1037 +%DVIPSSource: TeX output 2004.07.27:0912 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -67,2466 +69,4150 @@ 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 -TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi) -@start -%DVIPSBitmapFont: Fa cmtt12 14.4 2 -/Fa 2 126 df<EE1FFC923801FFFE150F153F5D92B5FC4A14FC4AEBF8004A138003FCC7 -FC4A5A5DB3A9141F4A5A147F903803FFC0013F5B007FB5C8FCB55A5C14F014FC806C7FD8 -003F7F01037F9038007FE0143F6E7E140FB3A9816E7EEDFF806E13F86EEBFFFC6E14FE81 -81150F15019238001FFC2F5D79D23E>123 D<EA3FF048B47EB512F014FC80806C80D800 -1F7F01017FEB003F6E7E140FB3A9816E7E81913803FFC06E13FC6EEBFFFC6F13FE81150F -153F5D92B512FC4AEBFC004A13C04A48C7FC5D4A5A5DB3A9141F4A5AEB01FF011F5B007F -B55AB6C8FC5C5C14F06C1380D83FF0C9FC2F5D79D23E>125 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmr9 9 54 -/Fb 54 123 df<EC1FE0ECFFFC903803F01E90390FC00780EB1F8090393F000FC0017E13 -1F5BA2485AED0F8092C7FCA9ED0FC0B7FCA33901F8001F150FB3A6486CEB1FE0267FFFC1 -B5FCA328357FB42B>12 D<123C127EB4FCA21380A2127F123D1201A412031300A25A1206 -120E120C121C5A5A126009177A8715>44 D<EB0FE0EB7FFCEBF83E3903E00F803907C007 -C0EB8003000F14E0391F0001F0A24814F8A2003E1300007E14FCA500FE14FEB2007E14FC -A56CEB01F8A36C14F0A2390F8003E03907C007C0A23903E00F803900F83E00EB7FFCEB0F -E01F347DB126>48 D<13075B5B137FEA07FFB5FC13BFEAF83F1200B3B3A2497E007FB512 -80A319327AB126>I<EB3FC0EBFFF0000313FC380F80FF391E007F80001CEB3FC048EB1F -E048130F15F00060130712FC6C14F87E1403A3007E1307123CC7FC15F0A2140F15E0EC1F -C0A2EC3F801500147E5C495A5C495A495A495A49C7FC133E133C4913185B485A48481330 -485A48C7FC001C1470001FB512F05A5AB612E0A31D327CB126>I<EB1FE0EBFFFC4813FF -3907E03F80390F001FC0001EEB0FE0001CEB07F0123F018013F8140313C01380A2381F00 -07C7FC15F0A2EC0FE015C0141FEC3F80EC7E00EB01F8EB7FE014FCEB003FEC1FC0EC0FE0 -EC07F015F8140315FC140115FEA3127EB4FCA415FC48130312780070EB07F86C14F0003C -130F001FEB1FE0390FE03F800003B51200C613FCEB1FE01F347DB126>I<EC01C0A21403 -1407A2140F141FA2143F147F146F14CF1301EB038F140F1307130E130C131C1338133013 -7013E013C0EA0180120313001206120E120C5A123812305A12E0B71280A3C7380FC000A9 -4A7E0107B51280A321337EB226>I<000C14C0380FC00F90B5128015005C5C14F014C0D8 -0C18C7FC90C8FCA9EB0FC0EB7FF8EBF07C380FC03F9038001F80EC0FC0120E000CEB07E0 -A2C713F01403A215F8A41218127E12FEA315F0140712F8006014E01270EC0FC06C131F00 -3C14806CEB7F00380F80FE3807FFF8000113E038003F801D347CB126>I<14FE903807FF -80011F13E090383F00F0017C13703901F801F8EBF003EA03E01207EA0FC0EC01F04848C7 -FCA248C8FCA35A127EEB07F0EB1FFC38FE381F9038700F809038E007C039FFC003E00180 -13F0EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA26C1301018013F8000F14F0 -EBC0030007EB07E03903E00FC03901F81F806CB51200EB3FFCEB0FE01F347DB126>I<12 -30123C003FB6FCA34814FEA215FC0070C7123800601430157015E04814C01401EC0380C7 -EA07001406140E5C141814385CA25CA2495A1303A3495AA2130FA3131F91C7FCA25BA55B -A9131C20347CB126>I<EB0FE0EB7FFC90B5FC3903F01F803907C007C0390F0003E0000E -EB01F0001E1300001C14F8003C1478A3123EA2003F14F86D13F0EBC001D81FF013E09038 -F803C0390FFE07803907FF0F006C13DE6C13F87EEB3FFE8001F713C0D803E313E0D80780 -13F0390F007FF8001E131F003EEB07FC003C1303481301EC007E12F848143EA2151EA37E -153C1278007C14787E6C14F0390F8003E03907F01FC00001B5120038007FFCEB1FE01F34 -7DB126>I<EB0FE0EB7FF8EBFFFE3803F83F3907E00F80390FC007C0D81F8013E0EC03F0 -EA3F0048EB01F8127EA200FE14FC1400A415FEA5007E1301A2127F7E1403EA1F80000F13 -073807C00E3803E01C3801F03838007FF090381FC0FC90C7FC1401A215F8A215F0140300 -1F14E0383F800715C0140FEC1F809038003F00001C137E381F01FC380FFFF0000313C0C6 -90C7FC1F347DB126>I<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187FA34A6C7EA2 -02707FEC601FA202E07FECC00FA2D901807F1507A249486C7EA301066D7EA2010E80010F -B5FCA249800118C77EA24981163FA2496E7EA3496E7EA20001821607487ED81FF04A7ED8 -FFFE49B512E0A333367DB53A>65 D<B7FC16E016F83A03FC0003FE0001EC00FFEE7F80EE -3FC0161F17E0160F17F0A617E0161F17C0EE3F80EE7F0016FEED03FC90B612F05E9039FC -0007FCED00FEEE3F80EE1FC0EE0FE017F0160717F8160317FCA617F81607A2EE0FF0EE1F -E0163FEE7FC00003913803FF00B75A16F816C02E337DB236>I<B77E16F016FE3A01FE00 -01FF00009138003FC0EE0FE0707E707E707E707E177E177FEF3F80A2EF1FC0A3EF0FE0A4 -18F0AA18E0A3171F18C0A21880173F18005F17FE5F4C5AEE07F04C5AEE3FC000014AB45A -B748C7FC16F8168034337EB23B>68 D<B81280A3D803FCC7FC0001151FEE07C01603A216 -01A21600A41760150CA31700A2151CA2153C15FC90B5FCA3EBFC00153C151CA2150CA592 -C8FCAB487EB512FEA32B337DB232>70 D<DA03FE130C91393FFF801C91B512E0903A03FE -01F83C903A0FF0003C7CD91FC0EB0EFCD97F80130701FEC7120348481401000315005B48 -48157C485A173C485A171C123F5B007F160CA390C9FC4893C7FCAA0303B512E07E7F9239 -0003FE00705A123F7F121FA26C7E7F12076C7E7F6C6C14036C7E6D6C1307D91FC0EB0E7C -D90FF0EB1C3CD903FEEBF81C0100B5EAF00C023F01C0C7FCDA03FEC8FC33377CB43C>I< -B5D8FE03B512F8A3000190C73807FC006C486E5AB390B7FCA349C71203B3A3486C4A7EB5 -D8FE03B512F8A335337EB23A>I<B512FEA3000113006C5AB3B3A7487EB512FEA317337E -B21C>I<B512FEA3D803FEC9FC6C5AB3A9EE0180A416031700A45EA25E5E5E5E16FE0003 -1407B7FCA329337DB230>76 D<D8FFFC923801FFF86D5DA20003EFFE00D801BFED06FCA3 -D99F80140CA2D98FC01418A3D987E01430A2D983F01460A3D981F814C0A3D980FCEB0180 -A2027EEB0300A36E1306A26E6C5AA36E6C5AA36E6C5AA26E6C5AA36E6C5AA3913800FD80 -A2037FC7FCA3486C133ED80FF04B7EB5011C90387FFFF8A33D337CB246>I<D8FFFE9138 -1FFFF87F80C6030013006E143CD9DFE01418EBCFF0A2EBC7F8EBC3FCA2EBC1FEEBC0FF6E -7EA26E7E6E7EA26E7E6E7E6E7EA26E7E6E7EA2ED7F80ED3FC0ED1FE0A2ED0FF0ED07F8A2 -ED03FCED01FEED00FFA2EE7F98EE3FD8A2EE1FF8160F1607A216031601A2486C1400D807 -F81578B500C01438A2171835337EB23A>I<EC07FC91387FFFC0903901FC07F0903907E0 -00FCD90F80133E013FC76C7E017E6E7E496E7E48486E7E48486E7EA248486E7E000F8249 -157E001F167FA24848ED3F80A2007F17C0A290C9121FA24817E0AB6C17C06D153FA3003F -17806D157FA2001F17006D5D000F5E6C6C4A5AA26C6C4A5A00015E6C6C4A5A017E4A5A6D -4A5AD91FC0017FC7FCD907E013FC903901FC07F09039007FFFC0DA07FCC8FC33377CB43C ->I<B612FEEDFFC016F03A03FC0007FC0001EC00FE167FEE3F80EE1FC017E0160FA217F0 -A617E0A2EE1FC0A2EE3F80EE7F0016FEED07F890B65A168001FCC9FCB3A2487EB512F8A3 -2C337DB234>I<B612FCEDFF8016F03A01FE0007FC0000EC01FEED007F707E707E83160F -83A65FA24C5AA24C5A047EC7FC4B5AED0FF090B612C093C8FC9039FE001FC0ED07F06F7E -6F7E150082167E167FA583A5180C17C0A2043F131C486C1618B500FEEB1FE0040F133893 -3807F070C93801FFE09338003F8036357EB239>82 D<90381FE00390387FFC0748B5FC39 -07F01FCF390F8003FF48C7FC003E80814880A200788000F880A46C80A27E92C7FC127F13 -C0EA3FF013FF6C13F06C13FF6C14C06C14F0C680013F7F01037F9038003FFF1403020013 -80157F153FED1FC0150F12C0A21507A37EA26CEC0F80A26C15006C5C6C143E6C147E01C0 -5B39F1FC03F800E0B512E0011F138026C003FEC7FC22377CB42B>I<B500FE90381FFFF8 -A3000190C813006C48153C1718B3AF1738017F1530A217706D6C1460011F15E06E495A01 -0F14036D6C495A6D6C49C7FCD901FC131E6DB413FC91383FFFF0020F13C0020190C8FC35 -357EB23A>85 D<267FFFFC90B512C0A3000101E090381FF80026007F80EB0FC0013F6E5A -6E91C7FC6D6C130E010F140C6E5B6D6C133801035C6E13606D6C13E06D6C485A5EDA7F83 -C8FCEC3FC715C6EC1FECEC0FFC5D14076E7EA26E7E815C6F7E9138063FC0140E4A6C7E91 -38180FF0EC380702707F91386003FCECC0010101804A6C7E49C77E4981010E6E7E010C6E -7E131C496E7E01786E7E13FCD807FEEC1FFEB56C90B512F8A335337EB23A>88 -D<EB7F803803FFF0380F80FC381C003E003F133F6D6C7E6E7EA26E7EEA1F00C7FCA4EB01 -FF131FEBFF873803FC07EA0FF0EA1FC0EA3F80127F13004815C05AA3140FA26C131F6C13 -3B3A3F8071F180391FC1E1FF2607FFC013003900FE003C22237DA126>97 -D<EA03F012FFA312071203AEEC3F80ECFFE09038F3C0F89038F7007E01FE7F49EB1F8049 -EB0FC05BED07E016F0A2150316F8AA16F0150716E0A2ED0FC07F6DEB1F8001ECEB3F0001 -CF137C90388381F8903801FFE0C76CC7FC25357EB32B>I<EB07F8EB3FFF9038FC07C039 -01F000E03903E003F03807C007120FEA1F80123F90380003E04890C7FCA2127E12FEAA12 -7FA26C14187F001F14386D1330000F14706C6C13E03903F001C03900FC0F8090383FFE00 -EB07F01D237EA122>I<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEBFC0F3901F003BF39 -07E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C6C5BA26C6C5B6C6C -4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B>I<EB0FE0EB7FFCEB -F83F3903F00F80D807E013C0390FC007E0381F800315F0EA3F0014014814F8127EA212FE -A2B6FCA248C8FCA5127E127FA26C1418A26C6C1338000F14306D13706C6C13E03901F003 -C03900FC0F00EB3FFEEB07F01D237EA122>I<EB01FCEB07FF90381F078090383E0FC0EB -7C1F13FCEA01F8A20003EB070049C7FCACB512F0A3D803F0C7FCB3A7487E387FFFE0A31A -357FB417>I<151F90391FC07F809039FFF8E3C03901F07FC73907E03F033A0FC01F8380 -9039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C48C7FCEBF07C380E -FFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14FC4880381F000100 -3EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC001F83903F007E0C6 -B51280D91FFCC7FC22337EA126>I<EA03F012FFA312071203AEEC1FC0EC7FF09038F1E0 -FC9038F3807C9038F7007E13FE497FA25BA25BB3486CEB7F80B538C7FFFCA326347EB32B ->I<EA0780EA0FC0EA1FE0A4EA0FC0EA0780C7FCAAEA07E012FFA3120F1207B3A6EA0FF0 -B5FCA310337EB215>I<EB03C0EB07E0EB0FF0A4EB07E0EB03C090C7FCAAEB03F013FFA3 -13071303B3B01238127C00FE13E0130714C0130F007C138038381F00EA1FFCEA07F01443 -84B217>I<EA03F012FFA312071203AF913803FFE0A36E1300EC00F8EC01E05D4A5A020F -C7FC141C5C5C14F0EBF3F8EBF7FC13FEEBFC7EEBF87F496C7E141F6E7E8114076E7E8114 -016E7E81486CEBFF80B500C313F0A324347EB329>I<EA07E012FFA3120F1207B3B3A7EA -0FF0B5FCA310347EB315>I<2703F01FE013FF00FF90267FF80313C0903BF1E07C0F03E0 -903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495CA2495CB3486C496C -487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF09038F1E0FC9038F3 -807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA326217EA02B>I<EB -07F0EB3FFE9038FC1F803901F007C03903C001E000078048486C7E48C7127CA248147E00 -3E143E007E143FA300FE1580A8007E1500A36C147EA26C147C6D13FC6C6C485A00075C39 -03F007E03900FC1F80D93FFEC7FCEB07F021237EA126>I<3903F03F8000FFEBFFE09038 -F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0A3ED03F8A9150716 -F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038F1FFE0D9F07FC7FC -91C8FCAA487EB512C0A325307EA02B>I<903807F00390383FFC07EBFC0F3901F8038F38 -07E001000F14DF48486CB4FC497F123F90C77E5AA25A5AA9127FA36C6C5B121F6D5B000F -5B3907E003BF3903F0073F3800F81EEB3FF8EB0FE090C7FCAAED7F8091380FFFFCA32630 -7DA029>I<3803E07C38FFE1FF9038E38F809038E71FC0EA07EEEA03ECA29038FC0F8049 -C7FCA35BB2487EB512E0A31A217FA01E>I<EBFF06000713CE381F00FE003C133E48131E -140E5A1406A27EA200FE90C7FC6C7EEA7FFC383FFFC014F0000F7F6C7FC67FEB0FFF1300 -EC3F8000C0131F140F6C1307A37E15006C5B6C130E6C5B38F7807838E1FFE038C07F8019 -237EA11E>I<1330A51370A313F0A21201A212031207381FFFFEB5FCA23803F000AF1403 -A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0182F7FAD1E>I<D803F0133F00FFEB -0FFFA30007EB007F000380B35DA35D12016D4813800000903803BFFC90387E073FEB1FFE -D907F8130026227EA02B>I<B5EBFFF0A3D80FF0EB3F800007EC1F000003140E150C6D13 -1C00011418A26C6C5BA26D1370017E1360137F6D5BA290381F8180A214C3010F90C7FCA2 -EB07E6A214FE6D5AA26D5AA36D5AA2146024217E9F29>I<B53A1FFF81FFF0A33C07F801 -FC003F8001F049EB1E0000030100141C816C6C017C1318A26D017E1338000002FE1330A2 -90267E01FF5B159F168090263F030F5BA216C0903A1F8607C180A202C613E390260FCC03 -90C7FCA2D907FC13F6ECF80116FE6D486C5AA36D481378A36D48133034217F9F37>I<B5 -3801FFF8A32603FE0013806C48EB7C0000001478017E1370017F5B90383F81C090381F83 -80D90FC3C7FCEB07E614FE6D5A6D5A6D7E80805B9038039F809038071FC09038060FE0EB -0C0790381C03F0496C7E01707FEBF000000180000FECFF8026FFFC0313FCA326207F9F29 ->I<3A7FFF807FF8A33A07F8001FC00003EC0F800001EC070015066C6C5BA26D131C017E -1318A26D5BA2EC8070011F1360ECC0E0010F5BA2903807E180A214F3010390C7FC14FBEB -01FEA26D5AA31478A21430A25CA214E05CA2495A1278D8FC03C8FCA21306130EEA701CEA -7838EA1FF0EA0FC025307F9F29>I<003FB512F0A2EB000F003C14E00038EB1FC00030EB -3F800070137F1500006013FE495A13035CC6485A495AA2495A495A49C7FC153013FE485A -12035B48481370485A001F14604913E0485A387F000348130F90B5FCA21C207E9F22>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmti9 9 1 -/Fc 1 47 df<121C127F12FFA412FE12380808778718>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmsltt10 9 18 -/Fd 18 122 df<007FB512F0B612F815FCA215F86C14F01E06789927>45 -D<147E903803FF804913C0011F13E04913F0EB7F879038FE01F8EBF800484813FC000314 -7C49137E4848133EA2485AA248C7FCA2123EA45AA500FC147C5AA215FC15F8A26CEB01F0 -A2007C130315E01407007EEB0FC015806C131FEC3F00381F807EEBC1FC6CB45A6C5B6C5B -6C1380D8007EC7FC1F3079AE27>48 D<1438147C14FC14F8130113031307130F133F3803 -FFF05A13FD13F913E3EA000314E0A41307A214C0A4130FA21480A4131FA21400A45BA213 -3EA3387FFFFEB6FCA36C13FE182F77AE27>I<D9FF80EB3FC0486DEB7FE016FFA26C4A13 -C0D91EE0EBDE00013EEB03FE16BE013C14BCED073CA2150F90397CF00E7C151E0178EB1C -78153C15381578D9F87013F8EC78F001F05CEC79E0A215C00001EB7BC1EC3B81D9E03F5B -1501A2143E0003EB1C031400495CA400071407A2495CA3D87FF0EB7FF0A200FF14FFA26C -486D5A2B2E7FAD27>77 D<EB7FF83801FFFE00076D7E8148809038F01FF0EBE0036C486C -7EEA0180C8FC140114FF011F5B90B5FC1203120F481383387FF00301805BEAFE005A5A14 -07A24A5A6C133F38FF01FF90B6FC6C15807E000F01E313003803FE0021207A9F27>97 -D<EB03FE90380FFF80013F13E090B512F04814F83903FE03FC3807F800EA0FE04848137E -5B48C7123EA2127E007FB512FEA4B612FC00FCC8FCA2127C127E1578007F14F8383F8001 -EBC003391FF80FF06CB512E06C14C0000114806CEBFE00EB1FF01F207A9F27>101 -D<EBFFC05AA37E1307130FA25CA4131FA2EC07F8EC1FFEEC7FFF91B512804914C0ECFC1F -ECE00FECC0071480140049130F137E1680137CA301FC131FA2491400A400015CA249133E -A33A7FFF87FFF0B500CF13F8A36C018713F0252E7FAD27>104 D<143814FE1301A46D5A -147891C7FCA73803FFF0487FA37EEA00015CA41303A25CA41307A25CA4130FA25CA3007F -B512C0B612E0A315C01B2F79AE27>I<90B5FC5AA37EEB001F5CA2143EA4147EA2147CA4 -14FCA25CA41301A25CA41303A25CA41307A25CA3007FB512F8B612FCA36C14F81E2E7BAD -27>108 D<3A03F0FC07E03A07FBFE1FF090B5EA3FF8EDFFFCA2C690388FFC7C9039FE07 -F03C01FC13E001F813C0A23A01F00F807CA2167801E01300A300034913F8A2D9C01E13F0 -A40007EB3E01A2D9803C13E0A33A7FF0FF87FCD8FFF9EBCFFEA3D87FF1EB8FFC2720809F -27>I<3903FE07F83907FF1FFEEC7FFF91B5128016C039003FFC1FECE00FECC007148014 -0049130F137E1680137CA301FC131FA2491400A400015CA249133EA33A7FFF87FFF0B500 -CF13F8A36C018713F025207F9F27>I<EB01FCEB0FFF013F13C090B512E04814F03903FC -0FF83807F003390FE000FC1380001F147C48C7127E003E143EA25AA400FC147CA215FC00 -7C14F81401007EEB03F0A26CEB0FE09038801FC0391FE07F8090B512006C5B6C13F80001 -5B38007F801F207A9F27>I<3A07FF803FC0489038C1FFF002C713F802CF13FC6C90B5FC -D8000F13E3ED03F89138FC01F09138F800604A1300495A5CA25CA291C8FC5BA2133EA413 -7EA2137CA3B6FCA526207D9F27>114 D<903807FF1C013F13FE90B5FC5A1207EBFC0139 -0FE000FC49137C5BA2153801E01300EA07FEEBFFF8000113FF6C6C13C0010F13E0903800 -7FF0EC03F8001C1301003EEB00FC157C007E14FC127FEC01F8EB80039038E01FF090B5FC -B612C0158000F8EBFE0038703FF01F207B9F27>I<131E133FA2133EA4137EA2007FB512 -F0B612F8A36C14F0D800FCC7FC5BA41201A25BA41203A25BA2EC01E015F01403A2EC07E0 -140F9038F83FC090B5128015006C5B38007FF8EB1FC01D2979A827>I<397FC00FF839FF -E01FFCA4000713004913F8A4000F1301A2018013F0A4001F1303A2010013E0A314075A14 -0F003EEB1FC0003F133FEB80FF90B512FE6C14FFA2000713EF0001EB07FE20207A9F27> -I<3A03FFE07FF848ECFFFCA36C15F83A001F003E006D6C5A01075BECC1F0903803E3E05D -903801F7806DB4C7FC5C147C143C147C14FE1301EB03CF9038078F80EB0F07011E7FEB3E -03496C7E01F87F3801F0003A7FFC07FFC0486C4813E0A201FC14C0007F7F26207E9F27> -120 D<3A01FFE01FFF486D5AA39138E01FFE3A001E0003C0A2011FEB0780A26DEB0F00A2 -151E148001075BA25DA26E5A1303ECC1E0A2ECC3C0EB01E3ECE780A202EFC7FC130014FE -A25CA2147814F85C13015C13035C130700085BEA7E0F49C8FCEAFE3EEAF8FEB45A5B6C5A -EA3FC06CC9FC28317F9F27>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmtt9 9 81 -/Fe 81 127 df<123C127E12FFAF127EAE123C1200A7123C127E12FFA4127E123C082F71 -AE27>33 D<90383C03C090387E07E0A7EBFE0F01FC13C0A2007FB512FEB7FCA4003F14FE -3901F81F80AC003FB512FEB7FCA46C14FE3903F03F00A200075BEBE07EA73803C03C202E -7DAD27>35 D<EB0380497EA5EB1FF0EBFFFE0003EBFF804814C0001F14E09038E7DFF039 -3F87C7F8387E07C3007C13C100FCEBC0FC12F814C1A300FCEBC0F800FE1470007F140013 -87EA3FFF7E6C13F86C13FE6CEBFF80C614C0010F13E06D13F014CFECC3F814C10038EBC0 -FC127C00FE147CA412FC00FE14F8007E13C1007FEBC3F0383F87C79038F7FFE06CB512C0 -6C1480000314006C13FC38003FE0EB07C0A56D5A1E3A7CB327>I<131FEB7FC0497E5A80 -EA03F1EBE1F8EA07E013C0A513C15C9039C3F1FF80D9E3E113C03803E7E3EBEFC101FF14 -80913881F800EC01F0EA01FEEBFC0301F85B00031307D807FC5B120F381FFE0FD83FBE5B -EB3F1FD87E1F90C7FC149F38FC0FBF14FE1307ECFC020103EB0F80EB01F8A238FE03FC38 -7E07FE397F1FFF9F6CB61200149F6CEB0FFE390FFC03FC3903F000F822307EAE27>38 -D<120FEA1FC0123F13E0A213F0121F120F1201A4120313E01207EA0FC0A2EA3F80EA7F00 -5A5A12F812700C1773AD27>I<EB01C0EB03E0130F131FEB3FC0EB7F80EBFE00485A5B12 -03485A5B485AA2485AA248C7FCA3127EA45AAC127EA47EA36C7EA26C7EA26C7E7F6C7E12 -017F6C7EEB7F80EB3FC0EB1FE0130F1303EB01C0133A73B327>I<127012F812FE7E6C7E -6C7EEA0FE06C7E12037F6C7E1200137EA27FA2EB1F80A3EB0FC0A4EB07E0ACEB0FC0A4EB -1F80A3EB3F00A2137EA25B1201485A5B1207485AEA3FC0485A48C7FC5A12F81270133A7A -B327>I<130F497EA60078EB81E000FEEB87F000FF138FEBDFBF6CB512E06C14C0000F14 -00000313FCC613F0A2000313FC000F13FF003F14C04814E039FFDFBFF0EB1F8F00FE1387 -0078EB81E00000EB8000A66DC7FC1C207BA627>I<120FEA3FC013E0EA7FF0A213F8A212 -3FA2120F120113F01203EA07E0121FEA7FC0EAFF8013005A12700D14738927>44 -D<007FB512F8B612FCA46C14F81E067C9927>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E -000A0A728927>I<1538157C15FCA2140115F8140315F0140715E0140F15C0141F158014 -3F1500A25C147E14FE5C13015C13035C13075C130F5CA2131F5C133F91C7FC5B137E13FE -5B12015B12035BA212075B120F5B121F5B123F90C8FC5A127E12FE5AA25A12781E3A7CB3 -27>I<EB07E0EB3FFC497E90B5FC4814803903FC3FC03907F00FE0390FE007F0EBC00339 -1F8001F8A248C712FCA2003E147C007E147EA3007C143E00FC143FAC007E147EA46C14FC -A2EB8001001F14F8EBC003000F14F0EBE0073907F00FE03903FC3FC06CB512806C14006D -5A6D5AEB07E020307DAE27>I<130E131FA25B5BA25B5A5A127FB5FCA213BFEA7E3F1200 -B3AA003FB512805A15C01580A21A2F79AE27>I<EB3FE03801FFF84813FE000FEBFF8048 -14C0393FE07FE0EB800F397F0007F0007EEB03F800FE13015A6C14FC1400A3127CC8FCA2 -140115F8A2140315F01407EC0FE0EC1FC0143FEC7F80ECFF00495A495A495A495A495A49 -5A495A01FEC7FC485AD807F81378484813FC485A485A48B5FCB6FCA36C14F81E2F7CAE27 ->I<EB1FF8EBFFFE0003EBFF80000F14C015E0391FF01FF0393FC007F8EB800115FC1400 -A26CC7FC1204C8FC140115F81403EC07F0140FEC3FE090381FFFC0491380A215E06D13F0 -9038001FF8EC03FC1401EC00FE157E157F153FA21238127C12FEA2157F48147E6C14FE00 -7FEB01FCEB8003393FF01FF86CB512F06C14E000031480C6EBFE00EB1FF820307DAE27> -I<EC3F804A7EA214FF5BA2EB03F7EB07E7A2EB0FC71487131FEB3F07A2137E13FCA2EA01 -F813F01203EA07E0A2EA0FC0EA1F80A2EA3F00123E127E5AB7128016C0A36C1580C73807 -C000A849B5FC491480A36D1400222F7EAE27>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E -00C7FCAC121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A20729F27>58 -D<120FEA3FC0A2EA7FE0A4EA3FC0A2EA0F00C7FCAC120FEA3F8013C0127F13E0A3123FA2 -120F120713C0120FA2EA3F80EA7F005A5A12F812700B2A739F27>I<153815FC14011407 -140FEC3FF8EC7FE0ECFFC001031300495AEB1FF8495A495A3801FF804890C7FCEA0FFC48 -5AEA7FF0EAFFC05BA27FEA7FF0EA1FF86C7EEA03FF6C7F38007FE06D7E6D7EEB07FE6D7E -010013C0EC7FE0EC3FF8EC0FFC14071401140015381E287CAA27>I<127012FC7E6C7E7F -EA7FF0EA1FF86C7EEA03FF6C7F38007FE06D7E6D7EEB07FE6D7E010013C0EC7FE0EC3FF8 -EC0FFC1407A2140FEC3FF8EC7FE0ECFFC001031300495AEB1FF8495A495A3801FF804890 -C7FCEA0FFC485AEA7FF0EAFFC05B48C8FC5A12701E287CAA27>62 -D<EBFFF8000313FF000F14C0003F14E04814F09038C01FF839FF0003FC4813011400A214 -01007C1303C7EA0FF8EC1FF0EC7FE0ECFFC0491300EB03FC495A5C495A5C131F5CA76DC7 -FC90C8FCA7130F497E497EA46D5A6DC7FC1E2E7CAD27>I<EB01FE903807FF80011F13C0 -017F13E090B512F048EB03F83803FC013907F000FC390FE01F7C9038C07FFE381F80FF13 -01485A393E07F1FF007E13E0397C0FC07FEC803FA2EAFC1F00F8EB001FA800FCEB803FD8 -7C0F133EA2ECC07E397E07E0FC003E13F1393F03FFF86C6C13F0018013E0390FC07FC090 -38E01F1E3907F0003FD803FC137F3901FF03FF6CEBFFFE6D13FC011F13F0010713C00101 -1300202E7DAD27>I<EB03F0497EA2497EA4143CEB1F3EA5EB3F3FA3EB3E1FA2017E7FA4 -496C7EA548486C7EA390B5FCA24880A3EBF003A248486C7EA4000F803A7FFC0FFF8000FF -15C06D5A497E007F1580222F7EAE27>I<007FB5FCB612C08115F87E3907E003FCEC00FE -157E157F81A6157EA25D1403EC0FF890B55A15C015F081819038E000FE157FED3F80151F -A2ED0FC0A6151F1680153FED7F004A5A007FB55AB65A5D15E06C1480222E7FAD27>I<90 -3803F80E90381FFE1F90383FFFBF90B6FC5A3803FE0F3807F803497E48487E485A49137F -A248C7123FA25A127E151E150012FE5AAA7E127EA2151E007F143F7EA26C7E157F6D137E -6C6C13FE3907F001FCEBF8033903FE0FF86CB512F06C14E0013F13C06D1300EB03F82030 -7DAE27>I<387FFFFC14FFB612C06C80813907E00FF81407EC01FC6E7EA2157E157F8116 -80151FA316C0150FABED1F80A3153F1600A25D15FEA24A5A4A5A140F007FB55A5DB65A6C -91C7FC14FC222E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC -07804A7EA390B5FCA5EBE00FA36E5A91C8FCA4ED03C0ED07E0A7007FB6FCB7FCA36C15C0 -232E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA3 -90B5FCA5EBE00FA36E5A91C8FCAC387FFF80B57EA36C5B222E7EAD27>I<903807F03890 -381FFC7C90387FFFFC90B5FC5A3803FC1F3807F00F380FE007EBC003001F13011380123F -90C7FCA2127EA2157892C7FC5AA8EC1FFF4A1380A3007E6D1300EC00FCA36C1301A21380 -121FEBC003120FEBE0073807F00F3803FC1F6CB5FC7EEB7FFE90381FFC78D907F0C7FC21 -307DAE27>I<3A7FFE07FFE0B54813F0A36C486C13E03A07E0007E00AF90B512FEA59038 -E0007EB03A7FFE07FFE0B54813F0A36C486C13E0242E7FAD27>I<007FB512E0B612F0A3 -6C14E039001F8000B3B2007FB512E0B612F0A36C14E01C2E7BAD27>I<3A7FFC07FF8016 -C0486C5A6C487E16803A07C001F80014035D4A5A4A5A141F5D4AC7FC147E14FE5CEBC1F8 -EBC3F013C75CEBCFF0EBDFF813FF8013FEEBFC7E143EEBF83F497E01E07F140F01C07F14 -07811403816E7EA26E7E157C157E3A7FFC01FFC016E0486C5A6C487E16C0232E7FAD27> -75 D<387FFFC080B5FC7E5CD803F0C8FCB3AAED0780ED0FC0A7007FB6FCA2B7FC7E1680 -222E7FAD27>I<D87FE0EB7FE0486CEBFFF0A26D5A007F15E0000F150001B813DFEBBC03 -A3EBBE07019E139FA3EB9F0FA2018F131FA2149FA2EB879EA4EB839C14FCA3EB81F8A2EB -80F01400AAD87FF0EBFFE0486C4813F0A36C486C13E0242E7FAD27>I<3A7FF003FFE048 -6C4813F0A213FC007F6D13E000079038003E0013DEA313CFA3148013C714C0A213C314E0 -A213C114F0A3EBC0F8A31478147CA2143C143EA2141E141F140FA3EC07BEA3EC03FEEA7F -FCEAFFFE1401A26C486C5A242E7FAD27>I<EBFFFC0007EBFF80001F14E0A24814F0EBC0 -0F397F8007F8EB0003007E1301A348EB00FCB3A76C1301007E14F8A3007F1303EB800739 -3FE01FF090B5FC6C14E0A200071480C6EBFC001E307CAE27>I<007FB5FCB612E081816C -803907E003FEEC00FF81ED3F80151F16C0150FA6151F1680153FED7F005DEC03FE90B55A -5D5D5D92C7FC01E0C8FCADEA7FFEB5FCA36C5A222E7FAD27>I<387FFFF0B512FE6E7E81 -6C803907E01FF014076E7E1401811400A514015D14034A5A141F90B55A5D5DA281EBE01F -6E7E14076E7EA816F0EDF1F8A4397FFE01FBB5EBFFF08016E06C48EB7FC0C8EA1F00252F -7FAD27>82 D<90387FC0E03901FFF1F0000713FF5A5AEA3FE0EB801F387F000F007E1307 -12FE5A1403A3EC01E06C90C7FC127E127FEA3FC013F86CB47E6C13F86C13FE6CEBFF80C6 -14C0010F13E0010013F0140FEC07F81403140115FC1400127812FCA46CEB01F8A26C1303 -90388007F09038F01FE090B5FC15C0150000F85B38701FF81E307CAE27>I<007FB61280 -B712C0A439FC03F00FA60078EC0780000091C7FCB3AB90B512C04880A36C5C222E7EAD27 ->I<3A7FFE01FFF8B54813FCA36C486C13F83A07E0001F80B3AB6D133F00031500A26D5B -0001147E6D13FE6C6C485A90387F87F814FF6D5B010F13C06D5BD901FEC7FC262F80AD27 ->I<3A7FFC03FFE06D5A00FF15F0007F15E0497E3A07E0007E00A46C6C5BA4EBF8010001 -5CA46C6C485AA490387E07E0A56D485AA4011F5B149FA3010F90C7FCA5EB07FEA46D5AA2 -6D5A242F7FAD27>I<D87FE0EB7FE0486CEBFFF0A36C48EB7FE0001FC7EA0F80A76C6CEB -1F00A614F0EB81F83907C3FC3EA4149CEBC79EA30003143CA301E7137CEBEF9FA2140FA2 -00011478A49038FE07F8A300005CA2EBFC0390387801E0242F7FAD27>I<393FFC1FFE38 -7FFE3F815D383FFC1F3903F00FE001F85B1201EBFC1F00005CEBFE3F017E90C7FCEB7F7F -EB3F7E14FE6D5AA26D5AA26D5AA21303130780130F80131F80EB3F7E147F497E017E7F14 -1F01FC7F140FD801F87F14071203496C7E120701E07F3A7FFC0FFF8000FF15C06D5A497E -007F1580222E7EAD27>I<3A7FFC03FFE06D5A00FF15F0007F15E0497E3A07F000FE0000 -035CEBF80100015CA2EBFC0300005CEBFE07017E5BA26D485AA290381F9F80A3010F90C7 -FCA2EB07FEA26D5AA26D5AAF90381FFF80497FA36D5B242E7FAD27>I<003FB512FE4814 -FFA4007EC712FEEC01FCA2EC03F8EC07F0A2003CEB0FE0C7EA1FC0A2EC3F80EC7F00A214 -FE5C1301495A5C1307495A5C131F495A91C7FC5B13FEA2485A4848131E153F485A485AA2 -485A485AA248C7FCB7FCA46C14FE202E7DAD27>I<387FFFF0B512F8A314F000FCC7FCB3 -B3ACB512F014F8A36C13F0153A71B327>I<387FFFF0B512F8A37EEA0001B3B3ACEA7FFF -B5FCA36C13F0153A7EB327>93 D<131C137E3801FF80000713E0001F13F84813FC38FFE7 -FF13C3130000FC133F0078131E180B79AD27>I<007FB512F8B612FCA46C14F81E067C7E -27>I<13E0EA01F01207120F13E0EA1FC0EA3F00A2127E127C12FC5AA4B4FC138013C012 -7FA2123F1380EA0F000C1773B227>I<3803FFC0000F13F04813FC4813FF811380EC1FC0 -381F000F000480C71207A2EB0FFF137F0003B5FC120F5A383FFC07EA7FC0130012FE5AA4 -6C130F007F131FEBC0FF6CB612806C15C07E000313F1C69038807F8022207C9F27>I<EA -7FE0487EA3127F1203A914FF01F313C090B512F08181EC81FE49C67E49EB3F8049131F16 -C049130FA216E01507A6150F16C07F151F6DEB3F80157F6DEBFF009038FF83FEECFFFC5D -5D01F313C02601E0FEC7FC232E7FAD27>I<EB0FFF017F13C048B512E04814F05A380FF8 -07EA1FE0393FC003E0903880008048C8FC127EA212FE5AA67E127EA2007F14F0393F8001 -F813C0381FE003390FF80FF06CB5FC6C14E06C14C06C6C1300EB0FF81D207B9F27>I<EC -3FF04A7EA3143F1401A9EB0FE1EB7FFD48B5FC5A5A380FF83F381FE00F383FC007EB8003 -EA7F00007E1301A212FE5AA67E007E1303A2127F6C1307EB800F381FE01F380FF03F6CB6 -12C06C15E06C13FD38007FF9D91FE013C0232E7EAD27>I<EB0FF8EB3FFE90B512800003 -14C04814E0390FFC0FF0391FE003F8EBC001D83F8013FC48C7FC127E157E12FEB612FEA4 -15FC00FCC8FC7E127E127F6C143C6D137E6C7E01F013FE390FFC07FC6CB5FC000114F86C -14F0013F13C0903807FE001F207D9F27>I<EC1FF0ECFFF84913FC4913FE5BEB0FF014C0 -011F137CEC8000A6007FB512F0B612F8A36C14F039001F8000B3A4003FB512C04814E0A3 -6C14C01F2E7EAD27>I<153F90391FC0FF80D97FF313C048B612E05A4814EF390FF07F87 -3A1FC01FC3C0EDC000EB800F48486C7EA66C6C485AEBC01FA2390FF07F8090B5C7FC5C48 -5BEB7FF0EB1FC090C9FCA27F6CB5FC15E015F84814FE4880EB8001007EC7EA3F80007C14 -0F00FC15C0481407A46C140F007C1580007F143F6C6CEB7F009038F807FF6CB55A000714 -F86C5CC614C0D90FFCC7FC23337EA027>I<EA7FE0487EA3127F1203A9147F9038F1FFC0 -01F713F090B5FC8114C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C0183 -13E0242E7FAD27>I<130F497E497EA46D5A6DC7FC90C8FCA7383FFF80487FA37EEA000F -B3A4007FB512F0B6FC15F815F07E1D2F7BAE27>I<143C147E14FFA4147E143C1400A738 -01FFFE4813FFA37EC7123FB3B0147E1238007C13FE38FE01FC1303B512F814F06C13E06C -13803807FE0018407CAE27>I<EA7FE07F12FF127FA21201A991383FFFC04A13E0A36E13 -C0913803F8004A5A4A5A4A5A4A5A02FFC7FCEBF1FEEBF3FCEBF7F8EBFFFC8080143F496C -7E496C7E01F87FEBF0076E7E6E7E816E7E157E3A7FFFC1FFF002C313F8B512E36C13C316 -F0252E80AD27>I<387FFF80B57EA37EEA000FB3B2007FB512F8B612FCA36C14F81E2E7C -AD27>I<397F07C01F3AFF9FF07FC09039FFF9FFE091B57E7E3A0FFC7FF1F89038F03FC0 -01E0138001C01300A3EB803EB03A7FF0FFC3FF486C01E3138001F913E701F813E36C4801 -C313002920819F27>I<387FE07F39FFF1FFC001F713F090B5FC6C80000313C1EC01FCEB -FE005B5BA25BB03A7FFF83FFE0B500C713F0A36C018313E024207F9F27>I<EB1FE0EB7F -F83801FFFE487F481480390FF03FC0391FC00FE0393F8007F0EB00034814F8007E1301A2 -48EB00FCA76C1301007E14F8A2007F1303393F8007F0A2391FE01FE0390FF03FC06CB512 -806C14006C5B38007FF8EB1FE01E207C9F27>I<387FE0FFD8FFF313C090B512F0816C80 -0003EB81FE49C67E49EB3F8049131F16C049130FA216E01507A6150F16C07F151F6DEB3F -80157F6DEBFF009038FF83FEECFFFC5D5D01F313C0D9F0FEC7FC91C8FCAC387FFF80B57E -A36C5B23317F9F27>I<90380FF03C90383FFE7E90B5FC000314FE5A380FFC1F381FE007 -EBC003383F800148C7FC127EA200FE147E5AA67E007E14FEA2007F1301EA3F80EBC00338 -1FE007380FF81F6CB5FC7E6C147E38007FFCEB0FF090C7FCAC91381FFFF8A24A13FC6E13 -F8A226317E9F27>I<397FFC03FC39FFFE0FFF023F13804A13C0007F90B5FC39007FFE1F -14F89138F00F809138E002004AC7FC5CA291C8FCA2137EAD007FB57EB67EA36C5C22207E -9F27>I<9038FFF3800007EBFFC0121F5A5AEB803F38FC000F5AA2EC07806C90C7FCEA7F -8013FC383FFFF06C13FC000713FF00011480D8000F13C09038003FE014070078EB03F000 -FC1301A27E14036CEB07E0EBE01F90B512C01580150000FB13FC38707FF01C207B9F27> -I<133C137EA8007FB512F0B612F8A36C14F0D8007EC7FCAE1518157EA415FE6D13FC1483 -ECFFF86D13F06D13E0010313C0010013001F297EA827>I<397FE01FF8486C487EA3007F -131F00031300B21401A21403EBFC0F6CB612E016F07EEB3FFE90390FF87FE024207F9F27 ->I<3A7FFC0FFF80486C4813C0A36C486C13803A07C000F800EBE00100035CA2EBF00300 -015CA2EBF80700005CA390387C0F80A36D48C7FCA3EB3F3FEB1F3EA214FE6D5AA36D5AA2 -6D5A22207E9F27>I<3A7FFE07FFE000FF15F06D5A497E007F15E03A0F80001F00A36D5B -0007143EA414F0EBC1F83903E3FC7CA4EBE79EA200011478A301F713F8A2EBFF0F6C5CA3 -EBFE0790387C03E024207F9F27>I<393FFC1FFF486C5A168016006C487E3901F807E06C -6C485A4A5A017E90C7FC6D5AEB1F7E5C6D5A13076D5A5C80497E130F497E143EEB3E3FEB -7E1F90387C0F8001F87F00016D7E3803F0033A7FFE1FFF80A2B54813C06C486C1380A222 -207E9F27>I<3A7FFC0FFF80486C4813C0A36C486C13803A07E000F800000313015D13F0 -0001130301F85B1200A26D485A137CA290387E0F80133EA2011F90C7FC5CA2130F149E14 -BE130714FC1303A25C1301A25CA213035CA213075C1208EA3E0F007F5B131FD87E7FC8FC -EA7FFE6C5A5B6C5AEA07C022317E9F27>I<001FB512FE4814FFA490380001FEEC03FCEC -07F8EC0FF0001EEB1FE0C7EA3FC0EC7F80ECFF00495A495A495AEB1FE0495A495A49C7FC -485A4848131E4848133F485A485A485A485AB7FCA46C14FE20207E9F27>I<EC07F8EC3F -FC14FF130315F8903807FE00EB0FF05C5CB0131FEB7F80EA3FFFB5C7FC5BA27F003F7FEA -007FEB1FC0130FB08080EB07FE903803FFF815FC1300143FEC07F81E3A7CB327>I<EA7F -80EAFFF013FC13FF7E00017F38003FC0131F130FB080EB07F8ECFFF06D13FC7FA25B4913 -F0ECF800EB0FE05CB0131F133F48B45A007F90C7FCB5FC13FC13F0EA7F801E3A7CB327> -125 D<3901F003803903FC07C0000F130F381FFE1F393FFF7F80397FBFFF0038FE1FFE48 -6C5A00F813F0387003E01A0A7AAD27>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr8 8 26 -/Ff 26 118 df<123C127EB4FCA21380A2127F123D1201A312031300A25A1206120E5A5A -5A126009157AAD14>39 D<B512C0A412047F9018>45 D<130C133C137CEA03FC12FFEAFC -7C1200B3B113FE387FFFFEA2172C7AAB23>49 D<4A7E4A7EA34A7EA24A7EA3EC1BF81419 -A2EC30FCA2EC70FEEC607EA24A7EA349486C7EA2010380EC000FA201066D7EA3496D7EA2 -011FB57EA29038180001496D7EA349147EA201E0147F4980A20001ED1F801203000716C0 -D80FF0EC3FE0D8FFFC0103B5FCA2302F7EAE35>65 D<B612FCEDFF803A03F8000FC00001 -EC03F06F7E6F7E82167E167FA6167E16FE5E4B5A4B5AED0FE0ED7F8090B6C7FC16E09039 -F80003F0ED01FC6F7E167F821780161F17C0A61780163F17005E16FEED03FC0003EC0FF0 -B712C04BC7FC2A2D7DAC32>I<DA1FF013C09138FFFE01903903F00F8390390F8001E301 -3FC71277017C143F4848141F4848140F48481407A248481403121F491401123F90C8FC48 -1500A300FE1600AB127F17C0A27E7F001F15016D1580120F6C6C1403EE07006C6C14066C -6C140ED8007C5C013F147890390F8001E0903903F00FC0902600FFFEC7FCEC1FF02A2F7C -AD33>I<B612F815FF3A03F8001FE00001EC03F0ED00F8167E82EE1F80160F17C0EE07E0 -A2EE03F0A217F81601A317FCAA17F8A3EE03F0A217E0160717C0160FEE1F80EE3F00167E -5EED03F00003EC1FE0B7128003F8C7FC2E2D7DAC36>I<B712FEA23903F800010001EC00 -3E828282A282A3178016011518A293C7FCA31538157815F890B5FCA2EBF8001578153815 -18A21760A392C712C0A4160117801603A21607160F163F0003913801FF00B8FCA22B2D7E -AC30>I<B712FCA23903F800030001EC007C163E161E160EA21606A3160716031518A216 -00A31538157815F890B5FCA2EBF800157815381518A592C7FCAB487EB512F8A2282D7EAC -2E>I<B512F8A2D803FCC8FC6C5AB3A7160CA41618A41638A2167816F81501ED07F00003 -141FB7FCA2262D7EAC2C>76 D<B612FCEDFF803A03F8000FE00001EC03F0ED00F882167E -167F821780A617005E167E5E5EED03F0ED0FE090B6128003FCC7FC01F8C9FCB2487EB512 -F0A2292D7EAC30>80 D<B612C015FC3903F8007F0001EC0FC06F7E6F7E6F7E82150082A5 -5E15015E4B5A4B5A4B5A037FC7FC90B512FC15F09038F800FC153E6F7E150F826F7EA582 -A5170316F815031707486C903801FC0EB539F000FE1CEE3FF8C9EA07E0302E7DAC34>82 -D<90383F80303901FFF0703807C07C390F000EF0001E13074813034813011400127000F0 -1470A315307EA26C1400127E127FEA3FE013FE381FFFE06C13FC6C13FF00011480D8003F -13E013039038003FF0EC07F81401140015FC157C12C0153CA37EA215787E6C14706C14F0 -6CEB01E039F78003C039E3F00F0038E07FFE38C00FF01E2F7CAD27>I<007FB712F8A290 -39000FC003007C150000701638A200601618A200E0161CA248160CA5C71500B3A94A7E01 -1FB512E0A22E2D7EAC33>I<EAFFE0A3EAE000B3B3B3A7EAFFE0A30B4379B114>91 -D<13FF000713C0380F01F0381C00F8003F137C80A2143F001E7FC7FCA4EB07FF137F3801 -FE1FEA07F0EA1FC0EA3F80EA7F00127E00FE14065AA3143F7E007E137F007FEBEF8C391F -83C7FC390FFF03F83901FC01E01F207D9E23>97 D<EB1FE0EB7FFC3801F01E3803E00739 -07C01F80EA0F80EA1F005A003EEB0F00007E90C7FCA2127C12FCA9127EA215C07E6C1301 -01801380380FC0033907E007003801F03E38007FF8EB1FC01A207E9E1F>99 -D<EB1F80EBFFF03803E0783807C03E380F801E381F001FEC0F80123E007E130715C0127C -12FCA3B6FCA200FCC8FCA5127EA2003E14C0123F6C1301390F80038001C013003803E00F -3801F03C38007FF8EB1FC01A207E9E1F>101 D<130FEB1F80EB3FC0A4EB1F80EB0F0090 -C7FCA8EB07C013FFA2130F1307B3AD1230127838FC0F80A21400485AEA783EEA3FF8EA07 -E0123C83AD16>106 D<EA07C012FFA2120F1207ADEC1FFEA2EC0FF0EC07C05D020EC7FC -5C5C5C5CEBC3C013C7EBCFE0EBDFF013F9EBF0F8497EEBC07E143E80816E7E14076E7E81 -6E7E486C487E3AFFFE07FF80A2212E7EAD25>I<3807C0FE39FFC3FF809038C703E0390F -DE01F0EA07F8496C7EA25BA25BB2486C487E3AFFFE1FFFC0A2221E7E9D27>110 -D<3807C0FE39FFC7FF809038CF03E0390FDC01F03907F800FC49137E49133E49133FED1F -80A3ED0FC0A8151F1680A2ED3F00A26D137E6D137C5D9038FC01F09038CE07E09038C7FF -80D9C1FCC7FC01C0C8FCA9487EEAFFFEA2222B7E9D27>112 D<380781F838FF87FEEB8E -3FEA0F9CEA07B813B0EBF01EEBE000A45BB0487EB5FCA2181E7E9D1C>114 -D<3801FE183807FFB8381E01F8EA3C00481378481338A21418A27E7EB41300EA7FF06CB4 -FC6C13C06C13F0000113F838001FFC130138C0007E143EA26C131EA27EA26C133CA26C13 -7838FF01F038E3FFC000C0130017207E9E1C>I<1360A413E0A312011203A21207121FB5 -12F0A23803E000AF1418A714383801F03014703800F860EB3FE0EB0F80152A7FA81B>I< -D807C013F800FF131FA2000F130100071300B21401A314033803E007EC0EFC3A01F81CFF -C038007FF890391FE0F800221F7E9D27>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmsy9 9 2 -/Fg 2 106 df<EB0180EB03C01307A21480130FA2EB1F00A2131E133EA25BA2137813F8 -A2485AA25B1203A2485AA25B120FA248C7FCA2121E123EA25AA2127812F8A41278127CA2 -7EA2121E121FA26C7EA212077FA26C7EA212017FA26C7EA21378137CA27FA2131E131FA2 -EB0F80A2130714C0A21303EB0180124A79B71E>104 D<126012F07EA21278127CA27EA2 -121E121FA26C7EA212077FA26C7EA212017FA26C7EA21378137CA27FA2131E131FA2EB0F -80A2130714C0A41480130FA2EB1F00A2131E133EA25BA2137813F8A2485AA25B1203A248 -5AA25B120FA248C7FCA2121E123EA25AA2127812F8A25A1260124A7CB71E>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmcsc10 12 9 -/Fh 9 121 df<160C161E163EA2163C167CA2167816F8A216F01501A2ED03E0A216C015 -07A21680150FA216005DA2153EA2153C157CA2157815F8A25D1401A24A5AA25D1407A25D -140FA292C7FC5CA2143EA2143C147CA2147814F8A2495AA25C1303A25C1307A25C130FA2 -49C8FCA2131E133EA2133C137CA2137813F8A2485AA25B1203A25B1207A25B120FA248C9 -FCA2121E123EA2123C127CA2127812F8A25A1260276479CA37>47 -D<B7FC16F016FC3A03FE0003FF6C489038007F80EE1FE0707E707E707E1601707E177FA2 -1880173F18C0A2EF1FE0A418F0AA18E0A4EF3FC0A21880177F180017FE16015F4C5AEE0F -F04C5AEE7FC0486CD903FFC7FCB712FC16F093C8FC34337BB23E>100 -D<DA03FF1303021FEBE00791B5EAF80F0103903800FE1FD90FF8EB1F3FD91FE0EB07BFD9 -7F806DB4FC49C77E484880484881484881A2484881121F4981123F5BA2007F82A25B00FF -93C7FCAA4BB512F86C7EA2DB00011380003F6F1300837F121F7F120F6C7E7F12036C7E6C -6C5DEB7FC0D91FE05BD90FF8EB07DF903A03FF803F8F01009038FFFE07021FEBF8030203 -0180C7FC35357BB340>103 D<B512F8A33803FE006C5AB3B3A7487EB512F8A315337BB2 -1E>105 D<EC07FF023F13E0903901FE03FC903907F0007FD90FC0EB1F80D93F80EB0FE0 -49C76C7E01FE6E7E48486E7E48486E7E4848157FA24848ED3F80001F17C0A24848ED1FE0 -A3007F17F049150FA300FF17F8AA007F17F06D151FA2003F17E0A26D153F001F17C0A26C -6CED7F80000717006D5D00035E6C6C4A5A6C6C4A5A017F4A5A6D6C495AD90FC0EB1F80D9 -07F0017FC7FC903901FE03FC9039003FFFE0020790C8FC35357BB33F>111 -D<B7FC16F016FC3A03FE0003FF6C489038007F80EE3FC0EE1FE0EE0FF0A2EE07F8A217FC -A617F8A2EE0FF0A2EE1FE0EE3FC0EEFF00ED03FE90B612F816C001FCC9FCB3A2487EB512 -F8A32E337BB238>I<90390FF0018090387FFE0348B512873907F00FEF390FC001FF48C7 -FC003E143F151F5A150F5A1507A36C1403A27E6C91C7FC6C7E7FEA3FF8EBFF806C13FC6C -EBFFC06C14F06C80C614FE011F7F01031480D9001F13C014019138003FE0151F150FED07 -F0150312E01501A37EA216E06C1403A26CEC07C06CEC0F806C6CEB1F0001E0133ED8FBFE -13FC00F0B55AD8E01F13E0D8C00390C7FC24357BB32E>115 D<B500F890383FFFE0A3D8 -03FEC7000713006C48EC01FC705A1770B3AE000016F06D5DA2017E1401017F4A5A7F6D6C -495A6E49C7FC6D6C131ED903F0137C903901FE03F89039007FFFE0021F1380DA03FCC8FC -33347BB23D>117 D<267FFFF890383FFFF0A3000101E0010F13006C49EB07F8017F5D01 -3F15C06D6C5C6D6C49C7FC160E6D6C131E6D6C5B6D6C133816786D6C5B91387F81E0023F -5B15C391381FE7806EB4C8FC5D14076E5A6E7EA26E7E4A7FA24A7F9138079FE091380F0F -F0140E91381E07F84A6C7E4A6C7E14709138F000FF49486D7E4948133F4A8001076E7E49 -C76C7E131E013E6E7E017E6E7E01FE81000182D80FFF4A1380B500C0011F13FEA337337D -B23D>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmtt12 13.14 8 -/Fi 8 116 df<003FB712804816C0B812E0A46C16C06C16802B087AA438>45 -D<91397FC003FC903A01FFF01FFF0107D9FC7F1380011F90B612C05B5B90B8FC48903AC0 -7FFE1F80913A001FF00F0048486D6CC7FC49130748486D7E491301000F81491300A76D13 -0100075D6D13036C6C495A6D130F6C6C495AECC07F91B55A5E485D93C8FCD807F713FC01 -E113F09038E07FC091CAFCA27F12037F6D7E6CB612C06C15FC4815FF4816C048824882D8 -1FF8C76C7ED83FE0EC07FC0180EC01FE48C9FC177F007E8200FE178048161FA66C163F00 -7FEE7F006D5D6C6C4A5A01F01407D81FFEEC3FFC3B0FFFE003FFF86C90B65A6C5EC61680 -013F4AC7FC010F14F8010314E09026003FFEC8FC324A7DAF38>103 -D<EA3FFE487EB5FCA37E7EC67EACED7FC0913801FFF8020713FE021F7F4A805C91B67EED -C07F9139FE001FE002F8130F4A805C16075C5CA391C7FCB3A6273FFFFE03B512E0486D48 -14F0B6008F14F8A36C020714F06C496C14E035437FC238>I<14F0497E497E497EA46D5A -6D5A6D5A91C8FCAB383FFFFC487FB5FCA37E7EC7FCB3AF007FB612F0B712F816FCA316F8 -6C15F0264476C338>I<387FFFFEB6FCA57EC77EB3B3B1007FB7FCB81280A56C16002943 -79C238>108 D<ED7FC03A3FFE01FFF8267FFF0713FEB5001F7F4A805C6C90B67E6CECC0 -7F3B007FFE001FE002F8130F4A805C16075C5CA391C7FCB3A6273FFFFE03B512E0486D48 -14F0B6008F14F8A36C020714F06C496C14E035307FAF38>110 D<EC7FC0903803FFF801 -0F13FE497F017F14C090B67E4881489038C07FF8489038001FFC01FC130748486D7E4913 -0148486D7E4980003F168049143F007F16C090C8121FA300FEED0FE0A96C151FA26C16C0 -A26D143FA26C6CEC7F80A26C6CECFF006D5B6C6C495A6D13076CB4EB1FFC6C9038C07FF8 -6C90B55A6C5D6D5C6D5C010F49C7FC010313F89038007FC02B327AB038>I<903907FF80 -F0017FEBF1F848B512FD000714FF5A5A5AEBFC00D87FE0131F0180130F48C71207481403 -A5007FEC01F001C090C7FCEA3FF013FE381FFFF86CEBFFC0000314F8C614FF013F148001 -0714E0D9003F13F0020013F8ED0FFC1503003CEC01FE007E140000FE15FF167F7EA37F6D -14FF16FE01F013036DEB07FC01FF137F91B512F816F016E04815C0D8FC3F1400010F13FC -D8780113E0283278B038>115 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmsltt10 10.95 50 -/Fj 50 122 df<137C13FE487E1480A214C0A3EA007F130F131F1480A3133F14005B137E -13FE485A1203485AEA1FF0485AB45A5B90C7FC127C1238121D6BB730>39 -D<140F4A7EA2143FA492C7FCD8078014783A0FC07F01FCD81FF0130701F8130F9038FE7E -3F01FFEBFFF86C90B512F0000315C0C615006D13FC011F13E001071380011F13E0017F13 -F848B512FE000780001F15C0267FFDFB13E0EBF1F8D8FFC1137F0183133FD87E03EB0FC0 -0078EC0780000049C7FCA21307A45C6D5A262777AE30>42 D<007FB612E0B712F016F8A3 -16F06C15E02507769E30>45 D<EC07F8EC1FFEEC7FFF49B512C04914E04914F090380FF8 -1F90391FE00FF890383FC00790397F8003FC9038FF00014914FE48481300485A16FF4848 -147FA2485AA2485AA25B123FA348C8FCA500FE15FEA4ED01FCA3ED03F8A215076C15F015 -0F6C15E0151F6D14C0ED3F80003F147F6DEBFF004A5A381FE0036D485A390FFC1FF86CB5 -5A6C5C6C14806C91C7FCEB7FFCEB0FE0283A78B830>48 D<EC03C0EC07E0A2140F141FA2 -143FEC7FC014FF1303130F90B5FC5A48148014BFEBFE3FEA01F8C7FC147F1500A55C5CA5 -13015CA513035CA513075CA5130F5CA2007FB512F8B612FCA46C14F81E3976B830>I<EC -07FC91383FFF8091B512E0010314F84980011F8090393FF80FFF90267FE0011380EC8000 -49C7EA3FC05B0001151F4915E01203160FA349141F1201D800E015C090C8FC163F178016 -7F17005E4B5A15034B5A5EED1FF04B5A4B5A4B5A4A90C7FC4A5AEC0FFC4A5AEC3FE0ECFF -C0495B4990C8FCEB07FCEB1FF8495AEB7FC0495A000390C712F0D807FC497E48481303EA -3FF048B6FCB7FCA35E6C5D2B397AB830>I<EC07FE91387FFFC049B512F0010780498049 -8090393FFC03FFECE000D97F80EB7F80163FA391C7FCA2131C90C8FC167F17005E4B5A4B -5A1507ED1FF8EDFFF091B55A495C93C7FC82826D809138003FF0ED07F86F7E15016F7EA2 -8282A3121C007E5D007F5D5A15015E4814034B5A6C140F6C6CEB3FF001E0495A3A3FFC03 -FFC06CB65A6C92C7FC6C14FC000114F06C6C13C0D90FFEC8FC293A7AB830>I<1378EA01 -FE487E5A1480A25A14007E5B6C5AEA00F090C7FCAFEA0F80EA3FC0487E7F12FFA45B127F -6C5A6CC7FC11276DA630>58 D<ED1F80ED7FC08215FFA25CA3EC03F7A2140715E7A2140F -15C7A2141F1587143FA2ED07F0147FA214FEA3EB01FCA3EB03F8A2EB07F0A3EB0FE0A249 -B5FCA2825BA25BEC0003A213FEA3485AA212035BD83FFFEB3FFF486D481380B56CB512C0 -A26C496C13806C496C13002A397DB830>65 D<913903FC01E091391FFF81F0027F13E391 -B512F7010314FF5B49130790261FF80113E049487ED97FC0137F495A91C7123F485A4848 -15C0A2485A5B120F5B001FED1F80491500003F92C7FC5BA3127F90CAFCA45A5AA716F86C -4A7EA26C14035EA26D1307003F5D6D130F001F4A5A6D133F6C6C495A6D495A2607FF0790 -C7FC6CEBFFFE6C5C6C5C6D13E0011F1380D907FCC8FC2C3A78B830>67 -D<013FB512E04914FC90B67EEEFF806D15C07F902607F00013E0EE3FF0161FEE0FF81607 -010F15FC4A1303A2160117FEA2011F14005CA5133F5CA5017FEC01FC91C7FCA3EE03F8A2 -5B49EC07F0A2160F17E0161F000116C049143FEE7F80EEFF005D4B5A00034A5A49EB1FF8 -ED7FF0007FB65AB75A5E4BC7FC15F86C14C02F387EB730>I<013FB7FC49168090B812C0 -A27F7FD903F8C7EA3F80A4177F13074A150083171E94C7FCA2130F5CED01E04B7E821507 -131F91B55AA55B9138800FE0A46F5A017F90C9FC91CAFCA417F0494A7E491403A4160712 -01495DA2003FB7FC5AB8FCA26C5E6C5E32387EB730>I<013FB7FC49168090B812C0A27F -7FD903F8C7EA3F80A4177F13074A150083171E94C7FCA2130F5CA2ED01E04B7E4B7E131F -02C05B91B5FCA45B5EEC800FA35E017F6D5A91CAFCA55B5BA512015BA2387FFFF0B57E80 -A25C6C5B32387DB730>I<903B7FFF801FFFE090B56C4813F003E014F8A203C014F06D49 -6C13E0903B07F00001FC00A41603130F4A5CA41607131F4A5CA4160F133F91B65AA55B91 -C7EA1FC0A4163F5B495DA4167F12014992C7FCA45E1203495CA23B7FFF801FFFE0B56C48 -7FA46C496C5B35387EB730>72 D<013FB612804915C0A46D158090260007F0C7FCA5140F -5DA5141F5DA5143F5DA5147F92C8FCA55C5CA513015CA513035CA2003FB6FC4881B77EA2 -6C5D6C92C7FC2A3879B730>I<0203B512F04A14F8A46E14F091390001FC00A41503A25E -A41507A25EA4150FA25EA4151FA25EA4153FA25EA4157FA293C7FC123E127F5D6D5B38FF -00014A5A6C13079038E03FF86CB55A5D6C5C000791C8FC6C13FC38007FE02D3979B730> -I<90387FFFF890B57EA46D5BD903F8C8FCA513075CA5130F5CA5131F5CA5133F5CA5137F -91C9FCA4EE03C049EC07E049140FA4161F12014915C0A2007FB7FCB8FCA317806C16002B -387DB730>76 D<D93FF8ECFFE0496C4913F0496C4913F8A2017F4A13F0013F16E0010F91 -380FFE0002DE147E02DF131FA2EE3EFE131F029FEB7EFC167C16FC16F8ED80F9013F1381 -021FEBF1F8158316E1EC0F8716C3137F017E018F5B1683159F160316079038FE07BE01FC -01FE5B15FCA215F8160F0001EB03F09026F801E05B91C7FCA3161F1203495DA4163F1207 -4992C7FCA2D87FFC903803FFE0486C497FA46C486D5B35387EB730>I<D97FFC90383FFF -80496C4913C06E15E0A218C06D6E13800107913803F000ECEF80A31607130F02CF5C15C0 -14C7A2160F131F02875C15E0A30283131F133F02035C15F0A3163FEB7F01017E92C7FC15 -F8A35EEBFE0049147EA315FC16FE0001147C495CA4157D0003143D495C153FEA7FFFB512 -80A2151F5E6C496C5A33387DB730>I<013FB512FC4914FF90B712C017E06D15F06D15F8 -903A03F8003FFC160FEE03FE1601A20107EC00FF5CA2177FA3010F15FE5CA2160117FC16 -03011FEC07F84A130FEE1FF0EE7FE0923801FFC091B612804915005E16F816E093C7FC02 -80C8FC137F91C9FCA55B5BA512015BA2383FFFC0487FB57EA26C5B6C5B30387EB730>80 -D<017FB57E90B612F016FC82826D1580902607F00113C09238007FE0163F161FEE0FF013 -0F4A1307A5011FEC0FE05CEE1FC0163FEE7F8016FF013F010313009138800FFE91B55A5E -16E05E4980829138001FF815076F7E15015B5BA500011403495CA2177817FCEEF9FE0003 -16FC4914F1A2267FFF8013FBB500C0EBFFF817F0816F13E06C49EB7FC0C9EA3F002F397E -B730>82 D<001FB712E04816F017F8A35A903A001FC007F0A4160F48133F48028013E000 -7E1507003CED03C0C791C7FCA2147F92C8FCA55C5CA513015CA513035CA513075CA5130F -5CA20007B57E48804880A26C5C6C5C2D3877B730>84 D<903A1FFF80FFFC4901C113FE49 -01E313FFA26D01C113FE6D018013FC903A01FE003F80EE7F005E6D6C5B15014B5A91387F -83F8158791383F8FF0EDCFE015DF021F5BEDFF80A26E90C7FC5DA26E5AA25DA3140F4A7E -A2143F4A7EA214FE01017F4A7EEB03F882903807F03F130F02E07F90381FC01F133F0280 -7F90387F000F5B498000011407485AD83FFFEB3FFF486D481380B590B512C0A26C6E1380 -6C496C130030387DB730>88 D<1278127C12FEA27EA27EA27FA2123F7FA2121F7FA2120F -A27FA212077FA212037FA21201A27FA212007FA27F80A2133FA280A2131F80A2130F80A2 -130780A21303A280A2130180A2130080A280A21580A2143F15C0A2141FA3140FEC07801A -4771BE30>92 D<003FB612F05AB712F8A36C15F07E25077C7D30>95 -D<903803FF80011F13F0017F13FC90B57E4880488149C67F49133F48486D7E0003140F5B -C65A90C77FA25EA2EC3FFF0107B5FC133F90B6FC1203485D48EBE01F381FFE00EA3FF0D8 -7FC0133F5B48C75B5AA2157FA215FF6C4990C7FCEB8007267FE07F13FE90B7FC6C16806C -14BF6C020F130000039038F803FEC601C0C8FC292A79A830>97 D<EA3FF8487E487EA212 -7F123FEA01FCA512035BA4EC1FF00007EBFFFC01F313FF01F7148090B612C016E09138F0 -3FF048EB800F9039FE0007F85B49EB03FC4913015B121F5B16FE1500A21501003F15FC5B -A3150316F8127F1507ED0FF0A2ED1FE06DEB3FC000FF147F6DEBFF80D9F00313009038FC -1FFE90B55A5D485C486C13C0D8781F90C7FC380007F8273977B730>I<EC1FFC91B51280 -010314C0010F14E04914F0137F9039FFF00FF848EB8007489038000FF0D807FC13074914 -E04848EB01C0484890C7FCA2485A5B127F90C9FCA35A5AA77E6CEC0F806D131FED3FC06C -6C14806D137FD81FF8EBFF00380FFE0390B55A6C5C00015C6C14E0013F1380D907FCC7FC -252A77A830>I<ED07FF4B13804B13C0A281819238003F80A4167FA21700A491387FC0FF -903803FFF0010FEBFCFE4913FE017F13FF90B6FC48EBE07F48EB001F48486D5A49130748 -481303485A5B485A495C127FA290C7FC15075A485DA4150FA25E151F6C143F7E157F6D13 -FF6C6C485BEBE007261FF81F13FF6CB71280A26C14BF0001141F6CD9FC0F1300D91FE0C8 -FC2A397AB730>I<EC1FE0ECFFFC010313FF010F1480013F14C04914E09039FFF03FF048 -EB800F3A03FE0007F8484813035B485A4848EB01FC5B123F5B127F90C7FC90B6FCA2B712 -F8A316F048C9FCA37E7EED03C06DEB07E0003FEC0FF07F6C6CEB1FE06DEB7FC0390FFE03 -FF6CB612806C15006C14FC6C6C5B011F13E0010390C7FC262A79A830>I<EEFF80030713 -E0031F13F0157F92B512F85C4AEB07F0EC07FC03F813E091390FF001C04BC7FCA2141F5D -A548B612FE48815AA36C5DC7D87F80C7FC92C8FCA55C5CA513015CA513035CA513075CA2 -007FB512FEB7FCA46C5C2D397CB830>I<913907F801FE913A3FFF0FFF804A13BF49B712 -C05B5B90260FFC0FEB1F8090271FF007F8130049486C6CC7FCECC001EB7F801400A25B5B -A315034B5A7F6D495A9138803FE090383FE0FF49B55A90B65A93C8FC4814FC01F913F090 -38F87F80000390CAFC5BA27F120190B512FCEDFF8016E04815F8488148813A1FF00007FF -D83FC01300498048C86C7E007E151F12FE5AA2163F94C7FC5E5E6C4A5AD87F80EB07FC6D -131F3A3FFC01FFF86CB612E06C5D6C92C8FC000114FC6C6C13F0010F90C9FC323E7EA730 ->I<EB3FF8497E497EA2137F133FEB01FCA513035CA4ED0FF00107EB7FFE02F1B5FC02F7 -148091B6FC17C0EDF03F499038801FE015004A130F14F8A24A131F494814C0A25CA3163F -133F4A1480A4167F137F91C71300A45E5B495CA23B7FFFF81FFFF8B56C4813FC5DA2816C -496C13F82E387FB730>I<15E0EC03F8140781A35D6E5A6E5A91C8FCA990B512C048805A -A27E7EEB001F5DA5143F5DA5147F92C7FCA55C5CA513015CA2007FB61280B712C016E0A2 -16C06C1580233979B830>I<163816FE150116FFA316FEED00FC16781600A991B512F049 -14F8A47FEC000716F0A4150FA216E0A4151FA216C0A4153FA21680A4157FA21600A45DA2 -5DA414015DA414035D1407003C5C007E130FB4495A4A5A14FF90B55A92C7FC6C5B6C13F8 -6C13E000071380284E7EB830>I<EB3FF8497E80A3133FEB00FCA513015CA5010390380F -FFFE4A487F1880A218006F5B0107010013804A4890C7FCED03FC4B5AED1FF04B5A010FEB -7F804A48C8FCECC3FEECC7FCECCFF8ECDFFCEB1FFF814A7E4A7E02F87FECE03F49486C7E -02807FEC000F6F7E8215034980017E13016F7E3B3FFFF80FFFF0486D487FB56C5AA26C49 -7E6C496C5B31387FB730>I<90383FFFF8497F81A37F90380001FCA514035DA514075DA5 -140F5DA5141F5DA5143F5DA5147F92C7FCA55C5CA2003FB612F04815F8B712FCA26C15F8 -6C15F026387BB730>I<913903F001F83B01FF0FFC07FE489039BFFE1FFF91B5007F1380 -93B5FC18C06C9039FC3FFE1F3B003FF81FFC0F02E013F002C013E0A2028013C09139003F -801F491680A2017E1400A401FE49133F49017E1400A5000102FE5B4949137EA500030101 -14FE01F0495BA23C3FFE07FF03FF80486C48018713C0B5009F01CF13E0A26C010F018713 -C06C486C01031380332881A730>I<ED0FF03A01FFE07FFE4801F1B5FC4801F7148091B6 -FC6C16C06CECF03FD8000F9038801FE015004A130F14F8A24A131F494814C0A25CA3163F -133F4A1480A4167F137F91C71300A45E5B495CA23B7FFFF81FFFF8B56C4813FC5DA2816C -496C13F82E287FA730>I<EC1FE0ECFFFC010313FF010F14804914E0137F9039FFE07FF0 -489038800FF83903FE000749EB03FC48481301484814FE491300485A123F5B167F48C8FC -A300FE15FEA4150116FCA26CEC03F8150716F06C6C130FED1FE06DEB3FC06C6C137F3A1F -F001FF80D9FC0713006CB55A6C14F86C5C6C14C06C6C90C7FCEB0FF8282A79A830>I<ED -03FE903A3FFC1FFF8090267FFE7F13E001FF90B57E91B67E6D816D9038FE07FE0101EBF0 -019238C000FF5D92C7EA7F804A143F5C13035C18C0171FA2173F010716805CA3177F1800 -130F5F4C5AA24C5A6E495A011F140F6E495A6EEB7FE09139FF83FFC092B55A94C7FCD93F -DF5B028F13F8028313E0028090C8FC92C9FC137FA291CAFCA45BA25BA4387FFFF0B57E80 -A25C6C5B323C82A730>I<91383FE00F903A01FFF81F800107EBFE3F011F13FF4914FF5B -9038FFF03F48EB800F48496C1300D807FC7F48487F5B485A48487F5E5B127F90C8FC1501 -5A485DA41503A25E6C1407150F6C141F7F6C6C133FEDFFF0381FF001EBFC0F6CB6FC7E6C -14EF6CEC8FE039007FFE0FEB0FF090C7FC151F5EA5153F5EA591381FFFFE4A7F5CA2806E -5B293C7AA730>I<EE3FE03B01FFFC01FFF848D9FE0F13FC485C037F13FE6C91B5FC6C90 -B512E1D80001EC01FC15FC9238F000704B13005D5D4990C8FC5CA25CA25C13075CA5130F -5CA5131F5CA2007FB512FCB67EA46C5C2F287DA730>I<91387FF838903903FFFE7C011F -EBFFFC5B5B90B6FC48EBC01F3903FC0007491303484814F85BA3ED01F06D90C7FCEA03FE -EBFFF06CEBFF806C14F06D13FC011F13FF01071480D9007F13C0020113E0EC001F001FEC -0FF06D1307003F1403A27FA21507486CEB0FE0151F6DEB3FC09039FC03FF8090B6FC1600 -B612FC00FC5C013F13E0267807FEC7FC262A79A830>I<EB03C0497E80A3130F5CA5003F -B612E04815F0B7FCA36C15E026003FC0C7FC5CA5137F91C8FCA55B5BA50001EC0F8049EB -1FC0A3153F1680157F15FF6D4813009038FF07FE6CEBFFFC5D6D5B6D5B010F1380D903FC -C7FC243378B130>I<D83FFCEB3FFC486C497E00FF14FFA2007F147F003F143F00011401 -495CA415031203495CA415071207495CA4150F120F495CA3151F153F001F147F4B5A000F -5BD9F80F13FF90B712807EA26C149FC6D9FE0F1300D93FF0C8FC29287AA630>I<3B3FFF -C07FFF80486DB512C0B515E0A26C16C06C496C13803B03F00007F0006D5C150F00015D15 -1F5E153F6D91C7FC5D0000147E15FE5D140101FE5BA290387E03F0A24A5AA24A5A137F4A -5A133F4AC8FCA2147E14FE5C131F5CA25C6D5A2B2778A630>I<3B3FFFC01FFFE0486D48 -13F0B515F8A26C16F06C496C13E0D807E0C7EA7E00A35EA34B5AA34B5A143E147F4A485A -13E1A249495A158FEBC7EF9138CF9F8014DF13CF029F90C7FC15BFEBDF8FEC0FBEA201FE -13FE5D13FCA25D496C5A3903E003E02D2779A630>I<903AFFFE07FFF0486D4813F84816 -FCA26C16F86C496C13F0903A07F001FC006D6C485A6D6C485A4B5A6D6C485A4B5ADA7F7F -C7FC157EEC3FFE6E5A5D6E5A5DA24A7E143F4A7EA2ECFCFCEB01F8903803F07E903807E0 -7F49487E011F8090383F801FD97F007F01FE6D7E263FFFC0B5FC4801E11480B515C0A26C -16806C01C014002E277DA630>I<90B53801FFFE4802837F481780A26C17006C02015B90 -3A07E0001FC05F163F6E91C7FCA20103147EA25E804B5A13014B5AA26E485AA20100495A -A24B5AA2027E90C8FC5D153E157E157C143E5D143F5DA26E5AA25DA25DA2143F92C9FC5C -147E14FE5C1301003C5B387E03F0EAFF07495A48485AEB7F80B5FC91CAFC13FC6C5AEA3F -E0EA1F80313C7EA630>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmbx12 13.14 64 -/Fk 64 122 df<922607FFE0EB1FF892B5D8FC01B5FC0207DAFF071480021F039F14C091 -3D7FFE007FFFF83FE0DAFFF0011F9038E07FF00103018049018013F84990C748EB00FF49 -484A5A495A4A5D495AF27FF0017F5E4A027FEC3FE0053FEC0F80051F91C7FCADBB12E0A5 -26007FF0C7D81FFCC8FCB3B3A2007FB5D8F01FB512FEA54D4D7ECC48>11 -D<923803FFE092B512FC020714FF021F81027F9038007FC0DAFFF0EB0FE0010301C08049 -90C7EA3FF84948147F4A81494814FF495AA2137F5CA2715A715A715AEF078094C8FCA8EF -07FCB9FCA526007FF0C7123F171FB3B3003FB5D8E00FB512F8A53D4D7ECC44>I<EA07E0 -EA1FF8487E487E7FB5FC1480A314C0A27EA27EEA1FFBEA07E3EA0003A213071480A2130F -A214005B131E133E5BA25B485A485A1207485A485A001EC7FC120C122577CB22>39 -D<EA07E0EA1FF0487E487E7FB5FCA31480A37EA27E7EEA07E7EA0007A2130F1400A35B13 -1E133E133C137C137813F8485AA2485A485A485A48C7FC121E120C1125778F22>44 -D<B7FCAA200A7F9C29>I<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1F -F8EA07E01010778F22>I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3 -B3B2007FB712E0A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC48814801 -01EBFF802707F8003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC -6D7F00FF16FE6D147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F0 -5D17E04B13C017804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B13 -1FEC3F804AC7FC14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816 -FC5A5A5A5A5A5AB8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90 -267FE01F7F9026FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3 -805C16FF7E91C75B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A -49B512E0168016E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0 -EA07E0EA1FF8487E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5B -D80FFC495B2707FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32 -487BC63D>I<EE07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F9 -15F1EC03E11407EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80 -131FEB3F00133E5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003 -EBE000AD023FB612FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF -91B612C017801700A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01 -E1B512C001E714F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0 -497F17F8C913FC167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815 -FC5B018015F86CC74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB51200 -6C90B512FC6C5D013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE02 -1F6D7E027F80903A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948 -130F01FF4A7E4849133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA215 -20913807FFE0021F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A -6D7E8391C7FC8382491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C -5DA26C6D495A6C6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C0100 -14F0020F90C8FC32487BC63D>I<121F7F7F13FE90B812E0A45A18C0188018005F5FA25F -485E90C8EA07E0007E4B5A5F007C151F4CC7FC167E5E485D15014B5A4B5AC8485A4B5AA2 -4BC8FC157EA25D1401A24A5A1407A24A5AA2141FA24A5AA2147FA314FFA3495BA45BA55B -AA6D5BA26D90C9FCEB007C334B79C93D>I<EC1FFF49B512F0010714FC011F14FF90263F -F00713C049C77F01FCEC3FF04848EC0FF848481407000782491403000F821601A2121F7F -A27F13FE6D140302C05C14F002FC495A6C6D130FDAFF805B9238E01FE06C6E485A9238FC -FF806C91B5C7FC6C15FC6C5D7F6D14FE6D806D15C06D81011F81017F81D9FFDF80481307 -2603FE018048486C804848133F4848010F1480003F8049130148486D6C13C0161F824848 -140382A282A2177FA218807F127FEFFF007F6C6C4A5AA2D81FFC4A5A6C6CEC0FF86C6C6C -EB3FF06C9039F003FFE06C90B612806C6C92C7FC011F14FC010714E09026003FFEC8FC32 -487BC63D>I<EC1FFE49B512C0010F14F04914FC90397FFC0FFE903AFFE003FF804849C6 -7F48496D7E4890C7FC486F7E484881161F003F825B007F82A28300FF81A31880A518C0A4 -5E127FA3003F5D7F121F5E120F6C6C91B5FC6C90388001EF6CEBC0036C9038E00FCF6DB5 -128F011F140F010701FE1480010113F8903800010091C7FCA24C1300A3D803F85D487E48 -7E486C4A5AA25F4C5AA24C5A49495B6C485D49010790C7FC01E0495AD807F8EB3FFC6CB4 -48B45A6C90B55A6C15C06D91C8FC011F13FC010313C032487BC63D>I<EA07E0EA1FF8EA -3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E0C7FCB0EA07E0EA1FF8EA3FFCEA7F -FEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E0103077AF22>I<903803FFF8013FEBFF8090 -B612E0000315F8489038007FFCD80FF0EB1FFED81FC0EB07FF48C71480D87FC015C06D7F -486C15E07FA66C5A6C484913C06C5A0007C7481380C8FC4B13004B5AED7FF84B5A16C04A -5B4A90C7FC15FC4A5A5D140F5D4A5AA25D4AC8FCA3143EAB143C91C9FCA9147E49B47E49 -7F497FA2497FA66D5BA26D5B6D5BD9007EC8FC2B4D79CC3A>63 D<EE01F8A24C7EA34C7E -A24C7EA34C7FA24C7FA34C7FA293B57EA34B8016F303038016E316E103078016C0030F80 -5E83031F814C7E4B81153E83037E81037C7F03FC815D830201824B7F0203825D83020782 -4B7F020F825D84021F8392B8FC4A83A34A83027CC8120F02FC835C840101844A81010384 -5C840107844A81010F845C85011F85496C82B600C091B712F0A5544D7CCC5D>65 -D<B912F0F0FF8019F019FC19FFD8001F0180C780061F7F727F727F727F727FA2727FA219 -7F86A84F5AA2626062604E5B4E5B4E1380067F90C7FC943803FFFC92B712F0198019F019 -FC0380C7383FFF80060F7F060313F0727F727F737E86851B80851BC0A21BE0A48561A41B -C0A2611B80611B0096B5FC4E5B4E5B060F5B067F5BBB12C097C7FC19FC19F04EC8FC4B4B -7CCA57>I<93261FFF80EB01C00307B500F81303033F02FE13074AB7EA800F0207EEE01F -021F903AFE007FF83F027F01E0903807FC7F91B5C73801FEFF010301FCEC007F4901F081 -4901C0150F4949814990C97E494882495A48498248197F5C48193F5C48191F5C48190FA2 -485BA21A075AA391CDFCA2B5FCAD7EA280F207C0A27EA36C7F1A0F6C1A80806C191F6E18 -006C61806C197E6C6D177C6D6C17FC6D6C4C5A6D6D4B5A6D6D4B5A6D01F0ED1FC06D01FC -4B5A010001FF03FFC7FC6E01E0EB07FE021F01FEEB3FFC020790B612F0020116C0DA003F -92C8FC030714F8DB001F13804A4D79CB59>I<B912F0F0FF8019F019FC19FFD8001F9026 -80000114C0DD001F7F060713F806017F726C7E737E737F737F737F8587737F8587A2747E -A38786A21C80A51CC0A586A462A51C80A51C00A26263A2631AFF636163614F5B634F5B07 -3F90C7FC4F5A4F5A06035B061F5B4DB512C0BBC8FC19FC19F0198006F0C9FC524B7CCA5E ->I<BB12C0A486D8000F01E0C77E18071801F0007F193F191F190F1907861903A31901A3 -EF0F80A2737EA497C7FC171FA2173F177F17FF160392B6FCA5EDE0031600177F173F171F -A2050FEC0F80A3F21F00A494C8FC621A3EA21A7EA31AFE6219011903A21907190FF13FF8 -19FF1803183FBBFCA262A3494A7CC951>I<BBFCA41A80D8001F01C0C7FC181F18038484 -197F193F191F1AC0190FA31907A4171FF103E0A496C7FCA25FA25F5F5E160792B6FCA5ED -C0071601828383A283A794C9FCB1B8FCA5434A7CC94D>I<93261FFF80EB01C00307B500 -F81303033F02FE13074AB7EA800F0207EEE01F021F903AFE007FF83F027F01E0903807FC -7F91B5C73801FEFF010301FCEC007F4901F0814901C0150F4949814990C97E494882495A -48498248197F5C48193F5C48191F5C48190FA2485BA21A075AA391CEFCA2B5FCAD7E050F -B712C080A37E94C7001FEBC000807EA27E807E807E806C7F7E6D7E6D7E6D7F6D01E05D6D -6D5D6D13FC010001FF4AB5FC6E01E0EB07F9021F01FFEB3FF0020791B5EAE07F0201EEC0 -1FDA003FED0007030702F81301DB001F018090C8FC524D79CB60>I<B7D8FC01B712FCA5 -D8001F01C0C8001FEBC000B3AA92B9FCA503C0C8121FB3AEB7D8FC01B712FCA5564B7BCA -60>I<B712FEA5D8000FEBE000B3B3B3ABB712FEA5274B7DCA2E>I<B700F8027FB512F0A5 -D8001F01C0C9EBC00074C7FCF101FE4F5A4F5AF10FE04F5A4F5A4FC8FCF001FE4E5A4E5A -F00FE04E5A4E5A4EC9FCEF01FE4D5A4D5AEF0FE04D5A4D5A4DCAFCEE01FE16034C7E4C7F -5E4C7F93B57E03C18015C303C780DBCFE77FDBDFC37FEDFF8104017F4B6C804B7F4B6D7F -03E0814B6D7F8385717F717F83857180727F8486727F8486727F727F84867280737F8587 -737F87B700F8010FB612FCA5564B7CCA60>75 D<B8FCA5D8001F01C0C9FCB3B3A4193EA4 -197E197CA519FCA31801A2F003F8A21807180F181F183F187FEF01FF1707173FBA12F0A5 -3F4B7BCA4A>I<B600E04DB612806F5FA26F5FA2D8001F09FCC7FC6FEF0F7FA2DABFFE17 -1EA2DA9FFF173CA3028F6D1678A202876D16F0A202836DED01E0A302816DED03C0A20280 -6DED0780A26F6CED0F00A36F6C151EA26F6C5DA26F6D5CA26F6D5CA36F6D495AA26F6D49 -5AA26F6D495AA3706C49C7FCA2706C131EA2706C5BA3706D5AA2706D5AA270EBE1E0A370 -EBF3C0A270EBFF80A27190C8FCA2715AA3715AA2715A497EB600F06D480103B71280A371 -5A715A694B7BCA74>I<B600E092B612FC8181A281D8001F6D9239001FE0006F705A82A2 -8202BF7F029F7FA2028F7F02877F02837F8214810280806F7F6F7F83816F7F6F7F6F7F83 -816F80707F707F8482707F707F707FA2707F7014807113C019E0837113F07113F87113FC -19FE837113FF71148F7213CF1AEF847213FF8484A284848485A2858585A285858585497E -B600F8167F1A3F1A1F1A0FA2564B7BCA60>I<EEFFF8031FEBFFC04AB612FC020715FF02 -1FD9C01F13C091277FFE000313F0902601FFF09038007FFC49496E7E490180EC0FFF4990 -C86C7F49486F7F49486F7F017F8449486F7F4849707EA24849707E4885A24849701380A2 -481AC04A82A2481AE0A34890CA6C13F0A5B519F8AE6C1AF0A26E5EA36C1AE0A26E5E6C1A -C0A26C1A806E5E6C1A006E5E6C616E16FF6C616C6D4B5B6D6C4B5B6E5D6D6D4A5B6D6D4A -5B01076D4A90C7FC6D01F8ECFFFE6D01FE01035B9028007FFFC01F13F0021F90B612C002 -0793C8FC020115FCDA001F14C0030101FCC9FC4D4D79CB5C>I<B912C018FCF0FF8019F0 -85D8001F902680000713FE05007F063F1380060F13C07213E01AF0841AF8A27213FCA31A -FEA81AFCA34E13F8A21AF0601AE04E13C0063F138095B51200050713FC92B75A19E096C7 -FC18F803C0CAFCB3ABB712FCA5474B7BCA54>I<EEFFF8031FEBFFC04AB612FC020715FF -021FD9C01F13C091277FFE000313F0902601FFF09038007FFC49496E7E490180EC0FFF49 -90C86C7F49486F7F49486F7F49486F7F01FF844849707E4A163F48854849707EA2481A80 -4A82481AC0A291CA7E481AE0A3481AF0A24983A300FF1AF8AE007F1AF0A36D5FA26C1AE0 -A36C6D4C13C0A26C1A80A26C6D4C1300EE1FC06C6DD97FF0495A923801FFFC6C6D486D49 -5A6C912607F07F5CD97FF8903AC00F80FFF0913AFC0F8007C1D93FFE010001C35BD91FFF -DA03E75B0107018F6DB5C7FC6D01EF5D6DD9FF805C6D6C01C014F0021FD9F01F13C00207 -90B6C8FC02014B1408DA001F6E141C03019038FC7F8092C87F726C133C73137C9638FC03 -FC96B5FC1BF884A37214F0A37214E0A27214C0721480721400735A735AF10FF04E6179CB -5C>I<B9FC18F8F0FF8019E019F8D8000F9026C0000713FE9439007FFF80061F7F727F72 -7F727F84868684A286A862A24E5BA2624E5B4E5B4E5B4E5B95B5C8FC050713FC92B712F0 -198006FCC9FC18FF9226C0003F13C0050713F0717F717F717F187F85727FA28486A786A7 -1C3E86A28474137E72157C726D13FCB700FC6D9038FE01F872EBFF8373EBFFF0071F14E0 -07031480CD383FFE00574C7CCA5C>I<DA7FFCEB01C00103B5EAC003011FECF00749ECFC -0F90B7121F48D9E00F13BF4890C713FFD807FC141F4848804848140382484880177F485A -173F171F12FFA2170F7FA217077F7F7F6D92C7FC6D7E6C13F014FF15F86CECFF8016F86C -15FF6C16C0836C826C826C826C82013F816D1680010716C01300020F15E01400030714F0 -ED007F160F16037013F882177F127800F8163FA3171FA27E18F0A27EA26CEE3FE07F18C0 -01E0157F6DEDFF8001FC160001FF140302E0EB0FFED97FFEEB3FFC486CB612F0D8FC0F5D -D8F803158048C66C49C7FC48010313F0354D79CB44>I<003FBB12C0A5DA80019038FC00 -1FD9FC001601D87FF09438007FE001C0183F49181F90C7170FA2007E1907A3007C1903A5 -00FC1AF0481901A5C894C7FCB3B3A749B812FCA54C4A7CC955>I<B700F8023FB512F8A5 -D8001F01C0C9380FE000745AB3B3AD6D180F63811A1F6D96C7FC626D7F1A7E6D7F6D606E -6C4B5A6E6CED07F06E6C4B5A6E01C0EC3FC06E01F049B45A020101FF011F90C8FC6E91B5 -5A033F15F8030715E0030092C9FC040713F0554C7CCA5E>I<B7D8E007B791B612C0A5D8 -003F0180C7000101FCC9387F80006F7070C7FC6D70183EA26F70167E6D71177C876F1BFC -6D715F6F831E016D656F4B6D14036D65876F92B515076D656F4A8007F3160F6E64700103 -6E141F6E04E194C8FCA27001076E5C6E04C0163E8770010F177E6E4C6C157C70011F814F -6C15FC6E637049EDC0016E033E6D5D1CE070017E16036E037C6D5D7001FC15F04E6D1407 -6E63DCFF01EEF80F6F4A6D5DA20583EEFC1F6F4A6D92C9FC1CFE05C75F6F4A6D143E05EF -16FF4E6E137E6F197C05FF17FC6F91C86C5BA36F496F5BA24D816F61A26F496F5BA37048 -6F5BA370486F90CAFCA24D81041F5FA27048167C7A4C7ECA7F>87 -D<B700F84AB6FCA5D8001F01F0C93803FC006F705A6D4E5A6D6D4C5A816D4E5A6D6D4C5A -826D4EC7FC6E6D5D70157E6E5F6E7F704A5A6E4C5A6E7F704A5A6E4C5A6E7F71495A6E4C -C8FC6F7F71137E6F5D6F7F71485A6F4A5A6F13FC71485A6F4A5A6F13FFF09F806F02BFC9 -FC7013FF60705B8260705B8260B3A7037FB612FEA5584B7ECA5D>89 -D<130C131E137E5B485A5B485A485A485AA248C7FC121E123E123C127CA21278A212F85A -A2EAF1F8EAF7FEB5FC1480A214C0A27EA37E14807E6C13006C5AEA01F8122579CB22>96 -D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFF2703FC00077F486C6D7F486C6D -7F6E7E83707EA3707E6C90C7FC6C5A6C5AC9FCA4ED1FFF021FB5FC49B6FC130F013FEBC0 -3F9038FFFE00000313F04813C04890C7FC485A485AA2485AA2485AA4167FA26D14FF007F -15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C9038E07F076C9038FFFE0300014A -7ED8003F9038F0007F0103018090C7FC37337CB13C>I<EB7FC0B5FCA512037EB3A2ED0F -FF037F13F002C1B512FC02C714FF9126CFF80F7F9126FFC00113E092C76C7E02FC6E7E4A -6E7E5C4A6E7E84831980A219C083A319E0AC19C0A25F1980A34D1300606E141F606E4A5A -6E4A5A02BF4A5A91261F80035B9027FE0FF01F5B496CB548C7FC496C14F849C614E0C8D8 -0FFEC8FC3B4D7CCB44>I<91380FFF8091B512F8010314FF010F158090263FFE0013C0D9 -7FF8EB1FE0D9FFE0EB3FF04849EB7FF8484913FF4890C7FC5A5B121F5B003FED7FF0EE3F -E0007FED1FC093C7FC5BA212FFAC127F7FA2123FA26D153E121F6D157E6C167C6C6D14FC -6C16F86C6D13036C01F0EB07F0D97FFCEB1FE06DB4EBFFC0010F90B5120001035C010014 -F0020F13802F337CB137>I<EF1FF0EE3FFFA51600177FB3A2EC0FFF91B512E0010314F8 -010F14FE013FEB01FF903A7FF8003FFFD9FFE0130F48497F48497F4890C77E4881485AA2 -485AA3127F5BA212FFAC127FA37F123FA2121F7F000F5D6C6C5C5E6C6D5B6C01E0497F6C -6D017FEBFFE090393FFE03FE6DB512F801075C010114C09027001FFC00EBC0003B4D7CCB -44>I<EC0FFF91B512F0010314FC010F14FF90263FFE077F90267FF0007F4948EB3FE048 -01806D7E48824890C76C7E4848140783485A003F6F7EA3485A701380A312FFA290B8FCA4 -01F8CAFCA5127FA27FA2123FA26C6CED0F80A2000F161F6C6C16006E5C6C6D147E6C6D5C -6C6D495AD97FFCEB07F0903A1FFF803FE06D90B55A010392C7FCD9007F13FC020713C031 -337DB138>I<ED7FE0913807FFFC021F7F027F7F902601FFE0138049018113C0902607FE -0113E049485A14F8131FEB3FF0A26F13C0EB7FE06F1380EE3E0093C7FCADB77EA526007F -F0C8FCB3B3A2003FB512F8A52B4D7DCC26>I<DA7FFCEB0FF00103B538807FF8011F9138 -F1FFFC4991B512FE90267FF01F13F32701FFC007138348EB0001A248486DEBC1FC000FEE -E0F849027F1300A2001F82A8000F5EA26D14FF00075E6C6C495BA26CD9C00790C7FC6C90 -38F01FFC4890B55A5ED803C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B612FC -EEFFC06C16F817FE6C8218806C17C06D16E00003B812F0120FD81FFCC7000F13F8D83FF0 -140049153F4848ED1FFC00FF160F491507A56D150F007F17F86D151F6C6CED3FF06C6CED -7FE0D80FFE913801FFC06C6C6C010713806C01F8017F1300C690B612FC013F15F0010715 -80D9003F01F0C7FC37487DB03D>I<EB7FC0B5FCA512037EB3A2923801FFC0030F13F803 -3F13FE4B7F9126C1FE077F9126C3F0037F9138C7C001DACF8080150002DE7F02FC81A25C -A25CA35CB3A9B6D8C07FEBFFE0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C5B -A26C5B6C90C7FCEA00FC90C8FCACEB7FC0B5FCA512037EB3B3B61280A5194D7BCC22>I< -EB7FC0B5FCA512037EB3A393383FFFFEA5040390C7FC17FCEE0FF04C5A4C5A4C5A04FEC8 -FCED03FC4B5A4B5AED1FC0ED7F804BC9FC14C102C37F14CF02DF7F91B57E825C4A6C7E02 -F87F4A6C7E9138C01FFF81836F7F6F7F816F7F83707E163F707E83707F707F84B6D8803F -EBFF80A5394C7CCB41>107 D<EB7FC0B5FCA512037EB3B3B3AAB61280A5194C7BCB22>I< -90287FC001FFE0EC7FF8B5010F01FC0103B5FC033F6D010F804B6D6C4814E0DBFE079026 -C03F817F9126C3F0019138FC007F0003D9C7E0DAE1F8806CDA8000D9F1E06D7E02CFC7EB -F3C002DE91267FF780131F02FC03FFC77FA24A5DA24A5DA34A5DB3A9B6D8C03FB5D8F00F -B512FCA55E317BB067>I<903A7FC001FFC0B5010F13F8033F13FE4B7F9126C1FE077F91 -26C3F0037F00039038C7C0016CD9CF8080150002DE7F02FC81A25CA25CA35CB3A9B6D8C0 -7FEBFFE0A53B317BB044>I<913807FF80027F13F80103B6FC010F15C090261FFE017F90 -3A7FF0003FF8D9FFC0EB0FFC48496D7E4890C76C7E4817804980000F17C048486E13E0A2 -003F17F049157FA2007F17F8A400FF17FCAB007F17F8A36C6CEDFFF0A3001F17E06D5C00 -0F17C06C6C4A13806C17006C6D495A6C01E0EB1FFC6D6C495A903A3FFE01FFF0010FB612 -C0010392C7FCD9007F13F80207138036337DB13D>I<90397FC00FFFB5017F13F002C1B5 -12FC02C714FF9126CFF80F7F9126FFC00313E0000391C77F6C01FC6E7E4A6E7E5C4A6E7E -848319808319C0A47113E0AC4D13C0A319805FA219004D5A804D5A6E4A5A6E4A5A02FF49 -5BDB80075B9126EFF01F5B02E7B548C7FC02E314F802E014E0DB0FFEC8FC92CAFCAFB612 -C0A53B467CB044>I<DA0FFE14F091B5EAC0010103ECF003010F14F8013F903801FC0790 -3A7FFC007E0FD9FFF0131F4849EB0F9F4849EB07FF485B4890C77E82485A003F81A25B00 -7F167FA3485AAC6C7EA4123F6D15FF121F6D5C6C5D6C7F5E6C6D5B6C6D133F6C01F813FE -90393FFE03FC6DB55A010714E00100148091381FFC0091C8FCAF047FEBFFE0A53B467CB0 -41>I<9039FF803FE0B5EBFFF8028113FE02837FDA87E11380EC8F830003D99F0713C06C -139E14BCA214F8A24A6C13806F13004A6C5A93C7FCA45CB3A7B612E0A52A317CB032>I< -90390FFF8070017FEBF1F048B6FC1207380FFC01391FE0003F4848130F491307127F90C7 -12035A1501A27FA213E06D90C7FC13FE387FFFF0ECFFC015F06C14FC6C14FF6C15806C15 -C06C15E0C615F0013F14F8010714FCEB007F14019138003FFE150F0078140700F81403A2 -6C1401A37E16FC6C14036D14F87F6DEB07F001F8EB1FE001FFEBFFC091B51280D8FC7F14 -00D8F81F13FCD8E00313C027337CB130>I<14F8A61301A41303A21307A2130FA2131F13 -3F137F13FF1203000F90B512F0B7FCA426007FF8C7FCB3A6167CAA013F14F880A290391F -FE01F0010F1303903907FF87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>I<D97F -E0EC3FF0B5EC7FFFA5000315016C81B3AB5EA25EA25E7E6EEB0F7F017F021E7F6E017CEB -FFE090393FFE01F86DB512F0010714E0010114C09027003FFE00EBC0003B327BB044>I< -B66C90B512C0A5000101E0C73807F0006E5D6C5F6E140F017F5E80171F013F93C7FC6E5C -011F153E6E147E6D157C6F13FC6D5DEDC001A26D01E05B16036D5DEDF0076D5DEDF80F02 -7F5CEDFC1F023F91C8FC15FE5E021F133EEDFF7E6E137C16FC6E5BA26E5BA36E5BA26E5B -A26F5AA26FC9FCA23A317DAF41>I<B60081B500FC90387FFFF0A500019026E000030180 -903803FC006E715A6C6F5E6E6F1303017F61A26E496D1307013F616E6F130F011F4A5EA2 -6E6F131F6D4A93C7FCDD9FFC5B6DD9801F153E170F03C06E137E6D023F157C93383E07FF -DBE07E15FC6DDA7C035C03F015816D02FC5D4C7E03F815C3DA7FF95E9226FDF00013E7DA -3FFF5E4C137F19FF6E5F4C7FA26E496D90C8FCA26E5E93C7120FA26E486E5AA202015E4B -1403A26E486E5A54317EAF59>I<B6D88007B512C0A526007FFCC7387F8000013F037EC7 -FC6E14FE6D6C495A6D6D485A6D6D485A6D01E05B4C5A6D6D485A6DEBF83F6E6C48C8FC91 -383FFEFE6E6C5A5E6E5B6E5B806E7FA26E7F82824A7F5C4A80DA0FE77FDA1FC37FDA3F81 -7F4AC67F147E4A6D7E49486D7E01036E7E49486D7F49487F49488149486D7F017F6E7FB5 -00F8011FEBFFF0A53C307EAF41>I<007FB500C090387FFFE0A5C601F0C73803F8006E5D -017F5E6E1407013F5E6E140F011F5E6E141FA26D6D91C7FC5F6D153E6F137E6D157C6F13 -FC6D5DEDF0016D5DEDF803027F5C15FC1607DA3FFE5B160F021F5CEDFF1F6E91C8FC16BF -6E13BE16FE6E5BA36E5BA26E5BA26F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F80 -13FC486C5B387FE001D8FFF05B14035D14074A5A49485A007F49CAFCEBC07E383F81FC6C -B45A6C5B6C13C0C648CBFC3B467EAF41>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmcsc10 10.95 23 -/Fl 23 121 df<B6FCA618067E9622>45 D<166016F01501A216E01503A216C01507A216 -80150FA2ED1F00A2151E153EA2153C157CA25DA25D1401A25D1403A25D1407A24A5AA292 -C7FC5CA2141E143EA25CA2147814F8A25C1301A25C1303A2495AA25C130FA291C8FC5BA2 -133EA2133C137CA2137813F8A25B1201A2485AA25B1207A25B120FA248C9FCA2121E123E -A2123C127CA2127812F8A25A1260245B7AC332>47 D<EB07FC90383FFF8090B512E03903 -F01FF83907C007FC390F0001FE001E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB -1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A -5A4A5A4AC7FC147E147C5C495A495A495A495A49C71270133E133C5B4914E0485A485A48 -5A48C7120148B6FCA25A4815C0B7FCA3243D7ABC32>50 D<EC01E0A24A7EA34A7EA34A7E -A24A7E141CA2EC3CFFEC387FA24A6C7EA34A6C7EA2010180ECC00FA249486C7EA349486C -7EA24980010E1301010FB5FC4980A2011CC7FC49147FA20178810170143FA201F0814914 -1F1201486C811207486CEC3FF8D8FFFE49B512C0A332317DB038>97 -D<B612FEEDFFC016F03A03FC0007F86C48EB01FE1500167F1780163F17C0A61780167F17 -0016FE4B5AED07F0ED7FE090B6128016F09039F80001FC6F7EEE7F80163FEE1FC017E016 -0F17F0A617E0161FA2EE3FC0EE7F80923801FF00486CEB07FEB712F85E93C7FC2C2F7CAE -35>I<DA0FF81330DA7FFF13700103B5EAC0F090390FFC03F190391FE000F9D97F80133F -01FEC7121F4848140F48481407485A000F1503491401121F491400123F5B127F1770A248 -C9FC1700AA6C6C1570A3123F6D15F0121F6D15E0000F15016D15C0000715036C6C15806C -6C14076C6CEC0F00D97F80133ED91FE05B90390FFC03F00103B55AD9007F1380DA0FF8C7 -FC2C317BAF36>I<B612FCEDFFC016F03A03FE000FF86C48EB01FEED007FEE3F80EE1FC0 -EE0FE0EE07F0160317F8160117FCA2EE00FEA417FFAA17FEA3EE01FCA3EE03F817F01607 -EE0FE017C0EE3F80EE7F00ED01FE486CEB0FFCB712F016C04BC7FC302F7CAE39>I<B8FC -A33903FE00016C489038003F80161F160F1607A21603A317C0ED1C01A393C7FCA2153CA2 -15FC90B5FCA3EBFC00153CA2151CA21770A392C712E0A41601A2EE03C0A21607160F161F -486C14FFB81280A32C2F7CAE33>I<B712FEA33903FE00036C48EB007F828282A282A3EE -0380A21538A293C7FCA31578A2EC01F890B5FCA3EBFC01EC0078A21538A592C8FCAA487E -B512FCA3292F7CAE31>I<DA0FF81360DAFFFE13E00103EBFF8190390FF807E390393FC0 -00F34948137F01FEC7123F4848141F4848140F48481407120F491403485A003F1501A25B -007F1500A348C9FC1700A8031FB5FCA26C7E9238001FF0EE0FE0123F7FA26C7E120F7F12 -076C7E6C7E6C6C141FD97F80133FD93FE0137B90390FFC03F10103B512E00100EC8060DA -0FFCC7FC30317BAF3A>I<B5D8F81FB5FCA3D803FEC7EA7FC06C48EC3F80B190B7FCA301 -FCC7123FB3486CEC7FC0B5D8F81FB5FCA3302F7CAE38>I<B512F8A33803FE006C5AB3B3 -A3487EB512F8A3152F7DAE1B>I<90383FFFFCA39038007FC0EC3F80B3AD1218127EB4FC -A3EC7F005A007C137E007813FE383C01F8381F03F03807FFC0C648C7FC1E307CAE27>I< -B512FCA3D803FEC8FC6C5AB3A7160EA4161CA4163CA2167C16FC1501ED03F8486C131FB7 -FCA3272F7CAE2F>108 D<D8FFFE923807FFF0A3D803FF92380FFC006C5FD9DF80141DA3 -D9CFC01439A2D9C7E01471A3D9C3F014E1A2D9C1F8EB01C1A3D9C0FCEB0381A2027EEB07 -01A36E130EA291381F801CA391380FC038A2913807E070A3913803F0E0A3913801F9C0A2 -913800FF80A3486CEB7F00487E486C013E497EB5008091B512F0A2151C3C2F7CAE44>I< -D8FFFC49B5FC7F7F00019138001FF06EEB0FE06EEB07C0EE0380EBDFE0EBCFF013C780EB -C3FC13C180EBC0FF801580EC3FC0EC1FE0A2EC0FF0EC07F8A2EC03FCEC01FE140015FFED -7F83153F16C3ED1FE3ED0FF3A2ED07FBED03FFA28181A2167F163F486C141F487E486C14 -0FB56C1307A21603302F7CAE38>I<EC1FF891B5FC903907F00FE090390FC003F0013FC7 -12FC017E147E49804848EC1F804848EC0FC04848EC07E0000F16F0491403001F16F84914 -01003F16FCA2007F16FE90C9FCA34816FFAA6C6CEC01FEA3003F16FCA26D1403001F16F8 -6C6CEC07F0A26C6CEC0FE0000316C06C6CEC1F806C6CEC3F00017E147E6D5C90390FC003 -F0903907F00FE00100B5C7FCEC1FF830317BAF3A>I<B612FCEDFF8016E03A03FE000FF8 -6C48EB03FCED00FE167FA2EE3F80A217C0A61780A2EE7F00A216FEED03F8ED0FF090B612 -C093C7FC01FCC9FCB2487EB512F8A32A2F7CAE33>I<B612E015FE6F7E3A03FE003FE06C -48EB07F8ED01FC6F7EA2828283A594C7FC5E5E4B5A4B5A4B5AED3FC090B500FEC8FC5D90 -38FC007FED1F806F7E826F7EA26F7EA582A4EF01C016FEA21501486CED0380B538F800FF -93383F8700EE1FFEC9EA03F832307CAE37>114 D<90383FC00C9038FFF81C0003EBFE3C -390FE03FFC381F8007EB0003003E1301481300157C5A153CA36C141CA27E6C14006C7E13 -E013FE383FFFE06C13FE6CEBFF806C14E0000114F06C6C13F8010F13FC1300EC07FE1401 -1400157F153F12E0151FA37EA2151E6C143E6C143C6C147C6C14F89038C001F039FBF807 -E000F1B512C0D8E07F130038C007FC20317BAF2A>I<007FB712F8A39039801FF0073A7E -000FE00000781678A20070163800F0163CA348161CA5C71500B3A8EC3FF8011FB512F0A3 -2E2E7CAD36>I<B5D8F801B5FCA3D803FEC7EA1FF06C48EC0FE0EE07C0EE0380B3AB1607 -6C6C1500A2017E5C017F141E6D141C6D6C133C6D6C5B6D6C485A903903FC07E00100B512 -80DA3FFEC7FCEC07F830307CAE38>I<3B7FFFF001FFFEA30003D9C00013E0C649EB7F80 -017F027EC7FC167C6D6C13786D6C5B6D6C5B15016D6C485AD903FC5B15076D6C48C8FC90 -3800FF1EEC7F9C15BCEC3FF86E5AA2140F6E7E14034A7E4A7EEC1EFF141C91383C7F804A -6C7E14709138F01FE049486C7E49486C7E148001076D7E49486C7E130E011E6D7E496E7E -017C6E7E13FC000382D80FFEEC7FF8B549B512C0A3322F7DAE38>120 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmti10 10.95 18 -/Fm 18 121 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C -137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218 -E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214 -3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101 -13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2 -49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12 -D<120FEA3FC0127FA212FFA31380EA7F00123C0A0A77891C>46 D<147E49B47E903907C1 -C38090391F80EFC090383F00FF017E137F4914804848133F485AA248481400120F5B001F -5C157E485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078020F13 -70127C021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00 -FF00D800FC133E252977A72E>97 D<EC1FC0ECFFF0903803F03C903807C01E90381F800E -90383F000F017E133F4913FF485A485A000714FE5B000F14FC48481300A2485AA3127F90 -C8FCA35A5AA6481403007E1407150F151E003E143C15786C14F0EC03E0390F800F803903 -E07E003801FFF838003FC0202977A72A>99 D<EE3F80ED1FFF1700A2ED007FA2167EA216 -FEA25EA21501A25EA21503A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC0 -90383F00FF017E137F5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE -127F90C75AA214015A485CA2140316384814F0A21407167891380FE070127C021F13F000 -7E013F5B003E137FECF3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E2940 -77BE2E>I<EC3F80903801FFE0903807E0F890381F803CEB3E0001FC131E485A485A1207 -4848133E49133C121F4848137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8 -FCA45AA61506150E151E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC38 -01FFF038007F801F2976A72A>I<EC03F0EC0FFC91383E0E1C9138FC077E903901F003FE -1303903807E001D90FC013FCEB1F80A2EB3F004914F8137E01FE1303A2484814F0A21507 -12034914E0A2150F12074914C0A2151FA216805B153F1203ED7F006D5BA200015B000049 -5A9038F80F7E90387C1EFEEB1FF8903807E0FC90C7FC1401A25DA21403A25D001C130700 -7F5C48130F5D4A5A4AC7FC48137E00F85B387C03F0381FFFC0D803FEC8FC273B7CA72A> -103 D<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0 -121E121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B137E13FE5BA212015BA2 -12035B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C01383148038078700EA03 -FEEA00F8163E79BC1C>105 D<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A213 -3FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA212 -1FA25BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FCA2131E131CA2EA7C381378EA -3C70EA1FE0EA0780144079BE17>108 D<D801F0D93F80137F3D07FC01FFE003FFC03D0F -3E07C1F80F83F03D0E1F0F00FC1E01F8001E011C90387C3800001C49D97E707F003C01F0 -5C0038157F4A5C26783FC05C12704A91C7FC91C7127E00F003FE1301494A5CEA007EA203 -01140301FE5F495CA203031407000160495C180F03075D0003051F13E0494A1480A2030F -EC3F810007F001C0495CA2031F91383E0380120F494AEC0700A2033F150E001FEF1E1C49 -91C7EA0FF80007C7000EEC03E0432979A74A>I<D801F0EB3F803A07FC01FFE03A0F3E07 -C1F83A0E1F0F00FC001E011C137C001C49137E003C13F012385C38783FC012705C91C7FC -00F015FE495CEA007EA2150101FE5C5BA2150300015D5B15075E0003020F13704914C0A2 -031F13F00007ED80E05B1681EE01C0120F49EC0380A2EE0700001FEC0F0E49EB07FC0007 -C7EA01F02C2979A733>I<EC1FC0ECFFF8903803F07C90380FC01FEB1F8090393F000F80 -017E14C0491307484814E0485A12075B000F15F0485AA2485AA2ED0FE0127F90C7FCA215 -1F4815C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A5A003E495A6C495A4A5A -260F803EC7FC3807C0FC3801FFF038003F80242977A72E>I<903903E001F890390FF807 -FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED -80019038F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA20103140F17 -E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F -80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0 -B5FCA22D3A80A72E>I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB -380F001C1370003CEBE01F123814C0D8783F14C00070903880070092C7FC91C8FC12F05B -EA007EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC232979A726 ->114 D<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C133E4913 -7E15FEA2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E0010F13F013 -00140F14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F80127000 -78EB1F006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F01307A25C -A2130FA25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC13FEA25B -A21201A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C1438EB00 -78147014F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<017CEB01C048 -B4EB07F038038F80EA0707000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F13 -0000705BA2EAF03F91C712E012005B017E130116C013FE5B1503000115805BA2ED070012 -03495B150EA25DA25D1578000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F025 -2979A72A>118 D<903903F001F890390FFC07FE90393C1E0E0F9026780F1C138001F0EB -B83FD801E013F89039C007F07FEA0380000714E0D9000F140048151C000E4AC7FCA2001E -131FA2C75BA2143F92C8FCA35C147EA314FE4A131CA30101143C001E1538003F491378D8 -7F811470018314F000FF5D9039077801C039FE0F7C033A7C0E3C078027783C1E1EC7FC39 -1FF80FFC3907E003F029297CA72A>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmbxti10 14.4 1 -/Fn 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A -EA0FE0121271912B>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmbx12 17.28 52 -/Fo 52 122 df<94267FFF80903801FFE0043FB500F0013F13FC4BB6D8FC01B57E030FDB -FF0FECFF80037F04BF15C04AB5D8E00390B5008113E04A01FCC76CEBFC03020F01F091B5 -D8F00713F04A01C04914E04A90C7484A4813F84A4817804A485C49491700495B62495B76 -13F04970496D13E04B7213C0726F138072EE3E009AC7FCB0BD12FEA6D8000F01E0C849C9 -FCB3B3B0003FB6D8F803B712E0A665657DE45E>11 D<94387FFF80041FB512F04BB612FC -030F81037F6F7E4AB5D8E0077F4A49C76C7E020F01F0EC1FF04A01C0147F4A90C8487E4A -485C4A484A7F49495C495BA2495B4E7F49705B5DA3725B725B725B735A96C9FCAB0503B5 -12FEBBFCA6D8000F01E0C7120184B3B3AF003FB6D8F803B71280A651657DE45A>I<ED0F -FF4AB512F8020F14FF023F15C091B712F049D9FC037F0107D9F00013FE4901C0EB3FFF49 -90C7000F7F49486E7F017F8349486E7F4A80488448496E7FA248844A157F4884A3481980 -A34819C04A81A34819E0A7B518F0B3A86C19E0A76C19C0A26E5DA26C1980A36C1900A36C -6D4B5AA26C60A26C6D4A5B6C606E5C6D6C4A5B6D6C4A5B6D6D495B6D6D4990C7FC6D01F0 -EBFFFE6DD9FC035B010090B612F0023F15C0020F92C8FC020114F8DA001F138044607ADD -51>48 D<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007C7FCB3 -B3B3B3007FB91280A6395E74DD51>I<913801FFF8021FEBFFC091B612F8010315FF010F -16C0013F8290267FFC0114F89027FFE0003F7F4890C7000F7F48486E7FD807F86E148048 -486E14C048486E14E048486F13F001FC17F8486C816D17FC6E80B56C16FE8380A219FFA2 -83A36C5BA26C5B6C90C8FCD807FC5DEA01F0CA14FEA34D13FCA219F85F19F04D13E0A294 -B512C019804C14004C5B604C5B4C5B604C13804C90C7FC4C5A4C5A4B13F05F4B13804B90 -C8FC4B5AED1FF84B5A4B5A4B48143F4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC7F8092C9 -FC02FE16FE495A495A4948ED01FCD90FC0150749B8FC5B5B90B9FC5A4818F85A5A5A5A5A -BAFCA219F0A4405E78DD51>I<92B5FC020F14F8023F14FF49B712C04916F0010FD9C01F -13FC90271FFC00077FD93FE001017F49486D8049C86C7F484883486C6F7F14C0486D826E -806E82487FA4805CA36C5E4A5E6C5B6C5B6C495E011FC85A90C95CA294B55A614C91C7FC -604C5B4C5B4C5B4C5B047F138092260FFFFEC8FC020FB512F817E094C9FC17F817FF91C7 -003F13E0040713F8040113FE707F717F7113E085717FA2717F85A285831A80A31AC0EA03 -FCEA0FFF487F487F487FA2B57EA31A80A34D14005C7E4A5E5F6C495E49C8485BD81FF85F -000F5ED807FE92B55A6C6C6C4914806C01F0010791C7FC6C9026FF803F5B6D90B65A011F -16F0010716C001014BC8FCD9001F14F0020149C9FC426079DD51>I<F01F804E7E187F18 -FFA25F5F5F5FA25F5F5FA294B5FC5E5E5EA25E5EEE3FBFEE7F3FA216FEED01FCED03F8ED -07F0A2ED0FE0ED1FC0ED3F8016005D15FE4A5A4A5AA24A5A4A5A4A5A4A5AA24AC7FC14FE -495A5C1303495A495A495A5C133F49C8FC13FE485AA2485A485A485A5B121F485A48C9FC -12FEBCFCA6CA6CEBC000B1037FB8FCA6485E7CDD51>I<01C0EE01C0D801F8160F01FF16 -7F02F0EC07FFDAFF8090B5FC92B7128019006060606060606095C7FC17FC5F17E0178004 -FCC8FC16E09026FC3FFCC9FC91CBFCADED3FFE0203B512F0020F14FE023F6E7E91B712E0 -01FDD9E00F7F9027FFFE00037F02F801007F02E06EB4FC02806E138091C8FC496F13C049 -17E07113F0EA00F090C914F8A219FC83A219FEA419FFA3EA03F0EA0FFC487E487E487FA2 -B57EA319FEA35C4D13FC6C90C8FC5B4917F8EA3FF001804B13F06D17E0001F5E6C6C17C0 -6D4B1380D807FC92B512006C6C4A5B6C6C6C01075B6C01E0011F5BD97FFE90B55A6DB712 -C0010F93C7FC6D15FC010115F0D9003F1480020301F0C8FC406078DD51>I<EE1FFF0303 -B512E0031F14F892B612FE0203814AD9FC037F021F9039C0007FC04A90C7EA1FE0DAFFFC -6E7E494914074949EC7FF8494914FF49495B4949497F4990C7FC495D5C13FF485BA25A4A -6E5B5A715B48496E5B725A4894C8FCA35AA35C48913801FFE0030F13FE033F6D7E4B14E0 -92B612F89126E1FE037FB53AE3F0007FFEDAE7E06D7EDAEFC06D7F4B6D7F02FFC76C7F4A -82717F4A82A2854A8085A24A1780A54A17C0A37EA77EA47E6E1780A27EA21A007E4D5B7E -6E5E7E6E5E6C4C5B6D7E013F4B5B6D6C4A5B6D01C0495B6D6D90B5C7FC6DD9FC0713FC6D -90B65A6D5E023F15C0020F92C8FC020114F8DA001F1380426079DD51>I<EA07E0120F7F -13FCEBFFFC91B912F8A45AA21AF01AE01AC01A801A00A248606161616101E0C9123F0180 -4C5A48CA485A4D90C7FC60007E4C5A17074D5A4D5A4D5A485F4D5A17FF4C90C8FCC9485A -5F4C5A160F4C5A5F163F4C5A16FF5F5D94C9FC5D5D5E150FA24B5AA2153FA24B5AA215FF -A34A5BA25CA35CA44A5BA45CA65CAD6E5BA26E5BDA03FECAFC6E5A456377E051>I<9238 -3FFF800203B512FC021FECFF80027F15E049B712F849D9F0077F010F90C76C7ED91FFCEC -1FFFD93FF06E7F494802037F494882717F484980854890C9127FA24884183FA25A80A380 -806E157F6E5E14FE6E7E6F4A5A6C14F003FC495B03FF495B6C1580DCE0075B6CDBF80F90 -C7FC9338FE1FFE6C9238FF7FF84D5A6D16C06D5E6D4BC8FC6D6F7E6D16E00101826D16FC -023F814A8149B87E010783498390263FFE3F8190267FFC0F819026FFF003814849C6FC48 -496D804849131F4890C7000780160148486E1580003F163F49150F007F7014C049150171 -7E8400FF835B8484A384A21A80A27F007F1900607F003F606D160F001F606D4C5A6C6D15 -3F6C6D4B5A6C01F04B5A6C01FC02035B6C01FF021F5B6D9027F001FFFEC7FC6D90B65A01 -0F16F001035E010093C8FC020F14F8DA007F90C9FC426079DD51>I<ED3FFF0207B512F0 -023F14FC91B7FC010316C049D9F8077F49D9C00113F8013F496C6C7E4948C76C7E49486E -7E4884484980717F4849825A48707F855A5C855A8583A2B583A41A80A71AC0A35F7EA46C -5EA27E6E5C7EA26C5E6C7F6C5E6C6D147D6D6C14FD6D6CEB01F96D90388003F16D9038F0 -1FE16D90B500C11480010115816D6C1401021F13FC020113E091C8FC1A00A25FA261A3D9 -FF805E487F486D4A5B487FA2486D5E5F61615F614A4A90C7FC4D5A6C5B4A4A5A4A01035B -D803FCC7485B6C6C021F13C0D9FFC0017F5B6CD9F803B5C8FC6DB612FC6D5D010F15E001 -0392C9FC010014F8020F1380426079DD51>I<F00FE04E7EA24E7EA34E7EA24E7EA34D7F -A24D80A24D80A34D80A24D80A34D80A2DD7FBF7FA2181F05FF8017FE04016D7FA24D7E04 -038217F804076D80A24D7E040F8217E0041F6D80A24D7F043F825F047F6E7FA294C77E4C -825E03016F7FA24C800303845E03076F80A24C80030F845E031F6F80A24C81033F845E03 -7F707F93B9FCA292BA7EA24A85A203FCC912070203865D020771805D86020F864B82021F -865D87023F864B83027F8692CBFC874A864A840101875C496C728090381FFFC0B700E092 -B812FEA66F647BE37A>65 D<BB12F0F2FF801BF81BFEF3FFC088D800010280C7000114F8 -DF003F7F080F13FF74807480867480757FA2757FA28987A289A965A26365A2515BA298B5 -5A505C505C5091C7FC505B505B087F13F00703B512C096B6C8FC93B812F81BC01BF8F3FF -801CE00480C8001F13F8080713FE08016D7E7480757F757F757F89757F89871E80871EC0 -A41EE087A663A21EC0A3631E80A2511400A2515B515B6398B55A505C08075C081F5C97B6 -C7FCBD5A1CF81CE099C8FC1BF898C9FC63627AE173>I<4DB5ED03C0057F02F014070407 -B600FE140F047FDBFFC0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6 -C73807FF814A02F0020113C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01 -F08291B54882490280824991CB7E49498449498449498449865D49498490B5FC484A84A2 -484A84A24891CD127FA25A4A1A3F5AA348491A1FA44899C7FCA25CA3B5FCB07EA380A27E -A2F50FC0A26C7FA37E6E1A1F6C1D80A26C801D3F6C6E1A00A26C6E616D1BFE6D7F6F4E5A -7F6D6D4E5A6D6D4E5A6D6D4E5A6D6E171F6D02E04D5A6E6DEFFF806E01FC4C90C7FC020F -01FFEE07FE6E02C0ED1FF8020102F8ED7FF06E02FF913803FFE0033F02F8013F1380030F -91B648C8FC030117F86F6C16E004071680DC007F02F8C9FC050191CAFC626677E375>I< -BB12E0F2FF801BF01BFE757E1CF0D800010280C7000780DF007F13FE080F6D7E08018074 -80093F7F090F13FC757F757F877580767F8A88767F8A888AA2767FA28A881F80A37614C0 -A41FE0A5881FF0B05214E0A51FC0A4521480A31F006466A2525BA2525BA2525B666499B5 -5A515C5191C7FC515B515B515B097F5B50B512C008075C083F91C8FC0707B512FCBD12F0 -1CC051C9FC1BF81B8008E0CAFC6C627AE17C>I<BD12FCA488A2D8000102C0C71201F100 -0F1A01F2007F1B3F1B0F1B07757EA28787A288A3F43F80A31C1FA3197EA3F40FC0A499C7 -FC19FEA31801A218031807181F18FF93B6FCA6EEC000181F180718031801A21800A21D7E -197EA21DFCA696C812011DF8A31C03A3F407F0A31C0FA21C1F1C3F1DE01C7F1CFF63631B -0F093F13C098B5FC1A0797B6FCBEFCA31D80A35F617AE06A>I<BD12E0A41CF0A2D80001 -02C0C71207F1003F1A0F1A031A001B7F1B3FF31FF81B0FA21B07A21B03A21B011CFCA31B -00A419FCA21C7EA41C00A21801A31803A21807180F183FEF01FF93B6FCA6EEC001EF003F -180F18071803A21801A31800A896C9FCB3A5B912F8A657617AE065>I<B96C90B91280A6 -D8000102C0C9000102C0C7FCB3B3A293BBFCA604C0C91201B3B3A6B96C90B91280A67162 -7AE17E>72 D<B912E0A6C702E0C7FCB3B3B3B3AEB912E0A633627CE13C>I<020FB812F0 -A691C70001EC8000B3B3B3ACEA03FCEA0FFF487F487F487FA2B57EA45E96C7FCA36C4949 -5B604A5B6C90C75C6C484A5B01F84A5BD80FFE4A5B6C6C6C90B55A0001D9F80749C8FC6C -90B65A013F15F0010F15C001014AC9FCD9001F13C044647CE153>I<B912F8A6D8000102 -C0CBFCB3B3B1F307E0A5F30FC0A61B1FA31B3F1C80A21B7FA21BFFA262A2626250130062 -62624FB5FC1907191F4EB6FCBDFC63A553627AE161>76 D<B700C0083FB612F070627097 -B7FCA37061D800010DF8C7FC70F103EFA202FD6DF107CFA202FC6DF10F8FA36F6DF01F0F -A26F6D183EA26F6D187CA26F6D18F8A36F6DEF01F0A26F6DEF03E0A26F6DEF07C0A26F6D -EF0F80A3706DEE1F00A2706D163EA2706D5EA2706D5EA3706D4B5AA2706D4B5AA2706D4B -5AA2706D4B5AA3716D4AC7FCA2716D143EA2716D5CA2716D5CA3716D495AA2716D495AA2 -716D495AA2716D495AA3726D48C8FCA272EBC03EA2726D5AA2726D5AA372EBF9F0A272EB -FFE0A2725CA2725CA37390C9FCA2735AA2735A90381FFFC0B700F86E480207B812F0A373 -5AA2735A8C627AE199>I<BB7E1AFCF2FFC01BF81BFE757ED800010280C7001F80070114 -F0736C7F081F7F747F747F7414807414C0A27414E0A21DF0A27513F8A41DFCA91DF8A498 -B512F0A21DE0A25014C01D8062501400505B505B087F5B4FB512E0071F5C93B9C7FC1BFC -1BF01B8008F0C8FC04C0CCFCB3B3A2B97EA65E627AE16E>80 D<BA12F8F1FFE01AFEF2FF -C01BF01BFED800010280C76C7F070714C0070014F0747F081F7F747F747F7480A2748089 -A37480A389A865A3505CA265A2505C9AC9FC505B505B505B087F5B4FB55A0707148096B5 -48CAFC93B812F81BC050CBFC621AFF932680000314C0DE007F7F071F13F8737F737F737F -73808885888688A2747FA688A688A676140FF71F80A374801F3F86771400745E746E5BB9 -6E6E5B746E485A75EBFE07091F90B55A090715E009015DCF003F91C7FC0A0013FC71647A -E178>82 D<DBFFFCEC01E0020FD9FFE01303027F02FC130749B7130F0107EEC01F011F16 -F049D9C007EBF83F4948C7383FFE7FD9FFF8020FB5FC4801E014014849804849153F91C9 -7E484882001F834982003F83845B007F187FA2193FA200FF181FA27F190FA27FA26D1707 -8080806C01F893C7FC80ECFF8015F86CECFFC016FC6CEDFFE017FE6CEEFFE018F86C17FE -6C717E6C846C846D17F86D836D836D8313036D18806D6C17C0020F17E01401DA000F16F0 -1500040715F8EE007F1703050014FC183F84060713FE84A2007C8300FC83A2197FA3193F -7EA31AFC7EA27F1AF86D177F7F1AF06D17FF6D18E06D5E01FF18C06E4B138002E04B1300 -02F84B5A02FFED3FFC01CF01E0ECFFF8018301FF010F5B010191B65A6D6C5E48011F93C7 -FC48010315FC48D9003F14E048020149C8FC476677E35A>I<001FBEFCA64849C79126E0 -000F148002E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9 -181FA4007E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>I< -B96C023FB612FEA6D8000102C0CA0007EBF000E2007FC7FCB3B3B3AA656D63A2821C0180 -6570170380525A6E7F6E4F5A70171F6E626E6D4D5A6E6D177F525A6E6E030390C8FC033F -01E04B5A6F6DED1FFC6F01FCED7FF80303D9FF80903803FFE06F02F8017F5B6F6C90B7C9 -FC041F5E040716F8040016C0050F4ACAFCDD003F13C06F647AE17C>I<B800FC047FB612 -E0A6D800070280CB6CEB80006D6EDE07FCC7FC666D6E611D0F6D6E611D1FA26E6D611D3F -6E6D611D7F6E6D96C8FC65A26E6D4D5AA26E6E5F1C036E6E5F1C076E6E5F1C0FA26E6E5F -1C1F6F6D5F1C3F6F6D5F1C7FA26F6D4CC9FCA26F6D5E1B016F6E5D1B03A26F6E4A5AA26F -6E5D1B0F6F6E5D1B1F706D5D1B3FA2706D5D1B7F706D92CAFC63706D5C1A01A2706E485A -A27002C05B1A077002E05B1A0F7002F05B1A1FA27101F85B1A3F7101FC5B1A7F7101FE90 -CBFC62A2716D5AA2715CA2715CA3715CA2715CA2725BA2725BA37290CCFCA2725AA2725A -A2725A73637DE17A>I<B800F8011FB80203B7FCA6D8000F91C9000102E0CAEBFE006D72 -F20FF07072715A230F6D73627072171F6D6A708277173F6D7397C7FC70846B6E72197E70 -7217FE6E726170855118016E6870731503636E68704C6E15076E68718451180F6EDE7E7F -607172151F6E06FE61714B7E08016F153F6E4E6C95C8FC71840803616F4D6C177E710207 -6F15FE6F66714B7E080F7013016F4D6C5F7185081F18036F4D6C5F71023F7013076F94C7 -5F728450180F6F047E6E5E7272131F1AFE6F4C6E5EDEE00171133F6F4C6E93C9FC06F084 -070361704B6E157E06F87213FE1907704B6E5DDEFC0F1881704B6E5D06FE19C1071F18C3 -704B6E5DDEFF3F18E7706407BFC9FC07FF18FF704A705CA3704A705CA27099CAFC4F82A2 -7149705BA37149705BA27149705BA37149705BA37190CB5BA27148725AA37148725A7148 -72CBFCA0637DE1A7>I<913803FFFE027FEBFFF00103B612FE010F6F7E4916E090273FFE -001F7FD97FE001077FD9FFF801017F486D6D7F717E486D6E7F85717FA2717FA36C496E7F -A26C5B6D5AEB1FC090C9FCA74BB6FC157F0207B7FC147F49B61207010F14C0013FEBFE00 -4913F048B512C04891C7FC485B4813F85A5C485B5A5CA2B55AA45FA25F806C5E806C047D -7F6EEB01F96C6DD903F1EBFF806C01FED90FE114FF6C9027FFC07FC01580000191B5487E -6C6C4B7E011F02FC130F010302F001011400D9001F90CBFC49437CC14E>97 -D<903807FF80B6FCA6C6FC7F7FB3A8EFFFF8040FEBFF80047F14F00381B612FC038715FF -038F010014C0DBBFF0011F7FDBFFC001077F93C76C7F4B02007F03F8824B6F7E4B6F1380 -4B17C0851BE0A27313F0A21BF8A37313FCA41BFEAE1BFCA44F13F8A31BF0A24F13E0A24F -13C06F17804F1300816F4B5A6F4A5B4AB402075B4A6C6C495B9126F83FE0013F13C09127 -F00FFC03B55A4A6CB648C7FCDAC00115F84A6C15E091C7001F91C8FC90C8000313E04F65 -7BE35A>I<92380FFFF04AB67E020F15F0023F15FC91B77E01039039FE001FFF4901F801 -0113804901E0010713C04901804913E0017F90C7FC49484A13F0A2485B485B5A5C5A7113 -E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE7EA280A27EA2806C18FCA26C -6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC1FC06D01E0EC7F806D6DECFF -00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D020F1580020102FCC7FCDA00 -0F13C03E437BC148>I<F17FF8050FB5FCA6EF000F8484B3A892380FFF804AB512F8020F -14FE023FECFF8391B712E301039138807FF3499039F8000FFB011F01E00103B5FC494913 -004990C87E49488148498148834A815A485BA2485BA25AA3485BA4B5FCAE7EA46C7FA37E -A26C7FA26C5F806C5F6C6D5D6C6D5D017F93B5FC6D6C6C0103806D6D49806D01F0D91FF7 -EBFFFE6D9039FE01FFE7010190B612876D6CECFE07021F14F8020314E09127003FFE00EC -C0004F657BE35A>I<92380FFFC04AB512FC020FECFF80023F15E091B712F80103D9FE03 -7F499039F0007FFF011F01C0011F7F49496D7F4990C76C7F49486E7F48498048844A8048 -84485B727E5A5C48717EA35A5C721380A2B5FCA391B9FCA41A0002C0CBFCA67EA380A27E -A27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C17016D6C4B5A6D6D4A5A6D01E0 -4A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC6D6C90B55A021F15F8020715E0 -020092C8FC030713F041437CC14A>I<EE3FFC0307B51280033F14C04AB612F0020715F8 -4A9038F03FFC4AEB807F913A7FFE00FFFE4A5A4B4813FF4913F05B4913E0A24913C0A270 -13FE4949EB7FFCEF3FF8EF1FF0EF07C094C7FCB0B812C0A6D8001F01C0C8FCB3B3B0007F -B612FCA638657CE431>I<F107F8DB7FFEEC3FFE020FB5D8F001B5FC027FDAFE03148049 -B7128F49DCDFFD13C0010FD9F00FEBFFC149D9800114014990C7EBFC0349486E6C7E4948 -EC3FFF48496E018113800780130048F0C03E97C7FC48496E7FA34884A96C60A36C6D4A5B -A26C60A26C6D4A90C8FC6D6C4A5A6D6C4A5A6D6D485BDBF00F5B4990B612C060D97C7F4A -C9FCD9FC0F14F09126007FFECAFC92CCFC1201A47FA27F8014F091B77E18FE6CEFFFC019 -F06D17FC19FF6D846D846D846D84013F8490BAFC0003854801E0C712014890C9000F7F48 -4816014848EE007F4848717E8512FF5B85A56D5F007F616D173F003F616D177F6C6C4D5A -6C01C003035B6C6D4B5B6C01F8031F5BC601FF92B5C7FC6D01F8011F5B011F90B712F801 -0717E0010094C8FC020F15F0DA003F01FCC9FC4A607CC151>I<903807FF80B6FCA6C6FC -7F7FB3A8EF1FFF94B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FDB83 -F86D7FDB87F07FDB8FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8 -F007B71280A651647BE35A>I<EB0FE0EB3FF8497E48B5FCA24880A24880A76C5CA26C91 -C7FCA238007FFC6D5AEB0FE090C9FCAF903807FF80007FB5FCA6C6FC7F7FB3B3AEB712C0 -A622657BE42C>I<ED01FCED07FF4B1380033F13E0A24B13F0A292B512F8A76F13F0A26F -13E0A2030F13806F1300ED01FC92C8FCAFEEFFF8021FB5FCA6EC000F8181B3B3B3AAEA07 -F0EA1FFC487E487EB56C4813F0A317E05D17C05D17806C4948130049495A6C48495A261F -FE0313F06CB65A6C158000014AC7FC6C6C13F8010713802D8288E431>I<903807FF80B6 -FCA6C6FC7F7FB3B3B3B3ADB712E0A623647BE32C>108 D<902607FF80D91FFFEEFFF8B6 -91B500F00207EBFF80040702FC023F14E0041F02FF91B612F84C6F488193267FE07F6D48 -01037F922781FE001F9027E00FF0007FC6DA83F86D9026F01FC06D7F6DD987F06D4A487F -6DD98FC0DBF87EC7804C6D027C80039FC76E488203BEEEFDF003BC6E4A8003FC04FF834B -5FA24B5FA24B94C8FCA44B5EB3B2B7D8F007B7D8803FB612FCA67E417BC087>I<902607 -FF80EB1FFFB691B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FC6DA83 -F86D7F6DD987F07F6DD98FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2 -B7D8F007B71280A651417BC05A>I<923807FFE092B6FC020715E0021F15F8027F15FE49 -4848C66C6C7E010701F0010F13E04901C001037F49496D7F4990C87F49486F7E49486F7E -48496F13804819C04A814819E048496F13F0A24819F8A348496F13FCA34819FEA4B518FF -AD6C19FEA46C6D4B13FCA36C19F8A26C6D4B13F0A26C19E06C6D4B13C0A26C6D4B13806C -6D4B13006D6C4B5A6D6D495B6D6D495B010701F0010F13E06D01FE017F5B010090B7C7FC -023F15FC020715E0020092C8FC030713E048437CC151>I<902607FF80EBFFF8B6010FEB -FF80047F14F00381B612FC038715FF038F010114C09227BFF0003F7FC6DAFFC0010F7F6D -91C76C7F6D496E7F03F86E7F4B6E7F4B17804B6F13C0A27313E0A27313F0A21BF885A21B -FCA3851BFEAE4F13FCA41BF861A21BF0611BE0611BC06F92B512801B006F5C6F4A5B6F4A -5B03FF4A5B70495B04E0017F13C09226CFFC03B55A03C7B648C7FC03C115F803C015E004 -1F91C8FC040313E093CBFCB3A3B712F0A64F5D7BC05A>I<D90FFFEB0FFCB690383FFF80 -93B512E04B14F04B14F8923907FC7FFC92390FE0FFFEC6EC1F806DD93F0113FF6D133E15 -7E157C15F8A215F07013FEA24BEB7FFCEF3FF8EF0FE04B90C7FCA55DB3B0B712F8A63841 -7BC042>114 D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48B8FC48EBE0 -014890C7121FD80FFC1407D81FF0801600485A007F167F49153FA212FF171FA27F7F7F6D -92C7FC13FF14E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C826C82013F -1680010F16C01303D9007F15E0020315F0EC001F1500041F13F81607007C150100FC8117 -7F6C163FA2171F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D0203130002 -C0EB0FFE02FCEB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F13E035437B -C140>I<EC07E0A6140FA5141FA3143FA2147FA214FF5BA25B5B5B5B137F48B5FC000F91 -B512FEB8FCA5D8001F01E0C8FCB3AFEF0FC0AC171F6D6D1480A2173F6D16006F5B6D6D13 -7E6D6D5B6DEBFF836EEBFFF86E5C020F14C002035C9126003FFCC7FC325C7DDA3F>I<90 -2607FFC0ED3FFEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60183E6D6D14 -7E4E7F6D6D4948806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F5C020314F8 -DA003F018002F0C7FC51427BC05A>I<B700C00103B512FCA6C66C01C0C8381FFE006D6D -ED07F0A26D6D5E190F6D6D5E191F6D606F153F6D95C7FC6F5DA26D6D157E19FE6D6E5C18 -016E5E7013036E5E701307A26E6D5C180F6E6D5C181F6E6D5C183F6E93C8FC705BA26E6D -13FEA26E6E5A17816FEBC1F817C36F5C17E76F5C17FFA26F5CA26F5CA26F91C9FCA26F5B -A36F5BA2705AA2705AA2705AA2705A4E417DBF55>I<007FB600C0017FB512F8A6D8001F -01F8C70007EBF0006D040190C7FC6D6D5D6D6D4A5A6D6D4A5A70495A6D4C5A6E7F6E6D49 -5A6E6D495A7049C8FC6E4A5A6E6D485A6E6D485A6E13FFEF8FF06EEC9FE06FEBFFC06F5C -6F91C9FC5F6F5B816F7F6F7F8481707F8493B57E4B805D4B80DB0FF37FDB1FE17F04C080 -153F4B486C7F4B486C7F4A486D7F4A486D7F4A5A4B6D7F020F6E7F4A486D7F4A486D804A -5A4AC86C7F49486F7F4A6F7F0107707FEB3FFFB600F049B7FCA650407EBF55>120 -D<B700C00103B512FCA6D8003F01C0C8381FFE006FED07F0A26D6D5E190F6D6D5E191F6D -6D5E193F6D95C7FC6F5D6D177E6F15FEA26D6E495AA26E6D5C18036E6D5C18076E5E7013 -0F6E5E70131FA26E6D495AA26E6D91C8FC606E6D137E18FE6E5D17816F5C17C3A26FEBE7 -F0A26FEBF7E017FF6F5CA26F5CA26F91C9FCA36F5BA26F5BA2705AA2705AA2705AA35FA2 -5F163F94CAFC5E167E16FED807E05CD81FF81301487E486C495AA2B5495AA24B5A5E151F -4B5A6C4849CBFC15FEEBFC01393FF807FC391FF03FF06CB55A6C5C6C91CCFCC613FCEB1F -E04E5D7DBF55>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmsy10 10.95 5 -/Fp 5 56 df<007FB812F8B912FCA26C17F83604789847>0 D<EE7FFE0307B512E0033F -14FC92B7FC0203D9C00313C0DA0FFCC7EA3FF0DA3FE0EC07FCDA7F80EC01FED901FEC9EA -7F80D903F8EE1FC0D907E0EE07E04948707E4948707E49CB7E017E187E498449844848F0 -0F8000031AC04918074848F003E0A24848F001F0A248CD12F8A2001E1A78003E1A7CA200 -3C1A3C007C1A3EA200781A1EA300F81A1FA2481A0FAB6C1A1FA200781A1EA3007C1A3EA2 -003C1A3C003E1A7CA2001E1A78001F1AF8A26C6CF001F0A26C6CF003E0A26C6CF007C06D -180F00011A806C6CF01F006D60017E187E6D606D6C4C5A6D6C4C5A6D6C4C5AD903F8EE1F -C0D901FEEE7F809026007F80DA01FEC7FCDA3FE0EC07FCDA0FFCEC3FF0913B03FFC003FF -C0020090B6C8FC033F14FC030714E09226007FFEC9FC50557BC05B>13 -D<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0AA6C1580A3 -6C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D>15 -D<19301978A2197C193CA2193E191EA2191F737EA2737E737EA2737E737E1A7C1A7EF21F -80F20FC0F207F0007FBB12FCBDFCA26C1AFCCDEA07F0F20FC0F21F80F27E001A7C624F5A -4F5AA24F5A4F5AA24FC7FC191EA2193E193CA2197C1978A2193050307BAE5B>33 -D<126012F0AE12FC12FEA212FC12F0AE126007227BA700>55 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmsl10 10.95 54 -/Fq 54 122 df<9339FFC003F8030F9038F01FFE923A3FC07C7E0F923BFE001FF81F80DA -03F890383FF07F4A48D9FFE013C0EC1FE04A4848EBC0FF03804A1380DA7F00157F4A9238 -003E004A6D91C7FC8301015D4A5CA4160113034A5CA416030007B812FCA3290007F00003 -F8C8FCA21607130F4A5CA4160F131F4A5CA4161F133F4A5CA4163F137F91C75BA4167F5B -4992C9FCA31201486C49487EB5D8F83F13FF5DA242407EBF35>11 -D<EEFF80030F13F092383FC0789238FE001CDA03F8130E4A48133FDA1FE013FF4A5A4B5A -EC7F005C5CEE00FE010115784A1400A513035CA4EE01FC0003B7FC17F8A23A0007F0000F -1607A2130F4A14F0A4160F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F -5B491500A31201486C903801FF80B5D8F83F13FCA25D30407EBF33>I<DCFF80EB7FC003 -0F9039E007FFF8923B3F80781FE03C923BFE003C7F000EDA03F8D91FFC7F4A484948EB1F -80DA1FE0D9FFF0137F4A48485B03804A13FFDA7F005C5C4A92C7FCF27F0001016E153C4A -4A91C7FCA5010314014A5CA41AFE0003BAFC62A23D0007F00003F800071903A2010F1407 -4A4A5CA41907011F140F4A4A5CA4190F013F141F4A4A5CA4191F017F143F91C7495CA419 -3F49147F4992C75BA31201486C49486CEBFFC0B5D8F83FD9FC1F13FE605D49407EBF4C> -14 D<140E141E143EA4143CA3000FEC01E03A1F803803F001C0130F01F0EB1FE0D807F8 -EB7FC03A01FC70FE003900FE73F890383F77E090380FFF80D903FEC7FCEB00F0EB03FCEB -1FFF90387EEFC03901FCE7F03907F0E3FC391FE0E1FF3A7F81E07F80903801C03F00FC14 -1F0078EC0F00D8200390C7FC1200A31307A35C91C8FC242774C32D>42 -D<007FB5FCA2B512FEA418067C961E>45 D<157015F014011407143F903803FFE0137FEB -FFCFEBF80F1300141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075C -A5130F5CA3131F497EB612F8A31D3D78BC2D>49 D<EC01FE91380FFFE0023F13F89138FC -07FC903901E001FE903907C000FF49C7EA7F80011E15C0163F4915E05B0170141F13FF80 -A35A163FA26C90C7FC137E0118EC7FC090C8FCEEFF80A24B1300A24B5A5E4B5A4B5A4B5A -5E4B5A4BC7FC15FEEC01F84A5A4A5A4A5A4AC8FC143E5C5CEB01E04948130E49485B49C7 -FC131E495C13705B48485C484814F0000FB6FC5A485D5AB7FC5EA22B3D7CBC2D>I<EC07 -FC91383FFF809138F80FE0903903C007F09039078003FC90380F0001011C14FE013C14FF -137F1480EBFFC0A31480A291380003FE137E90C7FCED07FC16F8150F16F0ED1FE016C0ED -3F80ED7E005DEC07F0903803FF8015F090380001FC6E7EED7F80ED3FC0A2ED1FE016F0A3 -16F8A4120EEA3F80486C133F16F012FFA216E0157F5B48C7EAFFC000F015800070491300 -12786C495A003EEB07F86C495A390FE03FE00003B51280C649C7FCEB1FE0283F7ABC2D> -I<17E016011603831607A2160FA2161F83163FA2167F167716F7EEE7FCED01E316C31503 -16831507EE03FEED0F01150E151E151C153C03387FED7800157015F05D4A4880177F4A5A -A24AC7FCA2020E81173F5C021FB6FC5CA20270C7EA3FE0171F5CA2495AA2494881170F49 -C8FCA2130EA24982013C1507A2137CD801FE4B7E2607FF80EC3FFEB500F00107B512FC19 -F85E3E417DC044>65 D<013FB7FC18E018FC903B007FE00007FE6E48903801FF80943800 -7FC05DF03FE0F01FF0A3027F16F892C8FCA54A16F04A153F19E0187F19C0F0FF8001014B -13004A4A5A4D5AEF1FF04D5ADC03FFC7FC49B612F8EFFF8002F8C7EA3FE0EF0FF0EF07FC -717E010715014A81711380A319C0130F5CA5011F4B13805C19005F601707013F4B5A4A4A -5A4D5A4D5A017F913801FF8001FF020F90C7FCB812FC17F094C8FC3D3E7DBD40>I<DCFF -C01338030F01F01378037F01FC13F0913A01FF803F01913A07FC000781DA1FE0EB03C3DA -7FC0EB01E74AC812FF4948ED7FE0D907FC153F495A4948151F495A4948150F494816C018 -074890C9FC485AA2485A000F1880491603121FA248481607A295C7FC485AA412FF5BA75B -A2181C183C1838A27F007F1778187018F0003F5F6D150160001F16036C6C4B5A95C7FC6C -6C5D6C6C151E6C6C5D6C6C15F86D6C495A6D6CEB07C0D91FF0EB1F80D907FE01FEC8FC01 -01B512F86D6C13E0DA07FEC9FC3D4276BF42>I<013FB7FC18E018F8903B007FF0000FFE -6E48EB01FF9438007FC04B6E7E180F85727E727E147F4B6E7EA2727EA302FF178092C9FC -A54918C05CA41A8013034A5DA41A0013074A5DA261A24E5A130F4A5E180F61181F61011F -4C5A5C4E5A4EC7FC4D5A4D5A013F4B5A4A4A5AEF3FE0EF7F80017F4A48C8FC01FFEC1FFC -B812F0178004FCC9FC423E7DBD45>I<013FB812F8A39026007FF0C7127F6E48140F1803 -4B14011800A31978147F4B1570A502FF147092C7FCA3190017F0495D4A1301A21607161F -91B6FC495DA29138FC003F160F1607160301075D5CA219E0180119C0010FEC07004A90C7 -12031980A218071900011F5E5C181EA2183E183C013F167C4A15FC4D5A1707017F151F01 -FF4AB45AB9FCA2603D3E7DBD3E>I<013FB812E0A3903A007FF000016E48EB003F180F4B -14071803A31801147F4B15C0A514FF92C71270A395C7FC17F0495D5C160116031607161F -49B65AA39138FC003F160F160701075D4A1303A5010F4AC8FC5C93C9FCA4131F5CA5133F -5CA3137FEBFFF0B612F8A33B3E7DBD3B>I<4BB46C1370031F01F013F0037F9038FC01E0 -913A03FF807E03913A0FF8000F83DA1FE0EB07C7DA7F80EB01EF4AC812FFD903FE16C049 -48157F4948153F495A4948151F495A4948168091C9120F5A485AA2485A000F1800498212 -1FA248485EA295C7FC485AA412FF5BA6043FB512E05BA29339001FFC00715AA2607F127F -A2171F123F6D5EA2121F7F000F163F6C7E6C6C4B5A7F6C6C15FF6C6DEB01EFD93FC0EB07 -C7D91FF0EB1F87D907FE9038FE03800101B5EAF8016D6C01E0C8FCDA07FEC9FC3C4276BF -47>I<013FB5D8F807B6FC04F015FEA29026007FF0C7380FFE006E486E5AA24B5DA4180F -147F4B5DA4181F14FF92C85BA4183F5B4A5EA491B8FC5B6102FCC8127FA318FF13074A93 -C7FCA45F130F4A5DA41703131F4A5DA41707133F4A5DA3017F150F496C4A7EB6D8E01FB5 -12FC6115C0483E7DBD44>I<011FB512FC5BA29039003FF8006E5AA25DA5143F5DA5147F -5DA514FF92C7FCA55B5CA513035CA513075CA5130F5CA5131F5CA3133F497E007FB512F0 -A2B6FC263E7EBD21>I<013FB500F8010FB5FC4C5BA29026007FF0C7000313E06E486E13 -0019FC4B15F04E5A4E5A4E5A061EC7FC027F5D4B5C4D5A4D5AEF07804DC8FC02FF141E92 -C7127C5FEE01E04C5A4C5A49021FC9FC4A5B5E4C7E5D03077F01035B9139FC1F3FE0153C -4B6C7E15F09139FFE00FF84913C092380007FC5C4A6D7E5C707E130F4A6D7F84177F717E -A2011F6F7E5C717EA2717EA2013F6F7E5C84A2017F83496C4A13E0B600E0017F13FFA24B -90B6FC483E7DBD47>75 D<013FB512FEA25E9026007FF8C8FCEC3FE0A25DA5147F5DA514 -FF92C9FCA55B5CA513035CA513075CA21838A21870130F5CA218E0A3011F15014A15C017 -03A21707EF0F80013F151F4A143F177FEFFF00017F140301FF143FB9FC5FA2353E7DBD39 ->I<90263FFFF093381FFFF85013F0629026007FF8EFF000023F4D5AA2023B933801DFC0 -A2DA39FCED039FA2F1073F14790271040E5BEC70FE191C19381A7F02F01670DAE07F94C7 -FC19E0A2F001C06201016D6C495A02C05FF00700A2180E6F6C14010103161C028003385B -A218706F7EF0E00313070200DA01C05BA2923907F00380A294380700075B010E902603F8 -0E5C5FA25F190F011E6D6C5A011C605FA2EEFDC0DB00FF141F013C5D013860013C92C7FC -017C5C01FE027E143F2607FF80017C4A7EB500FC037FB512E004785E4A1338553E7CBD53 ->I<90263FFFE0023FB5FC6F16FEA29026003FF8020313C0021F030013004A6C157C023B -163C6F15381439810238167802787FDA707F157082153F82031F15F002F07FDAE00F5D82 -15078203031401010180DAC0015D82811780047F1303010315C04A013F5C17E0161F17F0 -040F1307010715F891C7000791C7FC17FC160317FE04015B4915FF010E6E130E188E177F -18CEEF3FDE011E16FE011C6F5AA2170FA21707133C01386F5A133C017C150113FE2607FF -801400B512FC18705C483E7DBD44>I<923803FF80031F13F09238FE01FE913903F0003F -DA0FC0EB1FC0DA3F80EB07E0027EC76C7E49486E7E49488149486E7E4948157F495A013F -17804948ED3FC049C9FCA24848EE1FE012035B000718F05B120FA2485A19F8123F5BA212 -7FA219F04848163FA5F07FE0A35BF0FFC0A219805F19007F4D5A127F4D5A60003F160F6D -5E001F4C5A4D5A6C6C4B5A95C7FC6C6C15FE00034B5A6C6C4A5A6C6C4A5A017FEC1FC06D -6C495AD90FE001FEC8FC903903F807F80100B512C0DA0FFCC9FC3D4276BF47>I<013FB6 -12FEEFFFE018F8903B007FF0000FFC6E48EB01FF7113804BEC7FC0183F19E0F01FF0A214 -7F5D19F8A402FFED3FF092C8FCA219E0A2F07FC05B4AEDFF8019004D5A4D5AEF0FF80103 -ED3FE04A903801FF8091B648C7FC17F002FCCAFCA213075CA5130F5CA5131F5CA5133F5C -A3137F497EB612E0A25D3D3E7DBD3E>I<013FB612F017FF18E0903B007FF0003FF86E48 -EB07FCEF01FE4B6D7EF07F8019C0183F19E0147F4B15F0A502FFED7FE092C8FCA219C0F0 -FF80A2494B13004A5D4D5AEF0FF04D5AEF7F800103DA07FEC7FC91B612F017809139FC00 -07E0EE03F8EE00FC0107814A147F717EA284A2130F5CA484011F157F5CA41902013F1707 -5CA2F0F00F017F170E496C143FB600E0011F131C94380FF83C4B01071378CA3801FFE094 -38003F8040407DBD43>82 D<9238FF80070207EBE00F021FEBF81E91387F00FE02FCEB1F -3ED903F0EB0FFE49481307494813034AEB01FC49C7FC491400133E137E177C491578A57F -1770A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14F06D14FC010380010080143F02 -031480DA003F13C015031500EE7FE0163F161FA2160F121CA31607160F003C16C0A31780 -003E151F1700007E5D007F153E6D5C16FC01E0495AD87DF0495AD8FCFCEB0FC03AF87F80 -3F8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF33>I<0007B912F0A33C0FFE00 -0FF8003F01F0160F01C04A13034848160190C7FC121EF000E048141F5E1238A212781270 -153F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA514075DA5140F5DA3141FEC -7FFC0003B7FCA33C3D76BC42>I<B600E090B512FC4B15F8A2000101C0C7000F13006C49 -EC03FCEF01F091C9FC60A317015A495EA417031203495EA4170712074993C7FCA45F120F -49150EA4171E121F49151CA4173C123F491538A31778177017F05F001F15015F16036D4A -5A000F93C8FC5E6C6C141E6C6C5C000115F86C6C495A017FEB07C090393FC03F8090260F -FFFEC9FC010313F89038007FC03E4073BD44>I<B6017FB5D88007B512804A1A00A20007 -01C0010101E0C713F06C90C80180EC3FC06C48735A99C7FC057F150E1B1E6D191C6C1A3C -1B3805FF15787214705E636EEB03BF017F4E5AEE073F505A040E7F051F4AC8FC161C6E17 -0E013F143862167804706D5BEEF00F04E05D90381FE00104C015F003035E0480140106F8 -5B9226070007130302F05F010F010E150797C9FC5D190E4BEB03FC616E5A01075F5D61DA -F9C014FE05015BECFB8002FF6F5A7F92C75CA24A93CAFC835C606D5A605C604A15781870 -594074BD5D>87 D<010FB500F090B512F85B5FD9003F902680003F1300DA0FFEC7EA1FF8 -4BEC0FE00207168096C7FC6E6C141E181C6E6C143C606E6D5B4D5ADB7FC05B4D5A92383F -E0074DC8FC92381FF01E171C6F6C5A5F923807FCF0EEFDE06FB45A5F6F90C9FCA26F7FA2 -707EA216FF4B7FED03DF9238079FF0ED0F1F92380E0FF8151C92383C07FC15784B6C7EEC -01E04B6C7EEC038002076D7F4AC7FC021E6E7E5C02386E7E5C02F06E7E495A49486E7E13 -0749486E7E497E017F4B7E2603FFF091383FFF80007F01FC49B512FEB55CA2453E7EBD44 ->I<EC7FC0903803FFF890380FC07E90383E003F496D7E01FF6D7E82A248140782A26C5A -137890C7120FA25EA2EC03FF147F903807FF1FEB1FE0D97F805B3801FE00EA03F8485A48 -48133F485A003F5D49EC81C048C7FCA2157F48ED03804814FFA2007F5B913903BF070090 -3880073F3A3FC00E1F8E260FE03C13FC3A03FFF00FF83A007FC003E02A2A7CA82D>97 -D<EB3F80EA1FFFA3C6FC137FA291C9FCA55B5BA512015BA4EC07F80003EB3FFF9039F8F8 -0FC09039FBE003E09039FF8001F891C77E5B4848147E49147F5B821780A2120F5B17C0A3 -167F001F16805BA4EEFF00123F5B4B5AA24B5A5E007F4A5AA24B5A6D495A4BC7FCD87CE0 -137E39F87001F839F03C07E039E00FFF80260003FCC8FC2A4077BE33>I<EC1FF0ECFFFE -903903F01F8090390FC003C0D93F0013E0017E130F49131F000115F04848EB3FE0485AA2 -4848EB1FC0001FEC0F004990C7FC123FA2485AA412FF90C9FCA96CEC0380150716006C6C -5B151E001F5C6C6C5B6C6C5B6C6C485A3901F80F8026007FFEC7FCEB0FF0242A7AA828> -I<EE03F8ED01FFA3ED000F1607A217F0A4160FA217E0A4161FA217C0A491380FF03FECFF -FC902603F81F138090390FC007BF90391F8003FF90387E0001497F0001157F4848150048 -5A120F5B001F5D485A5E5B127FA2150112FF90C75BA41503A25EA37E1507A26C4A5A7F00 -1F141F6C6C133F6C6CEBFFF83B03F001EFFFC03900F80F8F90383FFE0FD90FF0EBE0002D -407ABE33>I<EC3FE0903801FFF8903807E07E90380F801F90393F000F80017E14C049EB -07E0485A12034848EB03F0485AA2121F5B123FA248481307A290B6FCA2D8FF80C8FC90C9 -FCA87EED01C015036C15806D1307001FEC0F006D131E000F5C6C6C5B6C6C485A3900FC07 -C0D93FFFC7FCEB07F8242A7BA828>I<ED07F0ED3FFCEDFC1E913803F03F4A48B4FC4A48 -1380141FEC3F81DA7F0113008102FE137C93C7FCA213015CA513035CA50007B512F8A326 -0007F0C8FCA3130F5CA5131F5CA5133F5CA5137F91C9FCA55B5BA4EA03FF007F13FEB5FC -A229407DBF1C>I<177C913907F803FE91393FFE0F8F9139FC0F9C3F903901F007F89039 -07E003E0D90FC013F0011F903801F80C02801400133FD97F007FA315035B495CA3017E49 -5A5E150F6D5C6D495A90263F803EC7FCECC0FC903871FFF09038E07F8091C9FC485AA47F -A27F90B512F8EDFF806C15E016F86D8048B6FC3A07E0000FFED80F801300003FC8127F00 -3E815A00FC815AA25E163EA25E6C15FC007C4A5A6C4A5A6CEC0FC0D80FC0013FC7FC3903 -F801FCC6B512F0010F90C8FC303D7FA82D>I<147FEB3FFFA313017FA25CA513015CA513 -035CA4ED07F80107EB1FFF9139F0781FC09138F1E00F9139F38007E0ECF70002FE14F049 -5A5CA25CA24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B4915 -00A300015D486C491380B5D8F87F13FCA32E3F7DBE33>I<1478EB01FE130314FFA25B14 -FE130314FCEB00F01400ACEB03F8EA01FF14F0A2EA001F130FA314E0A5131F14C0A5133F -1480A5137F1400A55B5BA4EA03FF007F13F0A2B5FC183E7DBD1A>I<ED0780ED1FE0153F -16F0157FA216E0153F16C0ED0F0092C7FCACED7F80EC3FFF1600A2140180A35DA41401A2 -5DA41403A25DA41407A25DA4140FA25DA4141FA25DA4143F5DA4121E267F807FC7FCA200 -FF137E14FE5CEB01F8495A387C07E0383C0FC0D80FFFC8FCEA03F8245187BD1C>I<147F -EB3FFFA313017FA25CA513015CA513035CA501070103B5FC02F014FEA26F13F06F1380EE -FE00010F14F84A485AED03C04B5A031FC7FC153E011F13784A5AECC3E0ECC7F0ECCFF814 -FF497F14F9ECE1FE14C04A7E4A7E4980017E133F82151F82150F01FE8049130782A20001 -81486C49B4FCB5D8F03F13F04B13E0A2303F7EBE30>I<143FEB1FFF5BA213017FA214FE -A5130114FCA5130314F8A5130714F0A5130F14E0A5131F14C0A5133F1480A5137F1400A5 -5B5BA4EA03FF007F13F8A2B5FC183F7DBE1A>I<902707F007F8EB03FCD803FFD91FFF90 -380FFF80913CE0781FC03C0FE09126E1E00FEBF0073E001FE38007E1C003F090260FE700 -EBE38002EEDAF70013F802FC14FE02D85C14F84A5CA24A5C011F020F14074A4A14F0A501 -3F021F140F4A4A14E0A5017F023F141F91C74914C0A549027F143F4992C71380A300014B -147F486C496DEBFFC0B5D8F87FD9FC3F13FEA347287DA74C>I<903907F007F8D803FFEB -1FFF9139E0781FC09138E1E00F3B001FE38007E090380FE70002EE14F014FC14D814F85C -A24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B491500A30001 -5D486C491380B5D8F87F13FCA32E287DA733>I<EC0FF0ECFFFE903903F01F8090390FC0 -07C049C66C7E013E6D7E01FC6D7E48488049147C0003157E485A000F157F5B121FA2485A -A2007F1680A2170048C85AA54B5AA25E5A6C4A5A7E4B5A5E6C140F6C6C5C4B5A6C6C013E -C7FC6C6C5B6C6C485A3900FC0FE090383FFF80D90FF8C8FC292A7BA82D>I<91387F01FE -903A7FFF0FFFC09139FE3E03F09238F801F8903A03FFE000FE6D49137F4B7F92C713804A -15C04A141FA218E0A20103150F5C18F0A3171F010716E05CA3173F18C0130F4A147F1880 -A2EFFF004C5A011F5D16034C5A6E495AEE1FC06E495AD93FDC017EC7FC91388F01F89138 -83FFE0028090C8FC92C9FC137FA291CAFCA45BA25BA31201487EB512F8A3343A81A733> -I<91390FE003C0DAFFFC1380903903F81E0790390FE0070F90391F80038FD97F0013DF01 -FE13014848903800FF00485A1207485A8248485C123F495CA2485AA2150112FF90C75BA4 -1503A25EA37E15077F003F4A5A151F6C6C133F6C6C137F000714FF3903F003CF3A00FC0F -8FE090383FFE0FEB0FF090C7FC151F5EA5153F5EA4157F4B7E023F13FEA32A3A7AA730> -I<903907F01F80D803FFEB7FE09138E1E1F09138E387F839001FE707EB0FE614EE02FC13 -F002D813E09138F801804AC7FCA25C131FA25CA4133F5CA5137F91C8FCA55B5BA3120148 -7EB512FEA325287EA724>I<9138FF81C0010713E390381F807F90397C003F8049131F48 -48130F5B00031407A248481400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C -7F011F7F13079038007FFE1403140100381300157EA2123C153E157E007C147CA2007E14 -7815F8007F495A4A5A486C485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<EB03 -80A4130791C7FCA25BA25BA2133EA2137E13FE12011207001FB512C0B6FCA2D801FCC7FC -A312035BA512075BA5120F5BA41407001F130E13C0A4141E141C1380A26D5AA2000F5B14 -F03807E1E03801FF80D8007EC7FC1A3978B723>I<01FE147F00FFEC7FFF4914FEA20007 -140300031401A34914FCA4150312074914F8A41507120F4914F0A4150F121F4914E0A215 -1FA3153F4914C0157F15FFEC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826003F -E01380282977A733>I<B539E007FFF05D17E02707FE000313006C48EB01FC6F5A5E0001 -4A5A5EA24B5A6D1307000092C7FC5D150E6D5B7F5DA25D1480013F5B14815D14C3011F5B -02C7C8FCA214CE14EEEB0FFCA25CA26D5A5CA25CA26D5A2C2878A630>I<B500C3B53803 -FFFCA204FE14F8290FFE003FE00013C0D807F86D48EB7F000003173E183C150F18386D5E -0001141F705B153F4D5A15776D4B5A0000ECE7F04DC7FCEC01C3170E9038FF0383017F5D -91380703F85FEC0E01021E5CD93F9C14F002BC6D5A02B813FDDAF8005B4A13FF5F6D5A94 -C8FC5C4A137E167C6DC7FC1678010E14383E2878A642>I<48B539C07FFFC0A33C000FFE -003FF8006D48EB1FE0010315800101023EC7FC6E133C01005C027F5B6F5A91383F81C0ED -C380DA1FC7C8FC15EFEC0FFE6E5A5D140381A24A7E140FEC1E7F023C7FEC383F02707FEC -E01F010180903803C00F49486C7ED90F007F491303017E80D801FE80D807FF497EB5D880 -3F13F8A332277FA630>I<90B539E007FFF05E18E0902707FE000313006D48EB01FC705A -5F01014A5A5F16036E5C0100140794C7FC160E805E805E1678ED8070023F13F05EED81C0 -15C191381FC38015C793C8FC15EF15EEEC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC5C14 -0E141E141C5C121C003F5B5A485B495A130300FE5B4848CAFCEA701EEA783CEA3FF0EA0F -C0343A80A630>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fr cmbx12 14.4 73 -/Fr 73 122 df<922601FFFC903801FFE0033F9026FF801F13F84AB6D8E07F13FE020F03 -F9B6FC023FD9C00FB500C0138091277FFC0003D9FE0113C0902601FFE049495A49494949 -4813E04990C714F049484A13E0495A19C0495A7413C0017F17804A6E6E1380719138007E -007192C7FCAEBCFCA526007FF8C7000301C0C8FCB3B3A7007FB5D8F803B612F0A553547D -D34E>11 D<EEFFFC031FEBFF804AB612E0020781021F9038C00FF8913A7FFE0003FCDAFF -F0EB00FE4949EB03FF4901805B4990C7487F49485CA2495A4D7F013F6F5B5CA37190C7FC -715AEF01F894C9FCA90403B512C0BAFCA526003FFCC7120783B3B3A6003FB5D8FC03B612 -C0A542547DD34B>I<EA07F0EA1FFC487E487EA2B51280A86C1300A86C5AA86C5AA86C5A -A86C5AA76C5AA5C8FCAAEA07F0487EEA3FFE487EA2B51280A76C1300A26C5AEA0FF86C5A -115474D329>33 D<DD03E0EC0F80A24D6C4A7EA2050F153FA24E5DA2051F157FA24E92C8 -FC053F5DA24E5CA2057F1401A295C75BA24D1403A24D5D04011507A24D5DA20403150FA2 -4D5D0407151FA24D5DA2040F153FA24D5D007FBEFCA2BF1280A36C1D006C64C96CC7D801 -FCC9FC4C1403A24C5D03011507A24C5DA20303150FA24C5D0307151FA24C5DA2030F153F -A24C5D031F157FA24C92CAFC003FBD12FE4888BF1280A36C1D00A2C848C7D803F8CAFC02 -011507A24B5D0203150FA24B5DA20207151FA24B5D020F153FA24B5DA2021F157FA24B92 -CBFC023F5DA24B5CA2027F1401A292C75B4A1403A24A5DA201011507A24A5DA26D486E5A -A2616A79D270>35 D<15F8A691380FFF8091B512F8010714FF011F15C049819026FFF8F8 -13F84801C0EB0FFC2603FE00EB03FE4848EC00FF49153F4848ED1F804848ED0FC0A24848 -ED07E0A24848157FEFFFF05EA200FF5DA37FA27F7013E06D6E13C06DED7F806DED1E006C -B492C7FC14C014F86C13FF81EDFFC06C15F86C15FE826C16C06C826C826C826D816D8113 -0F01038101001680141F020115C08003F814E0163F160F82040113F0D81FE080487E486C -157FA2486C153FA2171FA44916E05B6C5A1380007EC7EC3FC0A26C1780177F6C6CEDFF00 -7F6C6C4A5AD807F84A5A6C6CEC0FF82601FF80EB3FF06C9039F8F9FFE06DB65A011F92C7 -FC010714FC010114F0D9001F90C8FCEC00F8A6346179D943>I<EC01E0EC07F84A7EA66E -5AA200041608001F163ED83FC015FFD87FE04A13806D6C485AD8FFF84A13C0D87FFE021F -138001FF5C02835B6C01C390B51200000FD9F1E313FC0001D9F9E713E027003FFDEF90C7 -FC0107B512F8010114E0D9003F90C8FCEC07F8EC3FFF49B512E0010714F890393FFDEFFF -2701FFF9E713E0000FD9F1E313FC003FD9C3F013FF4801836D138002037F01FE80D8FFF8 -020713C0D87FF06E138049486C7ED83FC06E1300D81F00153E00041608C792C7FCA24A7E -A66E5AEC01E0323578D943>42 D<EA07F0EA1FF8487E487E7FB5FC1480A314C0A37EA27E -7EEA07F3EA0003A213071480A3130F1400A25B131E133E133C137C5BA2485A485A485A48 -5A48C7FC121E120C1228769025>44 D<B712F0AB240B7F9F2D>I<EA07F0487E487E487E -487EB51280A76C13006C5A6C5A6C5A6C5A1111769025>I<913803FFC0023F13FC91B6FC -010315C0010F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D13804849 -6D13C0A24817E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A500 -7F17FEA6003F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E -5B6C6D4913006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FC -C7FC020313C0384F7BCD43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA214 -7F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>I<EC3FFE0103B512E0010F14 -FC013F14FF90B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F -48488001F01680486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C9 -14E05EA218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE0 -4B5A4A5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A49 -5AD91F80140749C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79 -CD43>I<91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC48 -48C76C7ED803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90 -C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E0 -16FCEEFF80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A2 -7013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C -6C4816E001F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D -011F1580010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2 -161F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407 -EC0FC01580EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B -485A1207485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE -43>I<D80380150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E -16F016C093C8FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E90 -26FFF8077FDAC0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A4 -18F0A3EA0FE0487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F1700 -6C6C4A5A6D5D6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC -6D14F8010314C09026007FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91 -397FFE03FE903A01FFF0007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913 -E049485B01FF5C485BA2485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC -5AA21508913801FFF8020713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013 -804A15C0A24A15E07013F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E0 -6C6D15C07E6E4913806C6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C001 -0092C7FC023F13FC020713C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A19006060 -60A2606060485F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94 -C8FC16FEC812014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A214 -0FA25D141FA2143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807 -FFC0027F13FC0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C7 -6C7E48488048486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C0 -14F802FE4913806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CED -FFE017806C4BC7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE74801 -8115C048D9007F14E04848011F14F048487F48481303030014F8484880161F4848020713 -FC1601824848157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F -17C06D157F6C6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D -010F1580010102FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE01 -0F6E7E4901037F90267FF8007F4948EB3FF048496D7E484980486F7E484980824817805A -91C714C05A7013E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C -6D137B6C6D13F390387FF803011FB512E36D14C30103028313F89039007FFE03EC004015 -00A218F05EA3D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C48 -4A5A494A5A49495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14 -C0010F49C8FC010013F0364F7ACD43>I<EA07F0487E487E487E487EB51280A76C13006C -5A6C5A6C5A6C5AC8FCB3EA07F0487E487E487E487EB51280A76C13006C5A6C5A6C5A6C5A -113576B425>I<91B5FC010F14F8017F14FF90B712C00003D9C00F7F2707FC00017FD80F -E06D7F48486E7E48C87FD87FE06E7E7F7F486C1680A66C5A18006C485C6C5AC9485A5F4B -5B4B5B4B5B4B5B4B90C7FC16FC4B5A4B5A16C04B5A93C8FC4A5A5D14035D5D14075DA25D -140FA25DAB91CAFCAAEC1FC04A7EECFFF8497FA2497FA76D5BA26D5BEC3FE06E5A315479 -D340>63 D<933807FFF84BB612E0030F15FC037FEDFF80912801FFFC000F13E002070180 -9038007FF8DA1FF8C8EA07FEDA7FE0923801FF80DAFF806F6C7E4948CAEA1FE0D903F8EF -07F0D907E0EF01F84948717E4948187E49CC7E017E737E49912601FFC06E7E4848021F01 -FC6E7E4991B61403000302036F804848499026C07FE06D7E49011F9026000FF01300000F -DA3FFCD903F8804949486D6C147C001F4A48D9007E147E494849023E143EF13FFE484949 -6E6C133F003E49855E007E491A80007C92C8150FA25CA200FC1CC04849481807AD6C6D7E -127C1D806E190FA2007E81003E7F82003F6D1A006C6D6D4A5CA26D6C6D4A143E000F6E6C -49B5FC6D6D6C496E5A00076EB4010F5D6D01079026C07FE713C36C6C6D90B50083EBFFF0 -0001020003005C6D021F01FC013F13806C6C020101C0D907FEC7FC017E91CDFC7F6D7E6D -7E6D7ED903F8F17FC0D901FEF003FF6D6C6C171FDA7FE04CB51200DA1FF8041F13F89126 -07FF800203B512C0020101FC49B500FCC7FC6E6CB812E0030F04FCC8FC03011680DB0007 -0280C9FC5A5579D369>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA3 -4C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E -031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D -844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A82010385 -4A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>I<BA -12C019FEF1FFC01AF01AFCD8000701F0C7000313FFDE007F7F737F070F7F737F87858785 -8785A287A84F5BA263616361634F5B4F5B077F90C7FC4E485A060713F892B812E097C8FC -861AF003F0C7000313FE9539003FFF80070F13E0737F07017F87737F747E1C807413C0A2 -7413E0A31CF0A386A362A31CE0A2621CC0A250138097B5FC1C004F5B19074F5B073F13F0 -4EB55ABC128098C7FC1AF81AC007F8C8FC54527CD160>I<932601FFFCEC01C0047FD9FF -C013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7383F -F0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F8824949824949824949824949 -824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA298C7 -FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D606C -6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C -6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F93C8 -FC030715FCDB007F14E0040101FCC9FC525479D261>I<BA7E19FCF1FF801AF01AFCD800 -0701F0C7000F13FF060014C0071F7F070713F807017F737F747E747F747F86747F747F88 -86888688A2757EA31D8087A21DC0A51DE0A387A963A31DC0A51D80A2631D00A3515AA264 -6264505B6264505B505B5090C7FCF2FFFE4F5B07075B071F5B96B512C0060F91C8FCBB5A -1AF01AC007FCC9FC19805B527CD167>I<BC1280A5D8000701F8C7000114C0F0001F1907 -1901851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC1701A3170317 -07170F177F92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA395C8FCA21B -FCA21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F0603B5FCBC -FCA21BC0A34F517CD058>I<BB12FEA5D8000701F8C700077FF0007F191F190785858586 -861B80A21A1FA31A0FA41BC006F81307A497C7FCA31701A317031707170F177F92B6FCA5 -9238F8007F170F170717031701A31700A795C9FCB3B812F8A54A517CD055>I<932601FF -FCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC0 -7F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F882494982 -4949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA348 -5B1B0FA25AA298C8FC5CA2B5FCAE6C057FB712E0A280A36C94C7003FEBC000A36C7FA36C -7FA27E6C7FA26C7F6C7FA26D7E6D7F6D7F6D6D5E6D7F6D01FC93B5FC6D13FF6D6C6D5C6E -01F0EC07FB020F01FEEC1FF10203903AFFF001FFE0020091B6EAC07F033FEE001F030703 -FC1307DB007F02E01301040149CAFC5B5479D26A>I<B8D8C003B8FCA5D8000701F8C900 -1FEBE000B3AE92BAFCA503F8C9121FB3B1B8D8C003B8FCA560527CD169>I<B812C0A5D8 -000701F8C7FCB3B3B3B2B812C0A52A527CD132>I<027FB71280A591C76C90C7FCB3B3B3 -EA07F0EA1FFC487E487EA2B57EA44C5AA34A485B7E49495BD83FF8495BD81FE05DD80FFC -011F5B2707FF807F90C8FC000190B512FC6C6C14F0011F14C0010101F8C9FC39537DD145 ->I<B800C091B612F8A5D8000701F8C90003EBF8009738007F8051C7FC505AF203F8F20F -F0505A505A505A50C8FCF101FCF107F84F5A4F5A4F5A4F5A07FEC9FCF003FC4E5A4E5A4E -5A4E5A4E5ADD01FECAFC4D5A4D5A4D5A4D7E173F4D7E4C487E4C7F5E4C804C804C80EEFF -7F9226F9FE3F7FDBFBFC809226FFF81F7F4C7EDCC0077F0480804C7E4B6D804B6D804B82 -84727F727F8684727F727F8784728087737F85737F87737F85737F88857380747F888697 -B512FCB800C0013FECFFFEA55F527CD169>I<B812F8A5D8000701F8CAFCB3B3A91A7CA4 -1AFC1AF8A51901A31903A219071AF0190FA2191F193F197F19FF180360183F4DB5FCBB12 -E0A546527CD151>I<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF01EFA2 -02EF6DEF03CFA202E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA26F6C17 -78A26F6C17F0A26F6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D151EA2 -6F6D5DA3706C5DA2706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA2706D13 -1EA2706D5BA2716C5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8FCA371 -5BA2715BA2725AA2725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180>I<B600 -FC93B7FC8181A282D800076E9239003FFC0070EE07E08282A28202EF7F02E77F02E380A2 -02E18002E0806F7F6F7F6F7FA26F7F6F7F6F806F80A26F80707F707F707F707FA2707F70 -80708070808583717F717F717F717FA27114807114C07114E07213F07213F8A27213FC72 -13FE7213FF721487A27214C77214E77313F77313FF85A285858585A28586868686A28686 -8686A2D93FFC187FB7173F1B1F1B0F1B07755A60527CD169>I<93380FFFC00303B6FC03 -1F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F -494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F49854948707F4948707FA2 -4849717E48864A83481B804A83481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFC -AF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A -6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01 -FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8FC020016FC031F15E00303 -92C9FCDB001F13E0565479D265>I<BAFC19F819FF1AE086D8000701F0C7001F13FC0601 -13FF726C13807313C0070F13E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC61A2 -1BF84F13F04F13E0614F13C04F13004E485A061F5B92B812F01AC04FC7FC19E003F8CBFC -B3AEB812C0A550527CD15C>I<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013 -FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F902601FFF0ED3FFE49496F7E49 -496F7F49496F7F4990C96C7F4948707F4948707F01FF854A177F48864849717EA2484971 -1380A2481BC04A83481BE0A24A83481BF0A3481BF8A291CB7EA3B51AFCAF6C1BF8A26E5F -A36C1BF0A36C6D4D13E0A36C1BC06E5F6C1B806E5F6CDB01FE16006C6D902607FF80495A -4C13E06C6D013F6D495A017F91267F03F85C6D6C90277C00FC015B6D6C49D97E035B6D01 -806E485B6D6D48D91F8F5B6D01E0039F90C7FC6D01F06EB45A6DD9FCF85DDA3FFF6E13F0 -020F6D4913C0020301FF90B5C8FC020091B512FC031F180C0303181EDB001FEBE3FE93C7 -EA01FF74133E74137E7413FEF2F8077290B5FC1CFCA285A21CF8A2851CF07314E0A27314 -C0731480731400735B9638007FF8F21FE0576A79D265>I<B912F0F0FF8019F819FF1AC0 -D8000701F0C714F0060F7F060113FE727F737F737F85737F87A2737FA387A863A2616363 -A24F5B4F5B4F90C8FC4F5A06035B060F13F095B512C092B8C9FC19F819E019F89226F000 -0313FE9439007FFF80727F727F727F727F727F8684A28684A787A71D1C75133EA3857513 -7E73157C7513FC731401B86C6D9038F803F807039038FE07F07390B512E0736C14C0080F -1400CEEA7FFC5F537CD164>I<91260FFF80130791B500F85B010702FF5B011FEDC03F49 -EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E48488149150F001F82 -4981123F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86C -ECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D82010F821303010082 -021F16801400030F15C0ED007F040714E01600173F050F13F08383A200788200F882A318 -7FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02 -F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D900 -7F90C8FC3C5479D24B>I<003FBC1280A59126C0003F9038C0007F49C71607D87FF80601 -13C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994 -C7FCB3B3AC91B912F0A553517BD05E>I<B800C00103B612FCA5D8000701F8CAEBF000F3 -1F80B3B3B11B3FA26D97C7FC81637F1B7E6D6D17FE505A6E7E505A6E6D15076E4D5A6E6D -4B5A6E6D4B5A6E01F84B5A6E6DDA03FFC8FC6E6CB46CEB0FFE6F9039F001FFF8030F90B6 -5A030316C0DB007F92C9FC040F14F8DC007F13805E537CD167>I<B700FE031FB512FEA5 -D8001F01F0CA383FFE00F307F06D626F170F6D62811B1F6D6D601B3F6D97C7FC6F5F6D19 -7E821BFE6E6D5E1A016E6D5E1A036E60701507A26E6D5E1A0F6E6D5E1A1F6E6070153FA2 -6E6D93C8FC626E6E147E1AFE6F5E711301A26F6D5C19036F6D5C19076F5E71130FA26F6D -5C191F6F6D5C193F6F93C9FC715BA26FEC807E19FE706D5A18C1705C18E3705C18F318F7 -70EBFFE0A2705CA2705CA37091CAFCA2705BA2715AA3715AA2715AA2715A715A5F537DD1 -66>I<B700FC017FB600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0FC06D -7161876F1C1F6D7196C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F016D66 -704A806E525A88704A17076E059F5F70021F80080F160F6E6570023F806EDC3E074CC8FC -8870027E5F6EDC7C03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B700103 -17016E4C6D5D060716C00580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F170F -6F92C76C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC177E6F -4A6E147C1DFFDDFFF06E14FC6F62A24E816F62A270496F5BA24E817061A295C97E7061A2 -70487090CAFCA37048705AA24D1601040360A27048705A84537DD18B>I<003FB7D88003 -B7FCA5D8000749C8000701F8C7FC6D6D9238007F806D6E93C8FC7015FE6D17016E6D5D70 -4A5A6E16076E6D4A5A6E6D5D4F5A6E6D143F6E6D4A5A7191C9FC6E16FE6EECC00171485A -6F5D6F6D485A6FEBF80F71485A6F5D6F6D485AEFFF7F6F4ACAFC6F5C6F5CA2705B705B84 -82707F707FA2707F7080855E4C80855E4C80DC3FCF7F058F7FEE7F074C6C7FDB01FE814C -7E4B486C8003076E7F4B48814C7F4B486D7F033F824C7F4BC76C7F4B6E7F4A5A4B6E804A -486E800207844A48814B6F7F4A4883023F824A486F7F92C96C7F02FE8401018301037180 -90263FFFC084B76C0103B712F8A55D527CD166>I<B8030FB61280A5D8000F01FCCA003F -90C7FC6FEF07F86D6D606D4F5A826D6E4C5A6D4F5A826E6D4CC8FC6E18FE826E6D4B5A6E -4D5A826E6D4B5A6E4D5A836E6E4A5A6E4D5A836F6D4AC9FC6F5E715C6F6D495A6F150371 -5C6F6D495A6F150F06805B6F6E485A6F153F06E05B706D48CAFC705C725A70EBFDFC7013 -FF61705C82705C6182715B96CBFCB3AA030FB712F8A561527ED166>I<B512F0A748C7FC -B3B3B3B3B3B0B512F0A7147872D925>91 D<B512F8A7EA0003B3B3B3B3B3B0B5FCA71578 -7ED925>93 D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0486C6D -7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6FC -91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A5BA2 -485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C9026 -F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641>97 -D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301017F -913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A285 -84A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA -87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C04154 -7BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001 -FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48 -92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC -3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC -020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91 -B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980 -485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C -6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9 -003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901 -817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191 -C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01 -F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE -903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3FFC02 -03B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC495A49 -5AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7007FB5 -12FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90 -267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83FF813 -E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A -6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFC -A2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC12074848 -C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D003F18 -006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F -03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4EE1F -FC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3 -C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E -000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3 -A6B612E0A51B547BD325>I<157FEDFF80020313E04A13F0A24A13F8A76E13F0A26E13E0 -02001380ED7F0092C7FCADED1FF891B5FCA51401EC007FB3B3B1EA0780EA1FE0487E487E -486C13FF16F0A216E05C16C04A13806C4848130049485A003F495A000FB512F06C5C0001 -148026001FFCC7FC256C87D329>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003F -FE00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8 -ED1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F -6F7F83707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537C -D247>I<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFFE0 -B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F -001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C0 -159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB5 -12FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC9239 -3F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3AC -B6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F9038 -807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8 -6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2 -6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80 -7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F -13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F -92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61 -6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14 -80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F -FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF -150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114 -D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980 -127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C -816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00 -F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF -C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414 -FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE -07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203 -13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F -A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512 -03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8 -EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F -13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E -5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A -6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5000101F0C701F0C7381FF8006E027F -ED07E06C715DA26E023F150F017F705DA26E181F013F4B6C92C7FC6E606D70143E94B5FC -6F177E6D4A6E137C03C001F315FC6D715B160303E001E114016D020702E05B03F013C06D -71485A160F03F8D9807F13076D05F85B93381F003F03FC160F027F4902FC5BDBFE3E011F -131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF3E4C6D137E6E5FA24C7F6E5F4C7F -6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E6FC9FC5A367DB461>I<007FB500 -F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D5C6D6D495A6D4B5A6F495A6D6D -91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB8FE06EEBCFC06EEBFF806E91C9 -FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01FD7F03F87F4A486C7E4A486C7E -020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F495A49486D7F01076F7E49486E7E -49486E7FEBFFF0B500FE49B612C0A542357EB447>I<B600F00107B5FCA5C601F8C8EA7F -E06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D -5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F13FCA26E6D5A16816EEB -C1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E -150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC5D14015D14034A5A6C48 -485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CBFC404D7DB447>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fs cmtt10 10.95 93 -/Fs 93 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00 -A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14 -00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2 -02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F -90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2 -29387DB730>I<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFE -FD13C09039F0FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A3 -6CEC03F0A2007F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F01 -1F7F01037F0100148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FC -A35AA26CEC03F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C -5C6C5CC614F0013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>I<D803C0EB01E0 -D80FF01303486C497E487E150F487ED87E7E495AEAFE7F5E486C133FA25E157FA24BC7FC -6C5A5D387E7E01EA7FFED83FFC5B1403EA1FF86C48485AEA03C0C75B140FA25D141FA24A -5AA25D147FA292C8FC5CA2495AA25C1303A25C1307A290390FF001E0ED07F84A487E011F -497EA24A487E133F163F90267F807F1380ED7E1F14005BA25B1201A24848EB7F3F033F13 -004914FF12076F5A5B6F5A6C486D5A0001EC01E029477DBE30>I<EB07E0EB1FF8497E13 -7F497E803801FC7F497E810003131F13F0A6143F92C8FC91387F0FFF9026F87E1F138000 -0113FEEBF9FC13FB4A6C1300D9FFF013C06C13E0151F02C05BEB7F809038FF003F4892C7 -FC485C48EB807E5A15FE391FDFC0FC383F8FE014E1397F07F1F8EB03F300FEEBFBF0EB01 -FF5D7FEDC006027F130F91393F801F8015C06C137F6CEBFFE049EBF83F018701FC130026 -3FFFFBB5FC6C01F15B14E06C9038C03FFC00039038001FF8D801FCEB07E0293A7DB830> -I<EA07C0EA0FF0EA1FF8A213FCA213FE120F1207EA007EA513FE13FCA2120113F81203EA -07F0120FEA1FE0127FEAFFC013801300127C12380F1D70B730>I<141E147F14FF5BEB03 -FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F -5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7E -EB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F147F141E184771BE30>I<127812 -FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F01307A2EB -03F8A214FC1301A214FE1300A4147FAD14FEA4130114FCA2130314F8A2EB07F0A2130F14 -E0EB1FC0133F1480137FEBFF00485A485A485A485AEA3FE0485A485A90C7FC5A12781847 -78BE30>I<14E0497E497EA60038EC0380007EEC0FC0D8FF83EB3FE001C3137F9038F3F9 -FF267FFBFB13C06CB61280000FECFE00000314F86C5C6C6C13C0011F90C7FC017F13C048 -B512F04880000F14FE003FECFF80267FFBFB13C026FFF3F913E09038C3F87F0183133FD8 -7E03EB0FC00038EC0380000091C7FCA66D5A6D5A23277AAE30>I<143EA2147FAF007FB7 -FCA2B81280A36C1600A2C76CC8FCAF143EA229297DAF30>I<EA03E0EA0FF0EA1FF813FC -EA3FFEA213FFA27EA27E1203EA007FA2137E13FEEA01FC1203EA07F8EA3FF0127FEAFFE0 -EA7F801300123C1019708B30>I<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120F -EA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A2 -1507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA2 -4A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249 -C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127CA22547 -7BBE30>I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049137F48 -48EB3FC04848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FCA400FE -EC00FEAD6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A2 -6C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FE -C7FC273A7CB830>I<EB03C0497EA2130FA2131FA2133F137F13FF1203123FB5FCA213EF -138FEA7E0F1200B3B0003FB512F84814FCB612FEA26C14FC6C14F81F3977B830>I<EB07 -FC90383FFFC090B512F00003804814FE4880261FF80F1380263FE00113C09038C0007F48 -48EB3FE090C7121FED0FF04814075A6C15F81503A3127E1218C8FCA2150716F0150F16E0 -151F16C0153FED7F8015FF4A13005DEC07FC4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A -EB0FF0EB3FE0495A495A4890C8FC4848EB01F04848EB03F8485AEA1FE048B6FCB7FCA37E -6C15F025397BB830>I<EB03FF013F13E090B512F84814FE4880481580260FFE0113C090 -38F0007F4848EB1FE0150F16F01507A26C5A6C5AC8FC150F16E0A2151FED3FC0157FEDFF -8002071300903807FFFE495B5D8115FF6D1480D9000113C09138003FE0ED1FF0ED07F815 -0316FC150116FE1500A21218127EB4FCA2150116FC4814036C15F86C6C13076DEB1FF0D8 -3FF0133F3A1FFE01FFE06CB612C06C15806CECFE00C65C013F13F001031380273A7CB830 ->I<EC03FC4A7E140F141FA2143F147F157E14FEA2EB01FCEB03F8A2EB07F0A2EB0FE0EB -1FC0A2EB3F80A2EB7F0013FEA2485A485AA2485AA2485A485AA2485AA248C7FC12FEB8FC -1780A46C1600C8007EC7FCAA91387FFFFE91B6FCA46E5B29397DB830>I<000FB6128048 -15C05AA316800180C8FCAEEB83FF019F13C090B512F015FC8181D9FE0313809039F0007F -C049133F0180EB1FE06CC7120F000E15F0C81207A216F81503A31218127EA2B4FC150716 -F048140F6C15E06C141F6DEB3FC06D137F3A3FE001FF80261FFC0F13006CB55A6C5C6C5C -6C14E06C6C1380D90FFCC7FC25397BB730>I<EC0FF8EC7FFF49B51280010714E0131F49 -14F090387FF80F9039FFC007F84813803803FE005B485A4848EB03F0ED01E0484890C7FC -5B123F5BA2127FEB000C903803FFE0010F13F8D8FF3F13FE48B6FCB7128016C09039FE00 -7FE001F8EB1FF001E0130F49EB07F849EB03FCA290C7120116FE1500A37EA46C7E15016D -14FC121F6D1303000FEC07F86D130F6C6CEB1FF06DEB3FE03A03FF81FFC06C90B512806C -15006D5B011F13F8010713E001011380273A7CB830>I<127CB712FC16FEA416FC48C7EA -0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5A -A24AC7FCA25C5C13015CA213035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830 ->I<49B4FC011F13F0017F13FC90B57E0003ECFF804815C048010113E03A1FF8003FF049 -131FD83FC0EB07F8A24848EB03FC90C71201A56D1303003F15F86D13076C6CEB0FF06C6C -EB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C13FC011F13F0497F90B512FE4880 -2607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07F8491303007F15FC90C712014815 -FE481400A66C14016C15FC6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF01FFE0 -6C90B512C06C1580C6ECFE006D5B011F13F0010190C7FC273A7CB830>I<49B4FC010F13 -E0013F13F890B57E4880488048010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0F -F048481307A290C7EA03F85A4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D -133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC010F138190380060011400ED03F8 -A2150716F0150F000F15E0486C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC -90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0 -A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F -000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3FFCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA -03C0EA0FF0121F13F8123F13FCA3121FA2120F12031200120113F8120313F01207EA1FE0 -123FEA7FC0EAFF80EA7F00127E12380E3470A630>I<16F01503ED07F8151F157FEDFFF0 -14034A13C0021F138091383FFE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0 -485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F3800 -7FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7F -F8151F1507ED03F01500252F7BB230>I<007FB7FCA2B81280A36C16006C5DCBFCA7003F -B612FE4881B81280A36C1600A229157DA530>I<1278127EB4FC13C07FEA7FF813FEEA1F -FF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313E06D7F9038007FFC6E7E91380FFF80 -6E13C0020113F080ED3FF8151F153FEDFFF05C020713C04A138091383FFE004A5A903801 -FFF0495B010F13804990C7FCEB7FFC48485A4813E0000F5B4890C8FCEA7FFE13F8EAFFE0 -5B90C9FC127E1278252F7BB230>I<EB1FFE90B512E0000314F8000F14FE488048158026 -7FF80313C09038C0007F48C7121F16E0150FA3127E151F0018EC7FC0C812FF020313804A -13004A5AEC1FF84A5AEC7FC04A5A92C7FC495AA2495A5CA213075CA86D5A90C9FCA8EB01 -C0EB07F0A2497EA36D5AA2EB01C023397AB830>I<EC1FE0ECFFF8010313FE010F7F4914 -804914C090397FF03FE09038FF800F4890380007F0D803FC13033A07F801FBF89038F007 -FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE07903901FC03FE007FEBF801EA7E -03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FCA2ECF801D87F0114F8003FEB -FC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0EA0FE06E13803A07F007FE00 -9038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6DB512FC6D14F86D14E0010314 -C00100EBFE00EC1FF0273A7CB830>I<147F4A7EA2497FA4497F14F7A401077F14E3A301 -0F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049133F90B6FCA34881A39038 -FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56CB51280A46C496C13002939 -7DB830>I<007FB512F0B612FE6F7E82826C813A03F8001FF815076F7E1501A26F7EA615 -015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E -1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7 -FC29387EB730>I<91387F803C903903FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE0 -7F48EB801F3903FE000F484813075B48481303A2484813015B123F491300A2127F90C8FC -167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C14FCA26C6CEB03F86D13 -076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D1400010713FC6D13F09038 -007FC0273A7CB830>I<003FB512E04814FCB67E6F7E6C816C813A03F8007FF0ED1FF815 -0F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17C0A3163F1780A216 -7F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B38 -7FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FC -A6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<00 -3FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5153E157FA490B6FCA690 -38FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB730>I<02FF13F00103 -EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F4848133F4848131F49130F485A -491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C -6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C131FA2D803FE133F6C6C137F -ECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC293A7DB830>I<3B3FFF80 -0FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7EAFE00B290B6FCA6 -01F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E02D38 -7FB730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6FCB71280A46C1500 -213879B730>I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C496C1380D803F090 -3803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A141F5D4A5A4AC8FC5C -13F18101F37F13F790B57E14EFECC7F01483EC03F8140101FE7F496C7E5B157F497F8215 -1F82150F826F7EA26F7E1501821500D83FFF903803FFC0486D4813E0B56C5AA26C497E6C -496C13C02B387FB730>75 D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE -1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE0486C4913F0486C49 -13F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F01E3 -133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC1FC0 -A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D13E0 -2D387FB730>I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13C06C6E13800003 -913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C147EA2143E143FA2 -141FA21581A2140F15C1A2140715E1A2140315F1A21401A215F91400A3157DA3153FEA3F -FF481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE048B512FC000714 -FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F8481403B3 -A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C15 -00000114FCD8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903F800 -3FED0FFCED03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6 -FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<90383FFFE0 -48B512FC000714FF4815804815C04815E0EBF80001E0133F4848EB1FF049130F90C71207 -A44815F8481403B3A8147E14FE6CEBFF076C15F0EC7F87A2EC3FC7018013CF9038C01FFF -D83FE014E0EBF80F90B6FC6C15C06C15806C1500000114FCD8003F7FEB00016E7EA21680 -157F16C0153F16E0151F16F0150FED07E025467BB830>I<003FB57E4814F0B612FC15FF -6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B5A15 -3F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A -3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730> -I<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E484813 -7F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C -14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07 -F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B5128016 -0000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0B8FCA4 -3AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I< -3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600A36C -6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038 -007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0B54913E06E5AA24A7E6C486D13C0D8 -07F0903801FC00A26D130300035DA46C6C495AA46C6C495AA46D131F6D5CA3EC803F013F -5CA46D6C48C7FCA490380FE0FEA401075B14F1A301035BA314FB01015BA314FFA26D5BA4 -6E5A6E5A2B397EB730>I<D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C486D -13E0D81FC09038001FC0000F1680A76D143F00071600A7000390380F803E9039F01FC07E -EC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8A300005D01F913FCA2ECF07C -A201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D397F -B730>I<3A3FFF01FFF84801837F02C77FA202835B6C01015B3A01FC007F806D91C7FC00 -005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90 -C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001143F -49800003141F49800007140FD87FFEEB7FFFB590B5128080A25C6C486D130029387DB730 ->I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F8903803F8006D1307A26C6C49 -5AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA290380FE0FEA214F101075BA2 -903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FFF8497F497FA26D5B6D5B2B38 -7EB730>I<001FB612FC4815FE5AA490C7EA03FCED07F816F0150FED1FE016C0153FED7F -80003E1500C85A4A5A5D14034A5A5D140F4A5A5D143F4A5A92C7FC5C495A5C1303495A5C -130F495A5C133F495A91C8FC5B4848147C4914FE1203485A5B120F485A5B123F485A90B6 -FCB7FCA46C15FC27387CB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC1580A4 -6C140019476DBE30>I<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA26C7EA26C7EA2 -12017FA26C7EA26D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D7EA26E7EA26E -7EA26E7EA26E7EA26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0A2ED0FF0 -A2ED07F8A21503A2ED01F0150025477BBE30>I<007FB5FCB61280A47EC7123FB3B3B3A5 -007FB5FCB6FCA46C140019477DBE30>I<1307EB1FC0EB7FF0497E000313FE000FEBFF80 -003F14E0D87FFD13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F00010EB00401D0E -77B730>I<007FB612F0A2B712F8A36C15F0A225077B7D30>I<1338137CEA01FE12031207 -EA0FFC13F0EA1FE013C0EA3F8013005A127EA212FE5AA5EAFFC013E013F0127FA2123FA2 -EA1FE0EA07C00F1D70BE30>I<EB7FF80003B5FC4814C04880488048809038E01FFC9038 -C003FE14016E7E6C487F6CC77FC8123FA491B5FC130F137F48B6FC12075A48EB803F383F -F800EA7FE0138048C7FC5AA4157F7E6C6C13FFEBC003263FF01FEBFF8090B712C07E6C14 -EF000314876CD9FE01138026003FE0C8FC2A2A7BA830>I<EA3FFC487E12FFA2127F123F -1200AAEC03FE91381FFF80027F13E091B57E90B612FC82ECFE079138F001FF4A6C13804A -137F4AEB3FC091C7121F17E049140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB -7F806E13FFDAF00313009138FC0FFE91B55A5E495CD97E7F13C0D93C1F90C7FC90380003 -FC2C3980B730>I<ECFFE0010713FC011F7F017F7F90B612804815C048EB807F3907FC00 -3F485A485A49EB1F804848EB0F004990C7FC127F90C9FCA25A5AA87E7EA27F003FEC07C0 -6DEB0FE06C7E6D131F6C6C14C0D807FE133F9039FFC0FF806C90B5FCC615006D5B011F13 -F801075B01011380232A7AA830>I<913801FFE04A7F5CA28080EC0007AAEB03FE90381F -FF874913E790B6FC5A5A481303380FFC00D81FF0133F49131F485A150F4848130790C7FC -A25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06C -B712E06C16F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC01 -0713E0011F13F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0 -150F484814F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F0 -6DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEB -FE00010713F8010013C0252A7CA830>I<EDFF80020713E0021F13F05C4A13F891B5FC49 -1387903803FE079138FC03F0903907F800C04A1300A8003FB612C04815E0B7FCA36C15C0 -260007F0C7FCB3A9003FB512FE4880B71280A26C15006C5C25397DB830>I<D903FC13FF -90261FFF8713C04913DF90B712E05A5A2607FE07138F903AF801FE07C048486C6CC7FCA2 -497F001F8149133FA56D137F000F92C7FC6D5BA26C6C485AEBFE0790B55A5D485C15C001 -DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF6C15C04815F0488148813A3FE0001FFE -0180130148C8127F007E8100FE168048151FA56C153F007FED7F006D5C6C6C495A01F013 -076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7FC011F13FC010113C02B3E7DA730>I< -EA3FFC487E12FFA2127F123F1200AAEC01FE91380FFF80023F13E091B57E90B67EA29138 -FE07FCECF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FC -B500FE14FEA26C01FC14FC6C496C13F82F3880B730>I<14E0EB03F8A2497EA36D5AA2EB -00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C0 -23397AB830>I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990B512F04814F8 -A47EEB0003B3B3A5EC07F0A2123C007EEB0FE0B4131FEC3FC0147F90B512806C14005C6C -5B000F13F0000313C01D4E7CB830>I<EA7FF8487EA4127F1200AB0203B512804A14C017 -E0A217C06E14809139001FE0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A5A4A5A4A5A01 -FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E15076F7E6F7E -3B7FFFF81FFFE0B56C4813F017F8A217F06C496C13E02D387FB730>I<387FFFF8B57EA4 -7EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF -80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F8 -03FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C010713 -80322881A730>I<EC01FE3A3FFC0FFF80267FFE3F13E000FF90B57E90B67E7E6C9038FE -07FCC6EBF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FC -B500FE14FEA26C01FC14FC6C496C13F82F2880A730>I<49B4FC010F13E0013F13F8497F -90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303 -007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C -6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0 -010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90B612FC -6C816CEBFE07C69038F001FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F016 -07A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E -495C6E13C0021F90C7FCEC03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80A730> -I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49131F4848130F -491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C -133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7 -FCAD92B512F84A14FCA46E14F82E3C7DA730>I<ED07F83A3FFF803FFF486DB51280B512 -C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F809238000F004A90C7FC5C5C5C -A25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA730>I<90381FFC1E48B5129F00 -0714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC -6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2 -150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C02678 -0FFEC7FC222A79A830>I<EB0780497E131FA9003FB612E04815F0B7FCA36C15E026001F -C0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC1FF06DB512E06D14C016806D14 -009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC486C497E00FF14FFA2007F147F00 -3F143F00001400B3A41501A2150315076D130F903A7FC07FFFF891B612FC6D15FE7F6D49 -13FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3FFFC07FFF80486DB512C0B515E0 -A26C16C06C496C13803B01F80003F000A26D130700005DA26D130F017E5CA2017F131F6D -5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0 -A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F0 -6C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A3 -3A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA201 -1F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648 -C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC -147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE9038 -7F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C1148014E3A214C16C01801400 -29277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01FC0003 -F000A2000014076D5C137E150F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107 -137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F -92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC -6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90C7EA0FF8ED1FF0ED3FE0ED -7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A495A49 -5A495A495A4948133E4890C7127F485A485A485A485A485A48B7FCB8FCA46C15FE28277D -A630>I<ED3FF0913803FFF8140F5C147F16F09138FFF00092C7FC495A5CB3A21303495A -133F383FFFF0B55A5C91C8FC14C080003F7F38003FF813076D7E1301B3A2806D7E15F091 -387FFFF016F8141F8014039138003FF025477BBE30>I<127CA212FEB3B3B3AD127CA207 -476CBE30>I<EA7FE0EAFFFE6D7E8014F07EC66C7E13076D7E1301B3A2806D7E15E09138 -7FFFE06E13F8801407141F5C4A13E09138FFE00092C7FC495A5CB3A21303495A137F387F -FFF0B5FC14C05C49C8FCEA7FE025477BBE30>I<017C133848B4137C48EB80FE4813C148 -13C348EBEFFC397FEFFFF0D8FF8713E0010713C0486C1380D87C0113003838007C1F0C78 -B730>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ft cmr10 10.95 86 -/Ft 86 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907 -F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7 -FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11 -D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90 -387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C -497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003 -EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F -13FCA32E407EBF33>I<DA03FE49B4FC91273FFF801F13C0913BFE03E07F01F0903C03F0 -00F1FC0078D90FE0D97FF0131C49484948133E4948484913FF494848495A5B491500A248 -485C03016E5A0300153896C7FCAA197FBBFCA3D801FCC738FE00018485B3AC486C496CEC -FF80B5D8F87FD9FC3F13FEA347407EBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00AC -121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33 -D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013 -00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E -0018130C0038131C003013181C1C7DBE2D>I<14E0A4EB07FC90383FFF8090B512E03901 -F8E3F03903E0E0FCD807C0133CD80F807FD81F007F003E80003C1580007C140316C00078 -141F00F8143F157FA47EED3F806CEC0E0092C7FC127F138013C0EA3FF013FEEA1FFF6C13 -FC6C13FF6C14C06C806C6C13F8011F7F130301007FECE7FF14E102E01380157F153FED1F -C0A2003E140F127FD8FF801307A5130000FC158000F0140F1270007815005D6C141E153E -6C5C6C5C3907C0E1F03903F8EFE0C6B51280D93FFEC7FCEB0FF8EB00E0A422497BC32D> -36 D<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E4848 -6C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C0200 -EB03E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B4C5A -007E150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A01E0 -E001F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C07003 -1F49487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C4A5A -020702FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C494814 -7E010F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A49923801E0 -E0496FB45A0160043FC7FC41497BC34C>I<121EEA7F8012FF13C0A213E0A3127FEA1E60 -1200A413E013C0A312011380120313005A120E5A1218123812300B1C79BE19>39 -D<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485A -A2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F -120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB01C0EB00E014 -701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA2 -7FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A614C0130FA31480 -A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A -145A7BC323>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113 -80120313005A120E5A1218123812300B1C798919>44 D<B512FEA617067F961E>I<121E -EA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>I<ED0180ED03C01507A21680150FA2 -16005DA2151E153EA2153C157CA2157815F8A25D1401A25D1403A25D1407A25D140FA24A -C7FCA2141E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A25C130FA291C8 -FC5BA2131E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2 -121E123EA2123C127CA2127812F8A25A1260225B7BC32D>I<EB01FE90380FFFC090383F -03F090387C00F849137C48487F48487F4848EB0F80A2000F15C04848EB07E0A3003F15F0 -A290C712034815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB0FC0A26C -6CEB1F80000315006C6C133E6C6C5B017C5B90383F03F090380FFFC0D901FEC7FC263F7D -BC2D>I<EB01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8 -A31D3D78BC2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE00 -1E6D7E001C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0 -153FA216C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A49 -5A495A495A49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7 -FCA3243D7CBC2D>I<EB07FC90383FFF809038F80FE03901E003F839078001FCD80F007F -000E6D7E001E1580D81F80137F486C14C07FA27F5BA2121F6C5AC8138015FF1600A24A5A -A24A5A5DEC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E7E1680ED -7FC0A216E0153FA216F0A2120C123F487E487EA316E0A249137F6CC713C01278EDFF807E -6C4913006C495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC243F7CBC2D>I< -150E151E153EA2157EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01 -C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5A -B8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5 -FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8 -496C7E49137E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA4 -16E090C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C48 -5A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF8903803F03E90 -380FC00F90391F000780133E017EEB1FC049133F4848137F12035B12074848EB3F80ED1F -00001F91C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C01F09038B800FC -01B0137E13F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14E0A2121FED3FC0 -A26C6C1480A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB45A010F1380D903 -FCC7FC243F7CBC2D>I<1238123C123F90B612FCA316F85A16F016E00078C712010070EC -03C0ED078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25C -A2147C147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407B -BD2D>I<EB03FC90381FFF8090387C07E09038F001F83901E0007C48487F48487F48C7FC -ED0F80121E16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC133E6C6C5B9038 -FF80786C6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F801787F48486C7E -3903E01FFF48486C1380260F800313C048487E489038007FE0003E143F007E141F007CEC -0FF01507481403A31501A46C15E0007C1403A2007E15C06C14076CEC0F806DEB1F006C6C -133ED807F05B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D>I<EB03FCEB1F -FF90387E07C09038FC03F048486C7E48486C7E4848137C000F147E4848137F81003F1580 -5B007F15C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F120F6C6C13FF6D13 -DF000313013900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A41680157FD8 -0F801400487E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A260FC07FC7FC38 -03FFFE6C13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FC -B3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA -7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A312031300 -5A1206120E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE00 -7FB912E0BA12F0A26C18E03C167BA147>61 D<EB1FF890B5FC3903E01FC0390F0007F000 -1EEB03F848EB01FC4814FE140000FE14FF7E7FA46CC7FC123EC7EA01FEA2EC03FCEC07F8 -15F0EC0FC0EC1F80EC3F00143E5C147814F85C13015CA2495AA25CAB91C7FC90C8FCA8EB -0780EB1FE0A2497EA46D5AA2EB078020407BBF2B>63 D<15074B7EA34B7EA34B7EA34B7E -A34B7E15E7A2913801C7FC15C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7E -A34A6D7EA34A6D7EA349486D7E91B6FCA249819138800001A249C87EA24982010E157FA2 -011E82011C153FA2013C820138151FA2017882170F13FC00034C7ED80FFF4B7EB500F001 -0FB512F8A33D417DC044>65 D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE70 -7E701380EF7FC0EF3FE0A2EF1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF80 -4C1300EE03FCEE0FF8EE7FE091B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3F -E0EF1FF018F8170F18FC1707A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403 -138048486C90380FFE00B85A17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E -020F9038FF801E913A3FF007E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE494814 -0FD93FE0140749481403495A91C812014848150012034848167E5B000F173EA24848161E -A2123F5B180E127FA349160012FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007 -173C6D16386C6C1678000117706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D -6CEC1F00D903FE143E902600FF8013F891393FF007F0020FB512C0020391C7FC9138003F -F037427BBF42>I<B712FCEEFF8017E000019039C0001FF86C6C48EB03FEEE00FF717E71 -7EEF0FE084717E717E170184717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A2 -1980A218FF19004D5AA24D5A6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A -178004FCC8FC3C3E7DBD45>I<B912E0A300019038C000016C6C48EB001FEF0FF01703A2 -17011700A31870A418381638A41800A21678A216F81501150791B5FCA3EC800715011500 -1678A21638A2180EA3181C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48 -486CEB03FFB912E0A3373E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0 -170F1707A21703A31701A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC80 -07150115001678A21638A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C91 -2603FFFE131C021F9038FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948 -143DD91FE0141F4948140F4948140701FF15034890C8FC491501485A000716005B000F17 -7C5B001F173CA2485AA2181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE -00EF03FC123FA27F121FA26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907 -F8141ED903FEEC3C7C902600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC91 -38003FF03C427BBF47>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3 -A691B7FCA30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612 -F0A3C6EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713 -006E5A1401B3B3A6123FEA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A -6C495A6C495A2603E07EC7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA300 -0101E0C7000F138026007F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C -5A4C5A4CC8FC163E5E5E4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7 -FCEC878791388F03FE91389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2 -707E707EA2707F717E84173F717E717EA2717E848419802601FFE04A13C0B600C090B6FC -A3403E7DBD47>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35F -A25F5F5F4C5A160748486C133FB8FCA3313E7DBD39>I<B500C093B512C0A300016D4BEB -E000D8007F1880D977F0ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F15 -38A36E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA36E -6C5BA3037F5BA26F6C5AA36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA213 -F8486C6D5AD807FFEFFFE0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F880 -80D8007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA2 -6E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2 -EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F17 -0FA2170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807 -FFFE91391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E -7E49C86C7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F00 -3F18C0A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A3 -6C6C4B1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4A -C7FC6D6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE0 -3C427BBF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F -80EF3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3F -F091B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<ED7FE0913807FF -FE91391FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F49486E7E49486E -7E49C86C7E498248486F7E49150300038348486F7EA2000F834981001F1880A24848EE7F -C0A3007F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0A26C6CEEFF80A3 -000F18006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A6C6C48486C485A -017FD9800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD907F1EB03FE9026 -01FDC013F8903A007EE007E091271FF03FC013180207B5FC9139007FE1E0DB0001143883 -711378A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715AEF01F83D527BBF -47>I<B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2 -717EA284A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F091 -388001FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004190EA28218E005 -7F131E2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE09438003F803F40 -7DBD43>I<D907FC131890391FFF8038017FEBE0783901FC03F83A03F0007CF8D807C013 -3F4848130F001F140748C7FC003E1403007E1401A2007C140012FC1678A46C1538A27EA2 -6C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E001 -0714F0EB007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163FA2 -7EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF07F -803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF000 -7FE001018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0 -A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0C7 -0007130026007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F15036E -4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B51280 -020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C0180913800 -7F806CEF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E140101 -075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F1438 -A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A6E -130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE017F -B5D88007B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E14 -3F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F001076104 -037F6E0281140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0DA -7F80160EA24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014F8 -4C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA26E -5FA24B157F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007FB5 -D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C6D -6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BEDF8 -1E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFEED -71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E02386D -7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E0007 -6DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF800 -6C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D6D -1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E13 -016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA341 -3E7FBD44>I<003FB712F8A391C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EEDFF -80A2003C4A1300007C4A5A12784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FCA2 -4A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA249 -5A495A173C495AA24890C8FC485A1778485A484815F8A24848140116034848140F484814 -3FED01FFB8FCA32E3E7BBD38>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>I< -486C13C00003130101001380481303000EEB070048130E0018130C0038131C0030131800 -70133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133FA2 -003F131F01C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA4 -0E5B7FC319>I<EA0180120313005A120E5A12181238123012701260A312E05AA412CFEA -FFC013E0A3127FA2123F13C0EA0F000B1C7ABE19>96 D<EB0FF8EBFFFE3903F01F803907 -8007E0000F6D7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC -90381FF87FEB7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA300 -7F5BEC03BF3B3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0 -292A7DA82D>I<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FD -E001F09039FFC000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17 -F0A2160FA217E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039 -E0780FC09026C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8017C -131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9 -FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C -137890383F01F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA3150715031501 -B114FF010713E190381F80F990387E003D49131FD803F81307485A49130348481301121F -123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C49 -7ED8007C017913F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE90 -380FFFC090383F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15C0 -4848130FA2127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F -15C06C6C13036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC -232A7EA828>I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F811401 -137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<16 -7C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC06 -00000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903 -FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E0 -6C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E15 -7E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7E -A82D>I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F091 -38E001F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F -7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201 -B3AC487EB512F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC14 -7FEB7FFFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0 -381E07C0380FFF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B51280 -A392383FFC0016E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD90 -38FFDFC0EC9FE0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA282486C -14FEB539F07FFFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512F8 -A3153F7DBE1A>I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B78 -03F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91C7 -5B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I< -3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C07F0001 -138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF -010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15 -F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C -6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0 -010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A -07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0 -A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA -3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F -80F090397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A1501485A -A448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E13799038 -3F81F190380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E0 -00FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35B -B3A5487EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E13 -07003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F -6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F0 -7E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<13 -1CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912 -009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14 -FE00FF147FA3000714030003140100011400B3A51501A31503120015076DEB06FF017E01 -0E13806D4913FC90381FC078903807FFE00100903880FE002E297DA733>I<B539E00FFF -E0A32707FE000313006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC0 -07011F91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF0 -01005BA2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE -003FE00013C06C486D48EB3F806C4817006D010F141E00016F131C15076D163C00004A6C -1338A2017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE001 -7F5BEDE03F02F0140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14 -DE6D15FCED00076D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<B5 -39F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC -90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BEC -F1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC8048 -6C80000F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48 -EB01FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F13 -0EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2 -140EA2141E141C143C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA78 -0EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E49 -5A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90 -393FC00380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B4848137F -00FF495A90B6FCA221277EA628>I<BE12C0A25A0280985B>124 D -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fu cmbx12 20.736 13 -/Fu 13 118 df<BDFC1CFEF4FFC01DF81DFF1EC01EF08AC7003F49C9000F14FE09018075 -6C800A1F807680768076807680A27680A2777FA2208089A320C0A289A565A32080A35314 -00A29AB55AA2525C6764525C525C525C525C5249C7FC51B55A090714F0093F14C00807B6 -C8FC93BA12F81DC0651DFCF5FF801EF04CCA14FC0A3F13FF0A0F800A0314E076807614FC -777F777F2080897714C020E0A27714F0A220F88920FCA47714FEA96520FCA45314F8A265 -20F06520E05314C0659AB61280521500525C1C0F5214F899B65A09075DC05A9CC7FC1EFC -1EF01EC053C8FC1DE00AF8C9FC777679F58A>66 D<B800C051B8128071637163A37163A2 -7163C7003F57C8FC71F33FBFA203EF6DF37F3FA303E76E1AFEA203E36EF101FCA203E16E -F103F8A203E06EF107F0A3706DF10FE0A2706DF11FC0A2706DF13F80A2706DF17F00A370 -6E18FEA2706E4D5AA2706E4D5AA3706E4D5AA2716D4D5AA2716D4D5AA2716D4D5AA3716D -4DC7FCA2716E16FEA2716E4B5AA2716E4B5AA3716E4B5AA2726D4B5AA2726D4B5AA3726D -4B5AA2726D4BC8FCA2726E14FEA2726E495AA3726E495AA2726E495AA2736D495AA2736D -495AA3736D495AA2736D49C9FCA273EC80FEA2F481FC7314C1A273ECE3F8A273ECF7F0A2 -74EBFFE0A3745CA2745CA27491CAFCA2745BA3745BA2902603FFFE705BB800F897BA1280 -745BA2755AA3755A755AA97679F5B8>77 D<BC7E1BFF1CF01CFF1DC01DF81DFE777EC700 -3F91C8000715E0E0003F80090714FC090180756C7F7680768076807680A276808B888BA3 -7680A38CAA9DC8FCA3525CA267A2525C676467525C525C5291C9FC99B512FC515C090F5C -097F14C0080FB6CAFC94B912FC1DE09ACBFC1CF81CFE767E94C8003F14E0080780080114 -FC746C7F757F7580758075807580A275808A87A28A888AA78BA78BA779147E22FFA288A2 -8B765E22FE76802103766E14FCBA00C06E6E1307766EEB0FF876ED801F779138E07FF00B -1F91B512E00B0716C00B011680E3003FECFE00D1000714F8E4000F13E088787AF590>82 -D<92383FFFF80207B612E0027F15FC49B87E010717E0011F83499026F0007F13FC4948C7 -000F7F90B502036D7E486E6D806F6D80727F486E6E7F8486727FA28684A26C5C72806C5C -6D90C8FC6D5AEB0FF8EB03E090CAFCA70507B6FC041FB7FC0303B8FC157F0203B9FC021F -ECFE0391B612800103ECF800010F14C04991C7FC017F13FC90B512F04814C0485C4891C8 -FC485B5A485B5C5A5CA2B5FC5CA360A36E5DA26C5F6E5D187E6C6D846E4A48806C6D4A48 -14FC6C6ED90FF0ECFFFC6C02E090263FE07F14FE00019139FC03FFC06C91B6487E013F4B -487E010F4B1307010303F01301D9003F0280D9003F13FC020101F8CBFC57507ACE5E>97 -D<93383FFFF00307B612C0033F15F84AB712FE0207707E021F17E0027F8391B526FC001F -7F010302C001037F4991C7487F49495C495B4901F04A7F5B90B55A485CA2485C4891C8FC -A248715B5C48715B725B4A6F5B489438007FC0071FC7FC96C8FC5AA25CA3B5FCAF7E80A4 -7E80A27E806CF11F80F23FC06C6E167FA26C6EEEFF80816C606C6E17006D6D4B5A6D6D15 -076D6D4B5A6D6D6C4A5A6D02E0EC7FF06D02F849485A01009126FF801F5B6E91B6C7FC02 -1F5E020716F8020116E06E6C1580030702FCC8FCDB003F13804A507ACE56>99 -D<93387FFF80030FB512FC037FECFF804AB712E0020716F8021F16FE027FD9F8077F49B5 -D8C000804991C7003F13E04901FC020F7F49496E7F49498049496E7F49496E7F90B55A48 -727E92C914804884485B1BC048841BE0485BA27313F05AA25C5AA21BF885A2B5FCA391BA -FCA41BF002F8CCFCA67EA3807EA47E806CF103F0F207F86C7F1A0F6C6E17F06C191F6F17 -E06C6E163F6D6DEE7FC06D6D16FF6D6D4B13806D6D4B13006D6D6CEC0FFE6D02E0EC3FFC -6D02F8ECFFF86D9126FFC00F5B023F91B65A020F178002034CC7FC020016F8031F15E003 -0392C8FCDB000F13E04D507BCE58>101 D<EF7FFE040FB512C093B612F0030715FC031F -814B8192B5D8F01F13800203DA803F13C04A9026FC007F13E04A4990B5FC4A5B4A494814 -F04A13C091B51280A2491400A2495BA27114E05B4B6E13C0721380721300F007FC95C8FC -B3B912C0A8D8000749CAFCB3B3B3A7007FB712FCA844797AF83B>I<903801FFFCB6FCA8 -C67E131F7FB3AD95380FFFE095B512FE05036E7E050F15E0053F15F84D81932701FFF01F -7F4CD900077FDC07FC6D80DC0FF06D80DC1FC07F4C48824CC8FC047E6F7F5EEDFDF85E03 -FF707F5EA25EA25EA293C9FCA45DB3B3A6B8D8E003B81280A8617879F76C>104 -D<903801FFFCB6FCA8C67E131F7FB3B3B3B3B3ABB812C0A82A7879F735>108 -D<902601FFF891380FFFE0B692B512FE05036E7E050F15E0053F15F84D81932701FFF01F -7F4CD900077FDC07FC6D80C66CDA0FF06D80011FDA1FC07F6D4A48824CC8FC047E6F7F5E -EDF9F85E03FB707F5E15FF5EA25EA293C9FCA45DB3B3A6B8D8E003B81280A8614E79CD6C ->110 D<902601FFF8EB07FEB691383FFFC094B512F00403804C14FE4C8093261FFC3F13 -8093263FE07F13C0DC7F80B5FCC66C5D011FDAFE0114E06DEBF9FC16F815FB16F016E015 -FF16C07114C05E72138095381FFE0093C76C5AF001E095C8FCA25DA65DB3B3A2B812F8A8 -434E7ACD4F>114 D<912603FFFCEB0780027F9039FFE00FC00103B6EAF83F010FEDFEFF -013F92B5FC49EB000F2601FFF01300480180143F4890C8120F4848814848814981123F83 -485A187FA212FF6D163FA37F7F6DEE1F8002C092C7FC14F014FEECFFF06CECFF8016FEEE -FFE06C16FC6C16FF18C06C836C17F86C836C836C83013F17806D17C0010717E0010117F0 -EB003F020716F8EC001F030015FC1607EE007F051F13FE1707007E82B482836D167FA218 -3F7F181FA27F19FC7FA26D163F6D17F86D167F19F06D16FF6E4A13E002E04A13C06E4A13 -8002FE023F1300913AFFC003FFFE01E790B65A01C316F0018016C026FE003F92C7FC4801 -0714F80070D9007F90C8FC3F507ACE4C>I<DAFFFE933803FFF8B60303B6FCA8C66CEE00 -01011F717E6D84B3B3A862A497B5FCA261A2616D5F1ADF6F150F6DEF1F9F073F806D6EDA -7F1F13FF6D6ED901FEEDFF8070EB07FC023F01FEEB3FF86E90B612F06E16C00203168002 -00EDFE00031F14F80300028003C0C7FC614F79CD6C>117 D E -%EndDVIPSBitmapFont +%%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 +%! +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 +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end + +%%EndProcSet +%%BeginFont: CMTT12 +%!PS-AdobeFont-1.1: CMTT12 1.0 +%%CreationDate: 1991 Aug 20 16:45:46 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT12 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-1 -234 524 695}readonly def +/UniqueID 5000833 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E +C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E +3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B +426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D +D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161 +E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32 +6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5 +A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE +0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC +85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF +F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4 +C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC +12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D +048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8 +0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725 +741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB +9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE +306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371 +CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666 +1353CC1FC512D59DFF847ACCD3D295C5D09DFE2A27B87A0F54938CC908FC87F8 +A08FF8F94A3051855B401F349F5CBC1DAD02C3CBE583E69FBD18FC747D2730B9 +A62F25952755ECC04C1852CB5CA505043B428E2BF1D407A26E0AC0C85E0DEB4C +425D14F1A1BA5972EC78AF68FFDB2425A9F5ED10220B1716A83D53D5958094ED +3D2CD66F2A070515F737516108CB2B0205255E9BA568C2A847679FCE1B1AAC31 +128359CED2C77D35333CE94AB2B05797C43EA28810F314D3283555D399E30FEC +C1F113B94484B6CFCC0988EA652BD5E0F61983225CE3A1CC1FA80F13DD945516 +C84962DC76A254C62CCBDB47B6CBE6DD237E38177D216AB3F9BBF876C4775680 +A4F8CE4DB65064C59D540E36EDCF9C3AD79FFCFA244A6FB20D047BB4774E6316 +69F7D47D459A56A68B2F45417DA9C04CF6F370D13E2292908671929511BAC37F +B8F709AC597A2B80340B60584817C685319CE7CD7FB243F5D9F9848D4B45CC4D +22CE6FEDDC2316EC3199EEEF12CA0263ED6122153C444612F0612C338981E889 +ECB0006CFA33076F02EA838E03E551785BFD414BB360B19A0CFCEA852C12F6A7 +C36E68E2121B416EB29CC55D87804D6E79B876C7A0BEA416FE1FCC727D00E341 +47F2B3A20534E6C16D81C0CAA970639C0D690DF2383FA7D6693E1863F2BFA94D +D7A0B91D6E2A5770D6997971C227B38D3AB79D62CFA3BB7E18E5857FDE0271DC +8D0467EB8A60EF3A0EBD77730AD8F4D7AE248C103CCEFC17C717DDFCDE9ACE1C +1BBBF78434C9F66C455D1A02859960717C61B0FE911A0FEC12B0783F944F9B1C +B7BE3D1B67108D79A2C5C578B97B870F5BB646CFCECB27885DDAF5342783ED3D +84463FF40B432FCDCEDAC7827FA0C1F6E26805C50EE6448BE598BA51324A6F5E +493F035C131B7D9DB57EF720FE2E5FE1C532C51A0905EAFFE463BF7E47202808 +DFB0934AB9B27C12D8BB566BCF4D89709D282CDA9607E25DBC140F61671B1926 +0CBE74FBB99D87802E74A250E87029AA28E98B3FA3DFEFAD4723DE5961E9AF3C +B5A35E3BED0B97894CF8E44176570DDCD6EDF06CB66F0CDCBE75F77E14C90F89 +BA830760415ECCE0DD1A1B2191891182275904FA1B587DE149829C711CB58ACA +33843E14B42B9C120C917D57DD8EE4F0ECC257767B6AC6EB80E563F84101AE08 +829ABC0A055A4D33AB19281A0345AEE764A7D135BCAB8735A051D8A7892B4702 +E9917E2CB149C24C721C1D12731A5F8412524CED7E850602D8BD05F7BEB64F46 +472A600F50E758FD22A8126A913C001473CBC84165A4B46B25E00FB2348F3896 +20C8886A5B08704C319924C1749F33A3096406A27FDADC6F17807103DA04D354 +FEF400100881609A42E8572819B845B8A8B7FCF2CCCA75A1CB25BBBF3E2B1C45 +FC4BDEC03311D6CCF78669C53432D786530039B36A8037A95A231F17E98359E6 +F0E892CAEB646877F4C4FFBCCB5C5A8143FF00B90F01A62D0BE68D593E97A2CF +2EC3C1D389C2474878A7E7BAF4C97C2733F958D6CD02F9EF880158455958A15A +C2A4ED22526838EC3530C7EC5654204444A28529BF68ADCF93E3DA72ABD50E46 +3499D9A9A061D59C0D35F1FA5C5EA5CB93500268FE96B416F66EF179E184D595 +14DED98C95A8EEF2D172F8F59AC529A392838572C0E48018F8C9D6E6644AEA2D +60C68F8B4BE2420B171750C96F8398C99DFB709379085C901EE6DA44DC4F671D +10172309F8E7E7E8D9F5D4A6EBCFE0C28BDD4D6DAA0C103AA0BB2F2D52217302 +B580D26E9A89AB56927E729AFB576FDE9877B16A2483B67D3917729597707B08 +C183A0DE48462D2E16BA17F8BACB18BB9B15434551FD9F0D9F6142F4A668F631 +8BE9288B53AAF5755A28DAA6D71D17062D29D19A9EB299814755C4C6E5D03B64 +CE8ECD65C961AB35E468C36E087857A9315D362A1D3655A41D249C32C459760E +A66FD627FCC6745F9575782B47F362A33C418F10C16E0DFB67A151E107B5109F +4F58565797D5BA3E4B0A45978FDFA804C452F708A81314B36D5F448A836C08EB +A2FF2DE947BD3779658BEA382C00DE63BF2AC04DC2DED83B8DFC1263E7819446 +244FBF5CFD4581952D515909B617C205A54AB0B40CA7ADE8DF11B60C4F14802A +1398444E83A91834D2BF6E9525E6F9BBB4757EC393751695D626926D4240CA7D +501664845B89C7E6BE94E3BE8D67531C5528465CCF393A383238EE573E2A452A +97ECE639797A8B18FE620BE63784BAAD630E0F534E3715408A0AAABDB0767EE9 +92E8CC835ADACCE79B38AF6C21DA95F5B5EB17AD07892B6DE3598FE66FDB07F6 + +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR9 +%!PS-AdobeFont-1.1: CMR9 1.0 +%%CreationDate: 1991 Aug 20 16:39:59 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR9 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-39 -250 1036 750}readonly def +/UniqueID 5000792 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835 +3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203 +046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E +C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A +A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2 +A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D +731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B +09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1 +49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B +5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B +54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C +C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F +11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4 +48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F +25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52 +24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259 +21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D +2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815 +26141589B9DB4C849B9628F781E6449B19640A9FFDA1F601120006E44A860188 +B311425E422E51E61638D13C3E73A5735AE1A5302E290B24B4D0366C53E460A0 +BA0B093E70BF9E5E438CCC0219974F12FCEBD742D9364CBA02229EF59D938ECA +18902C7CBE1265FA0597BA67B0B05E116AABCCA0FA6817F8A8803F61D6842718 +B0EAB943575322BB38B86B51E9DA2F247A0FFECC8E3E327AFABBF5F6966E9FDC +5FFB9A3075CFAFA8A119019DD243BB1B0B8A0756A96C894D90000AEE0597A54E +BBBD4A2077FD9F9A8A17FCB91AA6C68762AA23B99D5C87C62323DED943EB85E0 +C597B8C67A6FFDC8E849A807F703C8A92809313CB8871143AA11815A1259CCEB +C17B124C67F8678BBED3A00A9A7E9BB5699E81CEEA18B0BC1EF3B49E3DBA1CFB +B0286E92685F5D9EC12419A6E8997F34E6E29B9E66119430D82509B8AE4BA7F9 +B3137FA0E5D92948D0E0E8432A58A55D534CDD1339B20990B58DF13396FFFB01 +818DAEC0E7777059CE15D6BE8B313EAB3BC5CC04DA2F41775419FDE3BBDBF4D1 +4E6F1FEA0F3A746DD5A1DA447821E12597143EAF04D221FED9408A3DFB5F6D18 +4B9D8BCF5F947D893C988C13BBD1C45AD5F68E24C0D401E2FA8C0B911A179DB1 +CE8E847144CF6363B241A3195414FFED9617F6ABAE1C9A7D1F5C385A9138DD0B +EF2CF3A005050C9B0264DF4F824602CFA58FBF83F6B26A7972C2BE206C34F5AE +189FC968BEBA2E1B0EEBB86652A4AE7F86B93DA4F3CA93BD5C73E842EA96B3D5 +A114D45D983BB890CC19F9944DF4741761C568141A87757C170595357A3A0546 +B09CD7394A5F8A7E3E7661FBB04435ECDDB1BF4C5EC2A61A78F6E8F024D008BC +0A32FEEBC3DC0E9D3E572A2ADA2A0CA043C1C40B09C2954BFAC36030EE3CA9AA +D49571EB8D392ED4ECB090477974F4E7D898438FB6312873D925686F05E5BDB6 +D2274540F20C5B0409ABD35FC4C90071BBF121C656EE78D55B5F7D1606A958F7 +CF1F81E631771333211F9286378ADD6525D5E4548A547DFDE2900D63EAB5DFAA +5ADCEB72A14EEFB53BF0B93C531211CCE2CB1B52FA387A716E79ED9ACBD9A3C2 +DEBE7744DB6DA31D29E30998B42456D6FE15B3500ED0F003C985C5D4A38D55FD +A70B015AEAEEBA889304E3DBAE87BF8BD28770B4014F4DBD5AE199D8B9536E70 +FCD38C0B0E6C32C17218E0D86C0CCFB67CBF635D0A51BFA2CEE5A371D70DF4A0 +8359DC9C79122FB837299EA0C1EC7FBA0B3378CECCA1187804B48E4565AEE1AC +E4162304465ED336C1A47C7A0ED44CD9F7F8EB851DE25A1EC6A536BC1D908279 +2637F66B9B11FBDE78D8FE275433106E69CE8693A395D59D20B0980E6D965B3B +A29E9867D60010A45B94436D947C87385CB59113B1493550FD02FAE717AFBBE1 +F630D61011E4D76DD3A9F57CBEC6DBF1896325FAE389CFF97B303CCA999E20E4 +57A7030758227017F51468FBF5AF4906D4403E23FFA829D3A9B11E58E1E2591B +24B467F1441B517ACD03F03D18E6A99CFECD54B9F91814337C3518D48B3BFE91 +CF21D7D61B0EFFA25EA0B6B1E9F1A1518996178E619F9465E6E969F44ADB60BA +42565866C9AB7DD3F805A14900013294585A7C8B8B0DE2BE4A3634F61BA335E0 +B82FB93C54D5FCEA68733C71D369D9FA4F3F7F1FB797441CCD5004FC4ACA1D5B +C02E4F4123FFB4CC2D8951836A984875CE041FDC0ACD8B2A8E238C9738E39DCB +1D6015147E6EAD26DEA8163272090B5F9866F5BDB356CA1D62EA8A0B60493435 +CAE557FBB2FAACC68D5F8A4FDCEAA0E2C82F167DC8B463E966467A741223D937 +BF647469DEF8432DC5AA1E0D2D28CC0F1EB27501367FCB0DD9920F547A48E2E8 +773C1D6B13A50654D4B4E463375D58762FE46F7B4AA1395DBE36DB9A39A4CAEB +B27071F27172D33B57A632634F738504312DD9D7470D4F6CCAAC1A0D3E04E8BF +6C951AEA1E54089A07423EC1090A1339A2AF21862A2AC993E599C39DEBD6CB3D +FEA4787D129BA9F71899248B4CCB37B30EA6FF86F969A527F56C8A2BF2C72EDE +C49A90723DEFCEA55047597AF887DDC49E2EF8CB794A1C1591C2E951063F5B0D +E93CF4AD7D0769FADC79886CC7F25ECFF5B77C47E9204987D7AF6B13A8998BFA +E5006923F3C61A3CCF6BFFB5DA63627F17BC2869DEFC98C67DF60424F8F8F585 +5DB4CCBBA16795C8D8DEF245BF954787F097B473AA571CD7A3607FB4DB277BCC +DEDAEF8825A5E040E0EBC36179D3D673B9008BD0131C4529A93C2AF79BE99F70 +E78D9D5FA0FFF06B013B8AF4BB5E328055AF9635F2AE7D6F741C043706EC7EE2 +4E3033ED8BF2A0E2849A1F594E114A00E04E36FF810E312C3414566C3479E748 +6E6DB35321874BEE56B562E1A82FE9A5EB9945A7D05170AB85D1FE58274C85B0 +B9A50E491AB43863B115266242D2AF357BF1ABA348D83CF48C803601D413630A +94EA81BF6838D64D384590AD54926109651056AB83EE8BEAF15E010646EE31D0 +DD32A0CD9435F33FE9C3C308E2412B65DD2B6EE05686EFE2D052A6AE449FB338 +6831AE4E0BEF3ACF3F3655DB8238EC9F0B1B543865D2581145CF98562E69C542 +EF2857167B8F116EF2570487BA57AE6C05583763B24341BF2CDF983AD7CEAA4C +6837582B40A6508ED64BF5917AF1CB8E9F795B740386AECF52EA094D3BADA159 +BACC1D8E3A6DB913E1203010BCE8F75F1EBB4F5A0CCF35E82497E109F115A864 +7DFF57DD7212BCB0BAE1787203E88C9EBD9208D905A4F7F56FFAB24DFDC6053B +C460BEFF9FB9D0E145588FE8143BB3E6CD2072532BB03E8293C47EC2F740C602 +AFBE8AA8C670A2835F55AB63D0E18C4C338767A86E9353CBBEECE199D664E84E +1EE4C5291D4B58C03463743EF5C59FA9F879423C4E1430E6FCCAADD89C05F8CE +8BD78AA57F70571E0B083CACB12C8E89728A542EB58E531E8DFF8164C86CCC57 +5ACDE9E9575B2028EE1F93C2B416123D2C2EFD2FA9DDF1857018C6A978CAD17D +D95D92D1E564814F02729248EBCA0F69BBD35A6EEC46811BF5478796CF492A6A +796A013DE9844ACA7377AAC0F00331D9C7D8D4184E128D61CEA5E68388FC68A0 +AED5DC264E973C0BA6EE0F6F7C540B563120D3DBDFE06866E9820C64E00A861E +BB208B22A1DB195CC5B29D80DD65911233BF68899C8739FBC44AE8B8A4A7B08A +60621FBED6418BC7DECDFD9325D9ACD9CE9A787A467CF44D0EFFCD8E89E30EA5 +0ECFC159C2AA45841FD5170B9933A9CAA862B7A4A293FA59625DBA668EE1FD8A +17AC512DDC9D30B8A3215F2577E2063AE3F622801CA14FDDD0C2F0087E5DA873 +F9EEB0D23DFBE8B0117C90EBB86983ACEE937810BF998B5B60AAF854DFFC3B38 +19B4C00F221BEB5CD126A01A20BFC333C3176176DBC3483F26297306BA56E155 +404DA68C2569732B15B74201CEEAA696E4C949A890B4C4AA3E931F8EE9A7FFB9 +44789CABC1DA86C54D43F1D2ADEBEDD4D9B764459352EAA4058A0DF5E925DE6B +5C4449E06686AE847A72B3DB0750C848C0F21A15E0C282DE6B989552A3755A97 +E6D8BA6382D29CA47901A8F65867C4BCEEA35D75BB5CAD2930627A8462605DD2 +2825298D0AD47F81A7A12BD1A9DD293655FCA634D57F5259C98CE71005BCA2D7 +C4B0CDFA9440EE4122A2CD6AA1F482838E0FB787EEBB5242AD1DA8C4C5E2829F +6567717A520AD64AC38AA586BB7432E9E567A9BB39E6018BA4ACBD172821E553 +9664C8BDDA39FDA69B47A17807293C4E1897ED1C608EE5C12DDE0B415BAC7FD6 +067BFE7C4BFC199A125FF68CC186372B9A212567DEB70985EE7667E0BB46E30E +DA0D988D18A9E71133FB8130A5A11812A01C7D88C79A7AACF2D236EB9CFF413E +F4F388671797C31599CE79169EDE7716C0B9DBF61892ED3A1CC9684FE3068F3E +BE886A7B1A0D3E0C357858E209649561CD211B91264675E1978A7ACE2DCBDC29 +74118BE4F2B7C30558C0F3746F1C9E6A20931EF3C768009BB77B0CD9847A4281 +EB754372DE304734457C102611ED20D4822F118D5BEA9661A8A4A8E0CC549489 +84D79E5C3AAF4FF29E81E2BCB8DC125109CE37BA6F7EA0D078B8AE8FF3695243 +1BB75054BF37D6209DC4E31D971E876B1799B3ADC4D2B636EF0C7FC11614231B +5BBD3A372EE95327AE7F423065E42C16D2B2EDF92A6118C40D4D2F2C5B683B25 +194F940AB871807A013B8F47700DC4DC2E935776CF4DD8B2C138432BF1331B1E +80B9D9ACC3897B41682315D62963AECAD855D3A4A7A2011BBA3DAAB75F4031DE +F43A9628A073C49C0BF50340D5F239C3D1BC5276FD36C73A46B4A79C619F30E3 +73F3D58EBAC5FE2A4A22C362B8F9ADEEB3CCD0D31166178D241A24BCC61B2442 +23BFE2CA3E8FBA1B1FF660DE333184734E0D00BE164FBA03CFDDC13D65D29789 +27D3B2EAE0BB3DF0038C17A38FDF8CDE17E812DDBBA20F846767A178595DC63B +894C0A1FC610386087249495B08FA611EFD4E40AEDB0C8A92599993398EDA09A +62A56FD9FF0668FBE37294BEB2CF44785A8F1AA3FC65EF86E33D41619DBEA1C2 +25977D7C98974FA2CF8F552D55DA8EA87575774CC6CB3EDE9F6F0DAC189431B9 +58323A4CE3668D79D8B163BF08E4E85B9A4D93E534EBAD4039F0FBB3A43A17A1 +C9898A1C75CC569784074F20ABE85231DFD859D712C181A106C86AF21ACDBB25 +D4DE1A3982C7AEC8B93B596C49797D30FEE9A3A6195BCCEDB952DE695675FC30 +639FC6027BCA9A6A0EC6D01B0150BD0B57988DA1DE10AC902B1F29E7E29A6BBA +7B18C607819DDC53646FDCFDDE54A496775CC46DB45BED9FA297FF79B870F99E +0266FE50ADB32CC6D7E590D99C0DDFF0F1CC104A8BF44C47B31A56441C83F443 +9BC6200E5F0FBADD5846EC7C8F1DF1DEAFD7F4AADAC9C2540B4EEB98AAED1180 +0E632A23D9B53A6EAE41D5EA9C51EA04EE49458CBB0F496F84EB4CEBE0349FE0 +9CF81EF8CD856E92EAC893FEC03985B1082176581791FD5E89EFD6400729F36F +8A7D873C658FAAF4EEF2865133020E49244CF4FD8CAFBEC08794C0027DFCE196 +E51C62BF45A599545814BC448A01C475A663A4497FC420232FEAFC83CA9A273B +99BD564032CFE2E4CDE6E5170D30D8CCC00EB65AAF766896E3C81157EA379722 +8953EE3B001DA3929AB84466079BD1647FF2C1FA077AB9EF5F50AC908CF56F1D +EB6578F87451C63AF8FCFBABC67537ED44F2E84FF1C26B376441EB0330DD16DE +A7B23A4BF434754044B8C067FA64274732235F6AE9D36019D21C3AE156026AB2 +34FCF01844E0125CE72F305ADACFFB9DAB8DB3EA160925A7883CFD31957ACB1F +D9E925B6FE72AFEB962E671622195A84BAF7008884DC6D2F76726DDEE0A926A1 +E03839C8FD709CD67EDE6D958A2625B53F1281D3246989BE1E91A63E481CE8B0 +D4E017B8572DC6F4DEDB07AA1308CD43B21805B776274C1CDE2283704C999AE0 +E992801118AE7FF2A9B38A0A56668651A008194011A06E83B215AEDFA044ECA8 +6E090F90FD605AA6FE7DA41B5A8F77EC688D3F427558ACDEF2775317C617DCBD +A0382C9F8DE1D76A9E97273014FA37F4FBDB658528358C95E67245670B399EBD +14ED9348BBFE10232236D0DE2FFC241A0D5DD47E189586117A4931235EDE89F0 +CE39F4311120E517EAC1791D19B53C60FAB31AE7DF52324E867EEA2FF7F57EA9 +52B9B3A92273B6C430DAF4EC4E66FDCA57AE283EE146CD7584EC6E3E15DBDC67 +3DF6FD613AFD83223B2C82B9550662C2717338DF7419C626532C2C727C7EC9C4 +67AC4899CD0B34869C951468CC73053EC8EAAEBC043D7344F7E1151FDA9CDB78 +26962B6F8EC149A06F4514233FCC29F59AE870CABE8EEC89BFB8A4FC4C048A15 +10E85357D4D77464BF998A5548D594DC1C0E170736E3FDB4837CAC26D3F57534 +D7C7176BDF7DD76AC35CA91FE0B8C0FBA17C3FB4DFB9A0BC6BFAF0B6D2A9803C +43024BC30BE59525EFEE1D61FEE9F4939025FF68A6F213A7468503D91CA29DA1 +DA7F23C07212E6C7E47AFF9003392054EF6ADFBD4D4B5230BAB2F8E365A13A8F +2812EEB21E62D7784338BB44CDF1160EA74CF9F226ED1837719F4669632BE163 +36365F8D5725D144CE335003A7E91F625FAAFC40C6191F683F33525F007CE77A +9ED0F975C38F42A59D53290BB8A9D065FF4FE8A37E87AE2F1A1C05CDD99378FD +C3A3323AE26EC31EDF8F66DF7C3E22659437CBAC1BDC32363D9B0CF97C9856D2 +C02A27518CD2156A5A86429BB103FFFA444BCB9F3D6AD1A67AD15CDD2653E787 +ED1FDF94B3AA7B3B2C8E42E1D2F2D5DD5D5B8AA2B05407FF0462781DDB6C8B7D +C29E8C07CAC763DA2681F19110166FC4A3F0F48F83FA1D8F903A7CD9E8942AE7 +44F608002B75C61C04D01897382C8C61985614170F4603F456FF710E81AB606D +E1445B1F229788CDEC02FBA2ED5ED63EA09CA3CACD348123264D2E42570406CF +01B0D26B6C8E1F61E13D7AB33DACCD73243A64361ABD00EC00939D3E2024E524 +ADC20AF175E99971601F65F0069E2F93EDE2A4B0FCA92FF2DDF5F62D8A366CAE +988421FD7C8CF5CDE44A8A64872B547ED08A5DC14B64612E2B531C5DC438AD42 +B01DAAA15DD042A061BA0E0C2A15AF7B4F675C614BECA18A9DB7AF3885A2ECEE +E73590646DCF1C0E637B8D41C677C0416C08837C256263D1E59D7F77959E8C4C +5E35D6825C95DCC0BC3873B62C2DB0C1132A2DA3BBFD0B79CA3F2165EC0753C5 +5C5D8B6F9E5D0D09EB8633CA00FCAFE780FE9FE75A3D43EB9346976473E884CD +6906C68AF30D9F7D3CFA4D02083B582460AC0D6065202ED76B2985CA2B3BE3F4 +7122B5E5964AA5203919E209644630FD4D0CEB6E609375D50D05C9233AB1A0D5 +7807B462671DFF0BB1087126F1964A519AB79C62AB8FB64A98688EC2B2202AB0 +448E7BCC1B797F431B49456B62D6DD7E013DB720DE07CAD495B7B5B4F97CB0CD +CEDBBF1152A9DC207B25E5A3AFCC4C586CAB571F9B73A0E6A4D81EBEBC93CED5 +95EE5DD0F42EB0B536CEFFCA70C4A44BD512DAC07B37A88A54519884A3E0BC69 +0B460002AF91FE2F0D5272129E033824C228701F587B2AA2022F4F011D5F45F5 +75EFF578F1CC9EA572A5C894D4FDB7214D48DBF2FAEF95BD3B098CEE59F264ED +AE5E3AF48E4E389F15E73614E959EE0E266A5C92C75011544F16A83A071FDE77 +153933C67D83A7EDE8AFC050FBA5D8FFDF7335EB3DA6DD40AFC6D8314EC3E8DD +5B2328E75DE1DB002FAD6AD832ADE67A95EFC21A9D191C8A3AE874E2741E6737 +B1EA832C2DC88FEBF689B579DF104892907017C54BC7FF5133A101868D714DD0 +B47FEA6399C608D6CFF631FBCCDC41840339B2E1248AA8A5C06A2068CDFFF253 +3014629558FF935F5409DFDA332004A9AE93E06F840C452DBA0CECD628E58267 +F9167CE246A64FC554425FC08472D349CD92310CF2221162488712A1EC75EE3C +BD19666DFC3BF19054D8EE6B81C994FA38DF0F13867D5CFD1819908B16F43738 +7293F7E6454499B0098DE9E3D6990F95537861C3765B36B570BBDC7F5E7D3C66 +7DC5D30748BBD089B1A9B234D62263F6C2C5B643A494B2274C95062F9505A680 +64E1FF9189F382EBFFCA2A29F746808CB1513A08B9EC1BBA3E895F569723BEEC +3AA02ED3EB290C185297507BC8A57B8FF2418532B23762C95B8A56373B1DF89B +590890ECEBF1B6FD24F037A80776835A576A0C9A90F1EFAD1350CF92C7DA91C3 +FAA0077788E53FD9AE446BCC656F15BCBC0D956DA5F45BE7FD76CFE6FC542378 +B4A439B042E74C8E15B051D4DDF09BD1E967AC20D855A3DCDFBE74D720573BF7 +F9A9A98681B3AA5B0D9D17B2B9E43D6F09CA1B8510A3AAD2D66483FF0E863C2A +ECA9EB7010CEA7A431CEBCA82A0FA12655A189D4CE5148D6D6E7102361365675 +5D24DA00F593DFD8F6C1CA0F19E675D71C75D3B48697DBE695EB99DCEA180530 +92C7ABF8BD4BA4E0A961C6C439F3FA2F7E722090F98CDBD45E61199A25A4778E +C22B843A04CA84580DBDC711E334A00780F63549B32A467ECF4E23E87819F25E +8F5781DF6B383F5FBB93FCC882DA7AE7201811A40D958A405812274759EB579F +E93A5D56AEE7E3D3361D3C95D3E8DEEEFC89FF0AF06BB2908E7B7E0085DD42FE +7581A65CB53A4F5AE7DFF2EBEC1F856963B4A4680D9E44270B6F65FC1D68349B +2514E355815C5E1AE4DB25C85949D14428F74D79C097BA31E65BB3EAD1C9C08A +0871B8B28DE6D7FCE097610C592952F2E80AA6B52811198E98EDFE8E044CD284 +1BEBF2F8C2C458D7F1B38BE0C884DECFCD8B02EFD7C83372BDDC3456F54379FE +73937349562D8778A291F8BFB45EB38F3E2A5595F7CAD8307B1200EEFD876DBD +BCB48863ED0DCC32B0D84DF794810AE682FE485B9B9E51151DD2BD4458E5C16D +C4ECD52B954F50B327611FB86F226B5C53C141108758B924BED4BA1934020BB6 +FF33F71AB77797C7A7699A5B08BE46CE3EE3389E8EF235100F2135855A70D28B +0BA408A2C28C9D8ECED4548D9E43923E45C489A001BF71030D5F9BA0BDCD4D9D +A090C8706CE43BCE05DF4CCD2B726042B65B52D0CB1A5FE71CDD8212FA710E59 +A3E47FDF4B9CA1AD7302922F76C19C5AF4EFF3A6E4BD5E870FEDACE6B62FB2D5 +2EE76DF4F06A3120FE7023187A7B169F0A67E461917B69E2E13E8B76802A0E2A +DD5FA5721A51720422D549F8F1ED065A412AF7333DBE243FED9EE7F028280DF0 +942C261D1DCE952000DA6F45A7DC9B28B357A06558D9F13848184E1C1C9D70B3 +EA7C4929AEFA327ABEAA649176BB634F462D71A141AC05211F20D12A288CCA82 +BBB8D3670FA38EBC170EE5BBE15C0EDA733B0741A590C7827A9E95EA725F3A18 +667CF5DDD40377D47CEEBF414DD01C84FB3D6218B7F09F63222EBB689CB16BEF +23691A379CC3DC5F25EBCAD812A784ADAE27C1B0996A921BBC35A267887AB668 +271C76B134225D66352754E6D1108A67DEF1F6E91C1C18A231EB2C571D091AC6 +7256FF70AFFEBB18F35C10ED7198E4E9FFE19669742BD040C85F5CF6A5A1792F +E910B07549D60BF4C6BAFE994FEF823424B4D6A435230CFE62473AC4363D5135 +210232C0F65669CF3E175A3C15EC9C8B8D4CB096C7DB979ADC7B111CF9DC995D +D7629CD94609CE60ACA31E679DA1CBE7F794FC8FB5BD1C0418717356080E3833 +FD627F7F7BF89C64DCFD462E2B7ACB9A724F9D2AA2528B9F207A4CF74A05EEAE +595ECEE7965D42ABD654F115F78EF26F9ED9A94BB4B506B20A3435D20BB02B38 +E4ABA7D9AADAB6C5519CA42483378FDEB0F7DC375D8CCB308AD7990C1A3A3AAB +6E6941516FCEA0F1350EB11E1DB0B51BB8F00B571FFADB726F21B67E7B29A7CB +E6D38CB4C1CCFE95A06310405FAF798F92C82DEB739394731FAC8481D63EBBE3 +633CB294F60FA468A31D5BA0B9A8D0DC085DCB39E8CD72A9CA6161985CB4A019 +D9A9E7A10328B028D852DBAE7F9B82EA7E5C98CD16E7C46C5F94959BCC80F8D6 +9889F36B502FEC34D118FD9AEA1B0BAAE0CA2F78F65C87B4776AA32D4294DFB0 +CF82A8C6B55A74C53C6D34C37E64C10CB3222F6CD7C6A5C8FE5F30BCDAA0F9E6 +6FC2DDB07A63AE6F2CA4882D0D586FBA00CFA94696EE03DDAF6E77AEBB2025E0 +1914DDE86AE19E4519363397C67558C126AD2DFFD73DE2EC90AA37205DCE393B +78E59B2A027667EBCC3881716A3479F65AC9E989AF7142C8F1984C423A52BC7E +BE657159C073A443F7BEEE4824DD61755FF91498B49F965021367A7D40D0B2CC +D65A3274C0B27F507480A8FF3E2688F9265400F03314E85B12DF47C8D74EDB85 +AA0EEAB58BCB40BC724630FD23F51FA37E74502E75D125C5E0CA1DC96A1C0ACA +CB2BB037A59815B4F44DB0C11DE01C23A2670C4E2A3F7D485C407E4F3829C35F +14CDC22715001C4AC06F50B73AC5B1836B6D5C0BDE46E327A65D8F0F761F3771 +F77096751B5F016AA26F866DE68A227E946E032AAE0EFB3DCF856D69ECD2DB30 +396110DD83C76821E2F0B824B3C9486373DAB394DC3E7030EA151CF3A3943DD4 +0C46FADDAC2B500B5E8305056FD9D21B65D0C550C21282B01E891CB9C2060EA8 +6A8C42DEC32AE007F9C1C4AF702BA660C3D4A4DC8471B981B262C4DAB4EFC2A8 +0B7BCD86B92C9EF56B4012DE355A67BF347DBBF5381D6D1921EE083A24FBFA58 +EB1380FB34D6AB0B05F6607CF92F4517459F733A7AA088FD65F1DD661D779CB8 +F7A2C8B58C8569330296D9F3A987CD2C383F261DAD558800AA0739AA0419BB0C +7CF3140D6EF1FE7F677E1FF938F82602C05197198DE46A9CE5B5F9817CB0010F +39ED8566A168265C15E9363E66DA34C803BC59107C7DDE6F8C8E8A1B39743B29 +1723A9A9F56C2346E856EE7E5605008975039A6111C1B4AF433413F8EED29C25 +C17A951DA57772EDB0801D9C4123731C1E017D3F114EDBADB27E5FC82EA0982F +306FD46BC335CA016F5C5DF63C29DE01FD00089963F95864FEFA0713F86C1AD0 +F3AF11ECF5D752D19877AF0A20BC3E58A0EF55EF881F1845237820716AADE38D +BF358B31F2FBC6BFD60850913B650E8BC35174C7B5C68A205025C7DB1717AF82 +982D9DD01D396F2876C0B780FC7975589799AEF5D946F5002FE57DF9ED7D6EFC +368274302EE209EFBCDB1FD3DD46C47860B8F1A228C7BB90772D66135420E4E6 +F9414E524B0DC392CE36413C3339C623C1692D7C0841F2492D9ADEB8AF6859D0 +D8C72B7BDEDD007864B0718B187AA40643F53F054EAE49C577D0B2B644F78F65 +088D3CC6565A1C067E63609731364FA9067FFA01BA1F8B8D82A331D4087A93C5 +B4CBBF75D523BB9D77655880F0ED09CBE20053DE63964E77A48F2C2535F63337 +16148FC945DD798FCC147F564364F3A4DF09E7EE7E0B0253286CA3C573FB9925 +1AA2EA9A8FCBA9E6587B160DC1CF7D7E67F47E15C0014A7AA30EA372D893AF2D +BE297C9D2BEB977069E33DD533EBE99BCB520C748CE9C4A51D462AD740D1BE85 +6A2085D0DD1097F1ED235F00C1C7906587E9253D7AF66CA4CC22C0981720CBC8 +770E0BBAE73B7636A2DF642DFDA0DE233647B185A5BC4822582BCC8F2083ACC1 +E9391646EE586C53DE007ACAEA74ECBE74CF7F062C73BB60F1B2651DC7B5B1B6 +D53C4DEB4E78760FC7159C4DC73B0C1F6D0DB4D70F75D36763D4A49F5E42746A +794CC2C57E532336A6EBA76DC86618193088B93F7D6C40CD56FDFB2B5E0AD779 +BC3867735CF71EAA51578956E1760F49C3F9DB1A58D3C811C74DB82848065DA5 +0FCA863047972AC37B148FB1F5BDC1CF3130E6FCB64AEB6D2923921D9DE69931 +DADC9C1F8A9F974CA3A324AB4FED93D0695259A61375180378639E42DAA0D9E8 +2107B6D9328DDC89C4697F0C0FE07CA21970A53AF3D9BB8AC32902E51098B060 +67D5665C4A428EFA08C4F9A987A0BAA79175A1023D0F1EECDBD77EEE55CE1C84 +7435145DC7E81D8C0017C2839752F39C6DB97DB1AF28384DBE929A209F016F6C +197EE95E0F7440760E4CAF2C5BB40E7B26A7414158B385DB84ABD02FC7054B6C +E5C9D9968E727688AC802B5750F7BE27D92D26C92421B058FA0EDA43CDD02F38 +78868B6A58E698CF14D982E3F134ACB20B824E1058593074CC3E49FB12D5CE9B +9D4BF81CD1CBDB8CDCBB1A6E2A8EB38CD5CE9A3332D4A399B0D58FC4709CFF46 +EC32649DBE6F511B864890F00C1673A8F1B82AEE2ADF6125D87502DA2330B718 +09148FA7785A6BDE2E6690AD6A28CB389FAB8249C6E243569243829C8F9879BE +FC29EE3808073C21923BE59BE768D15FE1F9D2CADA8EDAD89EEED23E9B2AC20A +4A0E044754A62EE21656219EA54E66D31BF4B9ACCCB9206CBB9BFC94B20D90F6 +F7087788401D658BEF854D6E6CD3FADA78E7CF507413ADDEC56D00AE40518C39 +5036AEDC5A0098AE6667E82290B5E728565330ACCEC7F55630667335E9BA945B +E961F4F3C7850DD2DEB8F5D7A080DD36838D3E4F1D5A0DB88CDB1819988DC67A +9C4943C34AD435B74BF783386EF2DFECED904B778CFBB4D98FAD7A91679EB575 +6E48B3F3BCE81F3CDD24CEFD1C76B109726809679D69220A426A87E49884950D +342CCCED279B166E41A709D243A42D2621529C6C33CC21333D376387585CA01F +2B36C4D2BF3AF077B5EDBD55BC06D6F973EF4FB8454F518C4F49DC36677990C3 +F47F0C5CB73BDA7CC91A2086A3FC99C0C75554DA532148134028D7E47B59DFEF +69D31F6F67218E51CE01B6046D0B7128981E5D6F4FD5EA423D8F20C3859902AE +C6CE0279870B7B9BBCAB0898528A0350FB728F082B941704829E34F6E231ECB0 +A95AF2C4E2E3DE52339902D3CE019FE6CF9F25EF965EC4F6FE37C36089D05CC2 +33730B453D84EC0DFB7827BC643368AE4894A2B2E51BBAE60039B3F1BE1957DD +A5BF893B29AC0DA7904359C97CBD075A5B510525D6825EAE1B9A4D844E56D3C2 +DD3059CD01D67E69A229CBEC58356A0A83EC25646A23BE669876A7CBDCE9139A +A4A80FBF1E760B8670BEED45C4F48C9CFE5E95F7CE875590F5F7FF39166BAD9B +F896B3C99B3FD7F253E783B69169BA7D2A5E4AFF51C56AD761CAB4184B7C34FE +4C2E90CDE05506844A2E9044868CC8997E8650AFE300F06A09674EBBC1D71A87 +61A0DAF0CF08F431C26BF2CCB53571F8D30E98A7514E96F5AD7844ADCFDDC4CB +ADD027C199C8AC1819234A8DD4E35E9BAC3C7BEA8A9D1FF485905434474FBDD4 +087560E03A3EF69ABE946842135C344DDCE0023E3B5CC5DE6C0939899DD6DFD4 +FBD3BA17CCAE5D8EB42C25 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTI9 +%!PS-AdobeFont-1.1: CMTI9 1.0 +%%CreationDate: 1991 Aug 18 21:08:07 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTI9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMTI9 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-35 -250 1148 750}readonly def +/UniqueID 5000827 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496 +4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D +DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A +F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458 +8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6 +03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9 +211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3 +E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B +D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1 +6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9 +0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC +1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2 +298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D +C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574 +433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6 +1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6 +1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16 +E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F +9404F89293D6ACB433CD0802C43F0E74C6C4766A23A6AE3788FE6CAE82E1A104 +BAEC8BEFDEFE4F292F625E60362F3886F602CE4121BF0AAD93526314BCBB5971 +40091A7BBF7EFB3BA355B88C897D9C70C841DE41309348751EDFFA8675215988 +49CB1599834A01EC6CD4FD813AFF97A614F56975775D5F48E9C1A9CE532FAEB1 +4EBE20C3FA87CFE03664C428BFC5C894668E507950005BD8C2BCA8998C1FB92C +4E6B791BA05B79F332EB8AF5B0F851B8B7EE372EC0861B09C007CDF43F82D0B7 +35446F682A0DA7F4112CDABE4F922EACFCB7B8C88BF550B60957E7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSLTT10 +%!PS-AdobeFont-1.1: CMSLTT10 1.0 +%%CreationDate: 1991 Aug 20 16:41:43 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSLTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch true def +end readonly def +/FontName /CMSLTT10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-20 -233 617 696}readonly def +/UniqueID 5000800 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8 +0E5F73DAC973450D1ED0530313057E971FC7E7CA88E61DA6DB9A5CD61F0F76CB +4DE9105D0627B8DDF51A655098229920CF429CDAFC3F7788C95E7AB30E84F840 +8CED52E98DB4CFF161D2E62B0D28CB8B0AC82E7A8D2C007953BAFB3056D66079 +8064956E257D31C13509FB81A250D9E875C77A4E91CC49E9FB3C0718B2F691D4 +B4A64F351F4DD68133DED7629B0D96E5124584A16FD2AC7A3EB244A934FF059F +ED7297B0505F3C2994AD66A3CA5D2728B034DE94B64A8AFAF341601BD4DB5858 +C9950A8BB9C598B8960609F48116ABA8C007190AF0ED335EB5BF61BA6871FA5F +EAB5A26AEB5C7C352EB80799CEB983F19EEFA801093F62086AADD0B80BB6580F +2CF61B1390FA56DFA1A0B61C58DEF96BA767A8A37EA44730783C600706606C60 +4EE74EA99B7C0F8E2525C8847F3D31907C3C483EFA98F6C416B6B2C343DE6370 +52FAE423008D086A76A1FFB327CC7FD84B1C66B203A4F41582F4599A82F8362D +38108452EACCC937FFC4F3ABBFE3628DF51367DA6BA3F6826FC6522D6AC5E8EA +00BAD300FFB6DEDAB93237704202BACD030AA824B1E97C0AFE17FCE8C75F4FA0 +B8A74329A6CF1788C7EB34DA7307411E9AD7ED8D6582884456E06E033B4FFE7D +CD4DD8B06AD01340CCCFBC382C18CA451E4C886B01D082FF8CC5793F4727C3DF +B52B4F1A242F31D1EB79D1E39A1D4FD13D6C5E2A42AD4B4D1CC4EE7BA0E5F80F +802E5AB57EA15F4DE44D82AC408AA86D4BF58EF967FBC6497BBC7F017C0598AE +32CF865DFFF0FC7FF9E6DCE9B5F2F4C7491AC674F46E8E7660452CE0A77C1EE8 +00DE382ABED85350033EC00053134DBABB69DD3098576DACC5D1E325C4B372B3 +943F8E90BE7B97B996D39337ED6D90F8041298B7A27B223358A5161FE98FA4E0 +6879524934E026863F790FE3B5A8A41AD2E91866F81B195E0A02D9BDF971633F +0FE9A9BEA04CBEA9E46AA44C31D694A0AF3D7CBC1FC4988F6A81130613047150 +12203A85849EF4D9238604ED8040DC85FB0CDE867F50EE685C8B2BB0574FE22E +B02F2595A161E810E2C9FB46B3E15BF0B3E7591FE9CCF7689B1988B354D81E42 +145BDD9A5C21B3E52BA1F1CB76BCEAD38C97D40F1FB50C505B0FC423A1F495BF +62332481948BC331BE6395DB78C35E5DD1B55E92FD14F1943E73B157F5E5C24C +AB2D70824FC69C818980EF3954F79FAA4E946064F55D8A62723694E4C489A1FB +6A082DE0BE740A145A71F1F9FD011E558E3F27DFCCDDD49DC348707DAB524EA6 +88370F288567B17F313D9EF6300E8D910F49A4E9E581BC95D89B84E2591EE3FA +41FFED57028D28600F1AEDFCB752BEE359856AB8F776A166C83929C17BA13600 +0A5D2447AD901988E5F5B6B9D710080392FEA79CD595FCAB7B9B52C94E0733A2 +BC63FBE36CECAE723EBAC3BDF4AAD1494B9F3D146F7E3DE66F77F6C3636C6BF9 +EE6C73AB8F1E98E043710DABDD1E9CE6E3F5FA8F44670AE15BF8FFEF72E849CC +A9E20CBFB577BB42C9D842A3812FD73D0E26D592ECB2A920986F623184ACDCE0 +90610840699BF7302E534D6F9EC4B007E6CE4D8D07BF9D4F486C503A3EEF3999 +50E3A7402046E7C08AD26751A910154284312117F6C6AD506038B4A5A4E1097F +26241689BA60A4B2E58103089301AEE41DDEEC60CA3ED74B2E838AC0A86E355E +EFB46562208EC834133CACC4A6516B4378B8C3F86083B18AD53C3C1E13200B8C +6F4ED7346CE480809EA316BC70C5AAD4FAFBAF995C7ED82624552BF2F0017E07 +51AEEB8E2529CE5E24087FF3F0921DD9963AF7BCA9582565573CB5A463C4A5DA +0F1C8A82D76213DF461AD578C25340C4178CA8A7E99D85CEAF6605FB5AC336AC +22CE77D930F859E0089A09D80C694C573BED5448F793FA7A3A977AC2EED1BD47 +7DDE4D72B9DB3828175AC20BBA66EB0C3D1CE9931AF3B5FDA9D9CF3C67E65CB7 +439F5FA380AFEC7DDB17FF8468D03ED4E99C507C3312E7926A5650346C44560B +F729A594E0651F7BC3A0EAF5C66BBF27070CB1E691D584D48998189152D78F5A +E2FFD2C517BA7127DF128CA5DEF2576FE2BF61733D5F3C0972BC423E34C102FC +F84E33813FFB62ECDBDB494AD6A3AD2C9D1EF30D11031EE57D8F7775A6A0400F +3EEE57D877FB8E007E4B309412660197770EF9792605C08668F694608E37BD9F +264A298AB09C2A6E605C6A6BC523197E1F87DCA1150DE1A535C327CF09C86A3E +2FF9FFA2C5A12E2C4F1DFB00BE313BA13F80379EB70873D89667D0E274EB43EC +69E1D140DA4D02C8D2F8D088B2BF240EB96641836FA71EB749829ACFBAFB152A +E67B9428C24006EC9AE92BBD00614E4FEF490944C906EC75508730FBD7F8E439 +1FC995C07CC43B83E2F4063A30BAA9E1E7398C250368C6E13BEDF0F14E6EF31B +823FAF0EEC9A2F745125AA099110843D606073A374E97AA91139C190B0992CC7 +07926D8F9F04132B6C629B6149B07229E3774AB12FD9CD2917E8162D6F4D26AE +99AB9F015A6C629B094E6C98767B8903678EFAEE09BF1C7B6F299A0821877171 +FD01FC4AB79872088C954ED616FC17DA91B76F33BC8AF20EB81BDD3CC686C5D1 +E28ADBE191E355419683D64E7A3C9F78C380052F9329EA6E7102ACD7D5588DDA +B1EFEE6F0E6B4378D5E7DD88163141E47FF011C056319F8F8ACCFDCC2F352696 +3C04052BBEB16682801F73BE5B988BBED6D4C31B5D188E2C1D42C368BCF81B7F +363189B07A5056FEB84F7DFA5186E9DB319854FCCF6AB41FD87EA5C65C66201E +00D743116D2F0B799DCD60FF0F534FFA92A4B8073E12245F194D9DA9D76993F6 +A17AEDEF24027EBB10EC75130081B6843C302BB5EB62CA40186F2E9E4ED17296 +632B085C31B432E748433B4FF2F1CD7BDD4E6B1E6C0C369DBCB7D5AB64D2D275 +D93A35F54339DE4EB8DE77418B977E50D459732048AB32EA4CF69DD7DEF04CAA +C22F16BCB3BE34512364791EE63E29B5733401C8F5A847764525E1B14CD6CCE1 +81A16F9FFC6D5B37B293938F0555AF9592537F4A9B2AEBE9EF766921DB1D2B43 +7AF063B20D66F4079ED13B0FA60EB782DBE17C5539A1A5CCD335F90B489E8C68 +95C28F9EE0E36BF385C0D554C681E5D927017B7DAC58A4C3442BD015892BB7CF +51CB250208CF5661918B5098017CEA30B5C0402C155D4A8D4935B92670B333E9 +BE3154BAE9CF9BD47D79FA369216E2F3F0AA37DF598036400107B60E25FAA284 +87BDD4BA6459617AC77787137BA30F0CD07576E66527BF4D39E39E4AE54508DF +351035A3A1BFFDFE5BC76222C8797D78723A2F3A69042BD31ED69F88E8F6C68C +F0D8EA3F36AFA8ED13EBB95ADD129E21932EFCE965F89A399970F30011AF367B +3AD8089D6B51E0DDC6B95F56435610DEE2AD9D8A2FCCD9699663523754C23A6F +774F44816FECAC1EF43BA3F9A1D69CC5457482E07B1976EFE7A7FAA60579B95F +8DDABBEAEE10353D72759E316932D064EF132FD0517BE7009431A5C185CF7A1B +13EA10A69449674E950ACFD367713348FDBAEBD12AECBFE70C4B7FEF702BAD2B +19DB97450F38E73B2784E98FBDAE84D2C3B1167E8B85A1ECAC09E62D187A3043 +ACB93A5701AB9E66F25BC7D103DEB8161FF7DE5CC957218F0D279723DA4377CF +A08BB2B08218D5F62D4FE80B8EBC3B8B2D0847C561A2A8A1F09EA64AEC9281D0 +7BEA4DF7C7ADA40809268E1DDA46FB41216DEBE3C971CE51C367773F7492208E +E7EB797235FD349F6BAD6D6E4F99C29F5A6C3C87D6662210AEB92C0FD64B3CF6 +AE2DF93D6A6EFA27B976E3A91BE80CCC2E7A1F2B90E1058F8AB9FAA0CF87C15D +AF37C5EEF32ADACB6FDE08EB99F62F9194328C09BE10B390C349606AC58C167A +15728318A475D8F402E294B0E07FBE936574A0FA09EC4F829794285AE3150269 +91D07377024ED8EF474898744B82C693B8D9C91E1A9011D60B34391564A747E8 +57EFD30427B4001470009229591EA924C547FD154E16646DAE7BD115B0C8E3E8 +BA8FDCDADFF9A09639A4B9FEB1B9F5C00CA5C87C7C04AC37BB7692689C832071 +5FC338C4E5B448BEB3B9F60394B6C8362D523E10B2DCDEEB70ECA04CC1C7CCDF +2827E3A40F34B70247CF6C5D3A638896366D4A28FAA2B1B98F865626C69039FF +3D54638C23EA32624CF10216A10D83BCB734A09575AF1B41A26B18FE5AC7C89F +64B70002CBD12AA01EB9BB97EA993BEA9FA225552AD79B23ADE62D47C48BE023 +AB1ECD12E6D825A62962C41BC108E8E7FB37B976A4F826C12A59E7CE61C6CF71 +41F24BEF3E29709C371211809636651F02BC08EACA9B0AB2632DBD5D6E756953 +5C4145A7A3A81133D237335D202DF3673BDD07F679F650C67066ED300205584A +26E444A3731355C11FE972E181D9C93C6C29CB8CF542CAC213D9040EAA05889C +8C6EEF27DE0846314699DF54E99FAE310F11E3AB9005C432E5208D8BCE1A37AD +F2D7F3289C7C564A24B951E0AA63BC60D75AF80428FA27EF965A1600D1A7D357 +935589477B0B5E12EA0512C7D219561F91A9BC95580D4CAEA7218F8B1045D6E3 +FABEA4A25ED4453A7773D2C314B8F156249CA4AA102AD02343E5BFD0396C07B3 +14DF0108D25FFE8ECFA22D7C5DD91D422A399821E7D910FC87B00544E53AF711 +E98F45C4329FBDACD3C332454809DEAB801F6DCB9511E92F235E1A17EF8DC8CA +1C1B6217082CB95C1A605D7835741D3DECDE9202DE38392B18AC147608CFEE8A +BF21E6DE2429846EDE6CA2D573C1506039E9AECF0A52318E992EE6A2F23469AE +C0CA4F3F90A79E610E4928D95D0210A30E9DBE65B841D16CEEDB1D98FC42CD3E +34426D5FEDC316E922F98EDE044DD192037787704B1206A21F759DE304972B60 +36115A6DA1512B38FECB759432F3A3BCF3DF0376B5F8D478DFF2BCEF69A3BF3C +7A65C734EB54BA16D2DF4B7D12F646DCE4FDEC0BBBCE02A623EEEEB4C6E81593 +C0A3731B901C2D65F353937FB0CE821490398DD73B24EEF7943CDB0A1FA1EA6E +6CDB64DDE68377298A655116C02BC58E7A1401024394FCB4A4781BB0ECCA339E +7E8890D1C5E5B6549B5C7B42E3C1FE35703B21906A0B9AD51EE5117FAE9515E0 +3C1B82C57BDA12592692CB93370742E5AE20601AF5B4EF353CFA3EF5C92FEC69 +49EEBA22B9129068DEB74C4D04756695745C02DF963F12D7A256680DD052B070 +CD7B9EBB05015170EFA40BE9E5C6A3B6CFC2C2F2A2CADA796B837E0E9E308551 +E95A5D6598D332806D7E1423B0D572961949E322CA226726FB20DB1F25DB537D +3579D615A955EA323132CF0DCA83AEA15A738111BC420C200067379B0E90584B +7D142B52915DD2507477E6B6026CE3F55B42B6CD45263637D232FF9106934947 +0F31918EB3FE1AA0C56A67102D3341551365F0D02CFD324627C4C1BA77E9302F +673FE00CAECDD5CDBDC142E7074631C26258B1BC4DC5301FBD06C5CC46ECC9EE +8A3FC96AF26D9FAD776F4CB4BEA8A76362BA77AA07F4AF80BA17D6AFC668FAFD +4444E78E82FE7D70226125C15388F46D723804D215BF2A16F7C21AD0A632998D +E9023CC75FC816112850565757C5E537BE8AF1EE069C3817CC8C4FD85BA8791F +6CFCD13667DC618DEF2B7F6CB788D8A039BEED888E4D0D8C41E36012774A92C1 +1B9D1A7343CC7513730619F110C055D61A4FEA3666097E27626F7AF00D63C49E +C7B65540B1315CF48871455762EAA5EEB3714564E27C3C3F06AB0D5F08152B1C +3FE59C125EC1EC478957F9C41523DB63EA844B6BCC3F37A7AB39780DA0886F21 +F3DF1BA3D37580DCE6D4E9A512669B1864EEAB35DEF3FD4A9279394E1E581020 +6FC27F2DB0AD5BCF04DD864B8070AF99E37440F80A80E13037CA7C146BE7943D +B9BC86AD2B250657F97C7A96A551326980E14D16B5470CB75801581F8179BD05 +5A87E566BF2E2BD81C3CE1156E54636F0C0AE68AEF10BC74CD0A3B6DFAEC2970 +2C23166B8BC41F06EE48DE5D6B187F25C74A5A8C6A464CB9E3735320114E9A39 +00923504771DACDE90073F2DA7BA91E9D86B0660897BB72BE5D851F5AB62C6D4 +5709A2DBB85801A8D7FF60B14540305280E53C605121A863665E0A2D47D8A31D +173372FF7C179A1D1A8E4F6F9B34D274A94B25BBE087C657E09EFC6BA43445C1 +70FAB6A3EF0814094FBF5370382DBC64C4F03CD96364E047CFFFFA66C2D4F478 +9280BE9F6538BE45898F52E2F05D58DAD8DE61D096B08D5A80A65FC46F8FEBFF +C7506D9EE411E3D68BA61C3B768D563FB9942E0DC5DF82A6AD090D514D682ECA +C1F50E14EBF58D3E1513909F4C7CEBACFD88102670F5EB176D5F53C9C92C6BC4 +B62C55E5555548B1D649D9A23EFAEAEF97EC0C3C627DFE4C8FD0E1065ADE5A74 +856863FEA0A73BBE28B5EC450596006508EF8FD468C1E2700D9B328684ECB780 +3167104317B143F059A53FBF64E4B7F7DC60B7701AA8CE4B5ED2A6AC991A1E99 +BAFA89A16DE0E3A0AA33022B87D694B3CC40A9D0B346B1080C840182A0917431 +CC2250854A407D83239A811130EF7EA6841A215B02248258FF3BA66DAEF6E137 +088980B04FC658DA0DF60DE24077F71318AE06B30627C3A638D6C0B2076D7A04 +5988936B9CC5ADAA2169F739B8F54AA91B85EB119E5E6894BF4A76E74F96F3FB +CD6A3E96E85567581B91BE4A78FE90CBB1AD177F3A08B96BEABEEA5BA017B545 +69643B523626A76B823F8A010398229379FC051B846597EC174F3BDBE86AED57 +D29BEF440D0A458A51658A8F11A84D553ED15BE9437F4F0C8D3EC3084F0868F1 +C8E36F3E97E657F815560E470E8BAC98AE4E40DF2CEB35A76859083046CE172E +C2F0DE76BDADE3E6C9FEC16F42605A41DFA748987D9196C3A8895535B756A37E +D9E8056F6AE08DAB8BC625D127BD2B1633FEDB2DE282A2F22C0CC0CD45D7DF8F +6735C77DCFC66730A8D0D5C802E3D3E8A2F7C95BDBC769E9C8975116F3B97C59 +4F57E6CB135B014E34E1B2914AD2C4DB41E573730783F6531347F27077A1DBBA +FE6DC259D3CD70C36CAD4529DFFD07305D786AEACC8BF3C4D3B7A1ECDCD3C4C4 +0607418948E6C8510C9CFD3E2B93675C81C33D1ADEE32892A47D92A29BB8F04C +278350E660667BE6139C0C8E1794FC9AD2099F3647BE96B1CBC8BA2F77A0AEFE +97EDE59D9F9550FD3952449BEFEC5CD25632998EA8E32DB16E6C93A83687C853 +FEF32A49FF372CF8E580CFCDA6BD6E3BD60BE8E652FCE38D54FCB4F00055EC0D +A41C9085CA039DC00843F9EFC88D12AF8C8826822464926023EB66AF8ECF3F86 +2F0488DAEA9F996FA25E8C8258FCE63B3A6C661BE677D165F65EA67B152ECA14 +0D2E61BEE481BEB1F45F2A83A96E95CFA2E2D076706320682B19F1547E68413C +581183B679DE75B7CFA694BB4E9D032D43AC0F08AE04416A60DD62682D30838C +DD4E0897E2D8A178F4A829DE0783312970A8431705CD2FC6DBFBF57FEF332AB0 +5473B356B7E2AE91BF8D1CD9D780FAADF246AC930C0347713F96D82F1EE3BC2E +F84A6CB140CF7AC313F34B3C1E073501607447C8B8324BA5728A28669B5D44B3 +7F9B38562E61D74CACC250BF9EBC2097167A013338D44F51D036257398267560 +5B4BDF8089C59CC50704DB35FB7EFE08E51F6A7CAD8EEA51C4909F8B22313881 +D90C6CA7CFF8A4135330BF780BE40249052A29934D57F83F6667EEC4A7733447 +B84CBB016D021625AB1B40F9AFC0405DBE0D7394D46595613CF234CD7BA6979E +4AFFE8FFFB005B3D18A93A2DBC465E0ED90B113DE484084914B9DF7EBF44A678 +AD814A4EA2815C3BB1811109F500738F860EF4079AB3E826C2F92980CDC7F942 +0679A6EE279291C5ED84D53EA15B59EE47646DD51155020EA7DA8D4A475F1266 +18A8C879F4CF3D0562E61122B59A087BBE110188E634685D9E87DC0E5A8D06BE +98AADB84E98A4428B25E66DD2AE23AB185D95D62ECE4085BE1D4967E9CADD5E5 +EC92BB488AAE7814EDBFCE5BB7F866668CBD8AF904FE4C7699DE9764C96CE74C +17AA20AC60CD480F562778A95E025A3B98233F6F7EBF2F0359498A389D0F5B55 +8CF1686AB3F1752B18B4A4B1D873DD8A35E73B3A7F08BD152DB528C52ABD9D29 +9BD2DB7F07658D1F7E51D9038CFE60DC9D03FB2B6634074B6DEA51B63A358B58 +1F7096676997D5B9DC7F1C68008B0BBBE13D2FE4CF2BEC425CFC8230D895E97A +C2C664A99AAAF37B627B33A57B4131959FF07E80E7D35DC9F6C0C216781F0F63 +AD3396D9D197EB54E70288A6EB1C63DC0CB185F08C1262EE0E63ECE4DDE17EFF +4C074B28BE3419A6A6FB04E0ADE4E61F54FDDD69AC02DE30B9B419975870BA13 +0ADF9F2658D799E9DA2E4AE93C75E0EEDBAC66D77F14097370BD22D009BCF6D0 +838A4434CE9E65A045538BE825C804732D0C98615B724F8B1B6F052AA52851CF +7ABC84AD999A9EA32304582C04B91B501B9B3CD2A685B9361F21BB52AFBE0496 +2C9DD63C1664BF0693DFDFC3724DEAF49F6B9025672BFC12BA194CC5DF0EF962 +18AC0130436D9D27F66B1089C0B59264FD1A388B545A469D57D20BC3864534AD +73C748659935976CB0BA8AF81A159B4BF95EDA9C8130984631F1F4912412F02F +BABFE838EE13FE744CED03E6914BF43FA6DFF3F9314F42BEE02C6663037A3DDC +6BBE88130E6525D2191EEB828FF6D7208FFECB77554DC41596FC1EE24FAA32A6 +01D701BBC23147AC135A7AF22F8E82C5FFC20478C097EF9DAD8D0465D271DE62 +012B1026F6970C05071ACC483D1B8A0E759152D94E9470EC560315AAD8666A16 +7E422D75CA857276B0679AEC89E78EB6E5603B2C6588A27EC513F6BD48F839C1 +3BD38C5B094110AE4DBFBE728CA8DD44249512B9AC86254D618F9CEBA7C6C544 +967DA6AA44DC0654E581B4CB0F8F739AF8EF2A92B2A359FA4B3A0EA3FF4A8736 +853D6CDA7034C13AD2DB0ED59AA9E6515227ED65E82B0A149F68AE248FE21B0D +50CADB74A015BA18F6C1E534A626C4F50A379E53B18CB8BEC38298B6FCD95A69 +601D2508FE90F45AF92D2AEFABBB0D0AE51BCBE5AAA96393328FEC03597B4415 +941F0F2DAC79DAB1BBD04F1B9B8CA189F72D15D29C3F7C491FFBE9C991CAFB48 +55E2F73EFB9C3CCFB791863AEC846799202754ABF7E01158F6DB791B8338264F +0853D06D1230D8B025DAA6095C9DFFF2E08829C7BCA90F6D986ECFDDF424F532 +29033647C954BA1F9C77E9955905867B31E45751F240261A3DF10F3F175DE485 +D08E903475856918194BD011FA5BCAB3C9923CC8D8F78B688E7892107A3A27AF +BDE5CBFDBB4E29B28208F66AB1456452EA0E36F75D6938312C7D160957E3D555 +E2DEC5B209D8FF62449CBF1DD1B5D7A799167AEE4DECD8E4FF761766AA094FB3 +7FB7E86CFD76979667AE69886C797BFBC2E5AB647EFDE080AAB5B1AF6A20C0A9 +BD705D2B6AE86218C50829CA99D4EB234CBB0476F32A186B45EE45D41785AB77 +434538B55F485CA58FFC35EF51C7C830EAC2EC176F816A2B3F271FCB610BBB24 +76C36D8EA7D5F12845DCC200227D86A640CC0D70F59791F6408702AC7D1DF14B +F4CAAAB32F181BAC49255BB853F6B082EBFD1CA577F6B6253616DF067F003C65 +88AF610C5F58E8D91660F51E586229ED325C5AE4C82E3187B70E0E59AD7B20E7 +375327EACC433FE34B699AFC471832AECBF19488FE673BAFF48409D24B4AB58B +1C8E8A561E3C8B28A078FC161655D90609B014012CFAB0F5EB875E9A83D2B88A +87E11FB574749EC6763D722D8CBEB5F98143DF01AC4FAA1A3B70844E24C92A82 +C864731DDBB846D8BF01C0805A24EA471C6E18C34C756C0EAE281A9F00AC4948 +3D2CC2F22C0637FC8DA5F4A9BBE085757EFB9CBD9E54F895D433E69E579D8ED5 +D8BA8C864142129E0AD170A7D4544ABD8A802191EAF6CF6F5E285404B7D19B38 +093B52AB8112001A8546DE62C64F2605011DF6E02C967E02E340F1E9383043F5 +4EF3E7E6DBAEE40AD431464011B25C8078DE28346216FFD394087F322007F911 +1EE21C688102610F6394E3BEB9BDDBF8A36A1273D6316A53B9EBFA037D6AC637 +BA0B36AAD961061CBD3C31463380D6D13003C5FA5F68F276468AF2CED48A6CB9 +387AE5741C7C79252928D88B51A853B00BE8C029E8B8C58F8C92ED4C74CC8943 +B4D89282E7160D532F9F22007312EA18C33A848E4248204F776F00D46D483259 +CA0104174D2F5DCDB64CCBFF60977D35A6CFC2CB3441EF966D15C7AA462B1737 +0079B920361AE754EFF71DBEC68B21A885AB9A61C653841B9A9DAED199F33089 +C560C28FA29073899466B9BA55EA63439B4D675811D5CED006FB6FEA2674CBB8 +ED75493173B82B70ACA4C66AF3BABDEB0B43F1E43583D64EEB11CC16B1F481A5 +68B11795DDB67CB33A03025AC2B215D5379835A32CE1D4E327EDE5B53FA360C0 +399A30E2DE611B64862138476D68C9CCF899FD89B5EB8E155733364FCF981F0A +4E14E79325210F6C3B9C594C1B8DD2725DD694F7AA30A48735D69434C650AA7F +563DAB6D793E70767DDF0EB615F44E56002946E3506686BB09A365C31A2C38C1 +E95E601A0987902A54BB1743D9EC5A5C496FBC987D796B9C75DAF3513D0C2685 +F315A7E3C61D75C661CD4A5B49297B16C1FB62104F0AB175DA178EAF5B63C026 +E99E23AEFDC25D1C93BFB7C9182B58D4A599B484616286CFC0C93425DE11417F +7F7BC7B05E6F8B2E3E37383BE6DEC107EB08971A6ACCC66AE172EFC6F529DCB2 +4D478FA20742410A8804624DB03A90C6BDE00B38F92100E065BBB2755618A570 +BC84C28EB5DFEC2A4BA7EF6F4A6B6DBE18069229D912A310DF592878ADE6D3B8 +4684C42D5DB517E86265F689D54E870E0EF9D64EEDD723BB9F99B820EC790FEA +7BFD5EAA848D6EE17519EC82A9070B500BB5DB318509F72B316ACF162A1FAF75 +E5C7AD5A8F7A2CA610C1A78DAC995C378C38D73CADB167EFD61F1410BC166FAB +BFBF9C311FBA0040D77848DCB1B093D7AFA67C9CC400B1CC2790682D6077A400 +091915F6F609C581705F095BA8CD132E31341168597CBFB9CEB29287176EB484 +689573754C275F67B2802E9614B665C945B8A18B7E3355A922BB45011DA7251B +90812D8C817AB81D65E3D69B00F9236D5CF95CEB734ABF83478BFEEDDA250CE5 +859AFE01BD9375719F1DE48B9700AF63892C3D5CC9ACB84F07D77B68025D44EC +F6E08A113DFE85D935832BFF21A193F96A57594B79A69C3278794F3B96943F07 +9A6C629AC9BD16924E2C18268F6482A73AA98B0FF28E9B8E1E2932683C155B14 +491257A7FB094FEDD7501AB7C24CD11F3B45593702E4D462BB73AAC8C6D85A17 +94AC384C6B1AED89EA4DA938A789C3E19C19447DB3219EDA58ECDC1602A8CD86 +7416B777C32251EBC0B1135AF96111918ABDCDECADD7BA4FCFC07EBEC5F29863 +458D30E5707343040174C85044FDE203878346FB14007EBFA2D7548E7ED1790F +E5CAB33BE24FEA0DC7B8091FA1DD58B303A449015E089FD7D0C3A102114FA2BB +72213BA3EF3D1981F4DFCF0B7C3EAAB740AB77FC4401899DB5CF7D4AB0D50B3E +D1D050B48D4DD999594B576A72C6FADBBE7B08AEE834858101054CF8EF86ABA2 +F82F97CD18CA9E5D5BDD5C9FE6079531EA709F6E12E8633C8335E1A68C1E639A +7D8F2916118506FB51D79B02614CFBA56C44F6CE83FDCE29A606FAB6E06D4AF3 +D9819629213892707B1B48CC0FBE495FE8AEE915CD7E4F3E107D8427C710E6EB +5FD126FA9ED1C43F6EBEB2771D9179CFDAF9532176AD8BF820351A6B614D2B9B +DC0391C729A2F535326FFBBD9C5859B3D29F494FCE6D6C49E9D1AA97FAA8FC4A +618E25F00BCBC742F3C9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT9 +%!PS-AdobeFont-1.1: CMTT9 1.0 +%%CreationDate: 1991 Aug 20 16:46:24 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT9 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-6 -233 542 698}readonly def +/UniqueID 5000831 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E +2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279 +650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35 +F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A +D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E +F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1 +4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A +438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD +BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B +A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641 +AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74 +D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB +CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A +082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980 +9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0 +4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A +9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F +B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D +42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED +F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328 +A2C69F817061D6C60B121EEE844CA5008F23DF072D4D1C9EE000CBF2FC3FF4E2 +119740FB306D340D92D733000471A990E5227B06C53B3DA72141948D2FC17A77 +0AD21196F678B0A93DC026C410A781255D359F043B777B70E1331E88E68032E1 +AFD0CB35E99550E1C0FD2852A7D190E079C1B8EA1F8B005D66F8406E14DCCD92 +9B1F39E6A9CF2E33CBEEEAA09AE1930C846ACADD3B0F0F102B43AE6EEB3D9A24 +50C521F1B4D0541CF7B325D14EF0575ED2A7A659C828570DE5A4A773DC6493AC +C95FDEE00FC1E9E332B536AE670CB145808E654923F757EDA89FF2BCA9E89FF1 +6D0D03C51443C52FD718CAE35DCE7CB7BC738614074131479E3B05F534F67874 +E2118A332C880EA45B91253E8101C38FDF36BC7766CB320D14F34722E2F40F8E +A469DE22A904697BF8487AF1F26166730DEF2B9502847EA432FD862BA777B6E0 +C62A9622491A23CEF57E9713CD3D61A36E00C865E445BACF3536E9E33DF6DA81 +995CDC130C5AF0CDB265692F769BC0200B42BC73A117C0617C412ACA508F970C +B20652DC14D4031E531BF59295938866FD3EC6F19B4DDA468C69B78E117DA535 +438B129CE6DEC5FC2EA667058B36799189DD9CCFC0D60F96A055280C298663DF +B58FDA736DC747662D83914A9845669E87F78AD78F2E93466B14DE865CDABA3C +444C8C17CF2C964CB42EEF8D7D72AA73B6E5A7DC48FDC0849A92A97253B05C76 +5E4D2A947538E7DD046A0107C5B473C460F9C0367646875035C53D4435A5DF36 +0D4C415B18D38411CCD3E29F3D63A14C9DE5B44CFA9DB7E3EDE6B5D881903618 +CFA9FC3BACEFE774B0052896286D9C8A5F302F1BAD47BC71064039020B164409 +7261EBC080F141CAD093315E0687776D604C8D74C77CCCAD5FA2A808BF9ED3FF +FAADF730A8113AC0EEA8ECC761060D6A6D35DB4F902B6F63350EB5A819092DFD +06559E737140E60F72543E3151039715DDE716517DA0A15BA43A7C0825997371 +B9B6CF9E3D3ACD82B053682EFA03ACC9055BB1C644F1BFEB1A543768237ADFF4 +91123E508671FAAE22B1118471A081520C6E138CCC5543F163BB6D28D09F6371 +78737184F1D3692BE655E3EEA04BB9B159B07EB70D22B4F27D218E8535282047 +8AED37D8470659F013D648B1FD43CAA99437827E88BEFD7B7B51D38B68FD18E5 +60B7C3BB9A1981D3CD0208FB94D29DC1BFD86AF42099D5AD7F0C49B05CB27291 +7DC54D7CB4465E78864D78236419EDD8C52CC26D7041C16EBD06FA6F6FCE91E7 +A86B11C0D436E13958C81814F59007DD17FC68AC26029BCB74C4C01B7BEF049A +81F2D35F0AD2313B95A09A65D8A915185EC6BB038F15B29ECD29E6110DD53E0C +B09883576A64A272D02A84AF63800E505D8B6B95CAC9E510EAED3888E193CD5E +2348079F78FA6AEF1DB0A8A020A89315F26A4D3923DE9A6B6349AD75F1E08250 +95996A8C71DC6901E90845D6ED174CCE6A2F2D7E1864469CA04567BB3A0B749D +D09F26846E95CD9B707331381AA1962CBE6092808DE03FD97022732E229F6107 +6933E9BF8F63A0C0F73AA73EE8F64BD049F12FEF37957FFCF9EE4DCD373E6991 +BAF5FE4415CB2784AE7EEA194BCA730D552E6B23DCAD2ACE75C9239EFDEDD3A1 +1A7E33C5D64F9664D26ED72EE280BB33C4DD08B76F787B2A8F5E484B6679B4C9 +70A123B9DCAC536130E9095BA6688551392AFEADC8169F67ECF580B9A0F10BD7 +4760E803C4B4624EF892A07F4A879436493D782F2BF34A0B560EEB21880246E9 +4C2126D731636A317090E91CC4CA05D99E18764DCE7B1ED9A78ADC5C3F51EBC0 +887F0E6409424D067AD199F238C059D05BEFA084ABD4A2CA7F5C16DBE97AE843 +B51BCB3B5CF71C9168040203083A3EE50E4D492BC21B7CA1648FB31645C74F32 +801B3743CE95D230920B59DCE8D587EC6917D31CE10D60AB047040A4194E3DC5 +347105F38770D26B9CFC472B3B88459DA521985B1F6005980A4D7C6A3B90901C +0B79D23FD1BA58F75E0F9AAE0389FCA0D10C061A4469B4EF66523A2DA39B617D +8E21BC50F7DE585F9DA3AF48A5E88237544D230562BC6E7B6B26CE43176EA3F9 +A8F1F13971F7C65C4C8FB391CFBE58CA3BAD327DAB59E6496869715FF5E8872A +68409C73D11951511F5A8826BB47C051762D2E9E8495AFE328CCF14B4192724F +4697500FA7007C9F662CCEE6EF492EC198515B9901E12D27991A029141D1826B +D722D41DC8FC2F7E197DE911445AF33E4F58E7E1A2067AAF19B5D46173039D43 +4AAC3991E07AE3262F2AA3195F6F3B022FB40436111CC7BA6ECA51BE2C3867DE +20D8AF638B6136320F9F214BE615954F01AE717CBBA102DC69B961ADCF6085D1 +EB59F2228F373E184EA3808359E2979DAD578C643F496645D97F41F46357FFC0 +1219A3CE14E1BAB3D0CA3F79BC299CC0A810B44872C3BD0D12D06BA4945A9E71 +E792DCE14E8DF47DDB17D01DDFDF110D7F4D928E187E25DABC3F34F5428147B9 +0F2F756B07763AD25685F99CAEAB3138A0809B272154A17EFE2E371CD9FBAA79 +B34F34A8466CA9B637C5FDE77A65A67FA68E4F1B6D1A2286A2F6F024A8ACD7A5 +9F187818C7666E5BFAEACAF13B6489C88731287D58EB413006653574126EAF5F +6E78B13514FE40761B70ECE6B6C1D2422F9FA86AC4DD12A807445A750E6774CA +90DA9FC8211134451FFCC547ABCFAA8F63E934DFEC3B4443ACF203EBBFD7AB93 +3EE98240E47B12A7423C2622E4D0DD6F5DF97421C29A644F2F37221C3F311FE1 +418FFF1B36F1057CE5EFCB2801777DB7E746EB933D892FB57E94E8A0C617A6BE +1711CAF45373D573A7D6018673AD72BBC10A418C756E7FC82F9A2824F3B080AA +175631DFFD9D2C78A92FCCCE9E864173F774BE42D6A0B4F95DFC23E9FF4FB0DA +4E69424B496A08308BDD03BA40E1E29004033959ECC88898D0057AA9E62974CA +4BE6651B893AEEC10F325264D0C14A8142C30A58B87583A5A5938E43A4E39B60 +C47A1A227144050933BBA8095CFB4FF475EE9BD0FF44CE610E1E50390F641D2E +1B0DD50C2BD7033C286A666C4B07CF27789D68F987AEBA241EF087D9215F89D6 +0A89D4049EEACFF77A183ACFD83B60A492A0E847741E036353D0DEF1DBB01BC1 +3354F15232992FC283EC2D95E93A8537AA790F21F23F9DE5C168C90933C6F9A6 +3A4B773C1C1860A1E3B0C466B709D27C68FAB1B3617A73DF9E018C2E4B595330 +8A0E8D1BDA0967B1DC3A5DA5B96627CA556E23BA89C12A512026CF6D43702E67 +2EBA6786ABFEF3F10E204B9B5B72C738268BAB512ED9B8E1A5DBF95CB75738BE +ABDE1AD1208DD41BA7B9F7081B01AA22CA257C602E0CB9769973B4FB46C1A4D0 +5EC5B567A9EC991DF2D7EFF791AB4A051220C2E3CB17D3A6FE6CE802A3BBE6E1 +656BA3F612E6479BA94CE2020C55345ACCAA514A55C72C940419CBF128643946 +E0721F8945CFA9A7664D3E274AC498ACEDF9C8A9D09E931533CBFB712057B3AC +44CA4BC95BB96F9B3FD438AF46D0FD5CB66EF308278ADEB0FE31CEB9E93E2373 +0306CF0EDFAE6C73EFEB1540E342C89FC626966B7D01C2734795D3402A6BE710 +660B2822088D5A9879DE4C6A74CB5719F766866D797FB846F4AE181ECE9E447A +6FDC5365A937F5D5CDEE1F961210917191CCE511F442B34E2399C42C5CFC8F5A +7B9EB407F508B1B998B295E39C04DDED5571492932537FF6AF76526E739C99E9 +9B702414478863057F264B11BB195433D247AB684722B9EA66B02EE1BDC57422 +6498382B2AA196C1EE9E8ACEBD946E16E415B148F3BEDB889B95645499E61EC5 +DFC8169ABC03A1AE3E51E85028338FD7FD471CED1708BBE55577560EEF0B4263 +17C87251F434C0C40FDBA5E12F3720459421557A280233DCE87805BED9184318 +9C4A55B99560459F0932A5656389255C259ABC6F115B900B8D6A82853FBCD7AE +01BDE047AD558106FB9A5310C42E9CF17A1DA691234BF71E47EEAB720FF71B67 +9723E6514600ED5733EC66969B367BD930D98B01F2DDB5B9A5C162EF2ED10E00 +9A58B69492A07ACA258EA7E7BC0E6AA07C4389BF545F3C54FE5AACAAAC1F90A0 +F165EE30AB18495387C1CA716EBCCD08325EB578BC59C991EE784DE7040624A1 +48183FC209D720FFF4CE907A4AE4D5057640F777A34B16B9E3096A83BB50D1F3 +953E82F3F1A4828BC561DE99582E0AA54B2A963BE17EC5023FEEEA505DF9DF15 +BB5C2D3F4B75625C3FF06C0D843C3947D8EA58AB2A6267BE6E2506E0D58A2DD8 +E05B61C4D2F4231A3D4032175BA3C536A0A50DF906B2FA23A8F54848E81A9FF3 +25354A7D5B17E9BC9CC2765865CE9F8BFF07BA9AD27E4ACB531D20A6EFF49B1A +D479A82CE51E83AC378677E19CB593735EC2E7BB14540B5E120DBCFC4CCD6319 +16E6987A488031144E36DED23AB83ADE5DAD374A35620CE27AD89E54C176C0E5 +B0EE1A88D96A072A8950F425430624CDDB8ABD6F45D79004A72CAD5AA17F0714 +A3238C3E42814D7719A11017A656678DC89CD48D5B92FBDEC2A3506458B5050C +87CD8B9CD0E7FC0CA26B822265E14E2B4812FF00C96FC342C4CE55B25E628CDE +49099B12513DC1484CAE9462F09A946301E9597E11CDF3A31AC2420E4DFA47D4 +259AF53C3AF330DFE4734B72684E50BD5895A8F64FC814B561342CFEE20A56A9 +CD60C3E9FD187D6033B322075E715BD230C4DB95EE677EC9147C78DF1BD284D8 +8FF42450CDA9C4C556065898A93F2777B52203E2128713C1669484C10952C0A0 +C2306E036045E6370655A8D323BBFF8A6F2BE1F9B8446CB5955C9F3F1EF9F13F +CE8903EE90D0F7A2BDA34B279C4BB3D8BEE6A8C256DCA01D7149308A33926437 +85E22529ECD1CC157AD27393B461A9F4685D0EEC63AC9EABA6309C0A36CE3198 +2B6FDFDB499E29B46C692609400C55E13C491CEDD0BA275D2D876E06E4B9D255 +5DBA5322454C6AF0602E0B01547145C502B0DFB31EFCD86743BDF087790B31A1 +25F14F796BCB613625E1D915E6CB8598F17B463209CD72B4558D398B6D5A8BCA +9FE5BE145AAD891E064E1E6E96D32B248E30C550A7EE4E533531007C29D83E23 +CB6075CDA42913296BE65F9CD48A7384CF56B86913D4BC5B11054431C32CB43E +757B7D1A23100CADF5391C44CC9A614B180657C956BD408F7C7F81D31FB8EA8C +8D038351A8F6CC8C8E25671AC4B77CB608B3882B2EA0A9B081C9B2F81EFC6DA5 +CC858FAEED1AE829E6488337429FCC62C2BA5C355154E05B9A3BD5944511CE0E +8BF787EEFB3F136FCABE6CBA3C609C248AD6640530EEC6AD8247E77A6AC12E80 +C82732137D8CF638CD0EC7D4CDE42F80C8C7149244D6FBF1701E1E3C5666D02C +2F68126B54B2333661C32F70051FBB82C750FD1C60FD9F667DFCF8657154F409 +7E99629D2B7B926E8A1077CF78CA89AC5EDDBA3E04FB0A565AE2DF997E05AA09 +73A00018671B2AB71652FF9A059F1C361659523606B78E9B4B10F6D72847FA39 +953ECB88070296C1B09FE8D92A50EA8E98FD6FBACFD178EF5B2BF23150749F27 +2CA4491C4C6AF4D6237EE0E912773A04CA55814FD6EFA493D01D1D911A29BFDD +D53F39E8CD7B7F964AA091DDE7CE9CD3EB8757DE545D074EAA584B8E24676364 +F666FE6F9B9EB570D154E7E2C05A8DB5A40AD741F0585641F4F32CA05A7F3016 +E116A22E4F85AD5E123F07FE0FE3AB55A7ECB31503202AEE7D66BB8E89421F08 +1ED8C1734A93FF047AE8D0F87F83474EEC20D55E9763A4CACEF15F12AE7E3A20 +667DC66A042FB67F3A140D1042E8175E47FD6140C05D89925DDF10BEA57A71CD +C778A57564AA74D7AF7B2074A4580331240782D35E80B528B8950FBCB1A8E593 +F96EFFE0F1DD23F6377363D661E1C4F98104C31D7C0E7F9C6F219AD81617A512 +69B5322506690A672CB9E2877309F6DE2EAD18A4DC9102A1955E94E3081AB800 +9202CFE99B057B1F41EEB87543BFBF5EE1FF1C93DADD0ACE6A7C7E779E011A6F +39C0CA50F406A7F107418B4ACA6A69E0CB46C43676B0843463D5C53AB375B595 +62E9F1FD5DF4E2D5BF34B7D111C8AD6CF2BFF59655C20D40B50EC525386887E1 +B6B11D62A02B7F81F65AB65472EDDB9A196D41D98FD5B1BC6D339964346CC55D +A55B98C5FB4A4BA1ACF255B2380447DE3732AB82E3BD0433D642ADB7D67C2217 +884A6C99345D4638646CEF366A85F92860A0716F3DDE3E73CA907D4BE597AD07 +053CD914362D5C6AFFAC009D29B7D288499522B923394AC2F02191EC869C5A6B +1CBE5EB7B47A790040D3270E5AD0396C05FCF895E2E0AAC4A94C2EEF4B7C19D0 +F799E1507C81E2129F4E287B7318E62ED92300F121F282AB65872102B94314A8 +1108E733828CF33ED983C7F72E3AB8CE5F6B61232965AD4D5259AFEA3FA8CC5C +AE4E0D1BB9F3180312DAE392E28B22EECFAD24965EF9756A29858A9901018FC6 +ED605A1F43886FE9E5307CA56DABBC9D42B0A606307E81705565D9CB81814DC5 +78E5BB93DE5BEF316304E8D33D3AD847332A706853FADCDA40B7F04E11340EBD +BBAE024BBCA535597FF8D3215869F2CD3AA0A2BEC830F379FD005D12AF2CD298 +53906D4DF912C3FF79C0A04020BDD46020CA80748920845D7C9AD60BFF780A45 +99114B8E401BD5F3CC489432880EC68186FC7661F93F636A0CA790FBDBDEE105 +BC0C11C03C246365BD4090923BBDECF9F7501A65E9D6EF06B752B0B6C92B0469 +C1DF26D6384103B405D948CF0C4310CE34B0CCC47C98A38E7A237BB737C7B6E6 +2298F143A5BB9769A5D7E4330F1C64C9EDA7EA34F85F31B19BD546516B3C97CE +5B7906B0FA5D39FEA3C84C48C331A549DAD1A114A43AE7EE8ABFDE8FBC767F71 +E86450864BB71B9D11D9614EAFD6547E509081CC17C6261D3B81511EE43C33B2 +F63601B3519AB2F58A8A03A304DE0586517E0D9CD27E756AF6EC6FCEBD897FFC +89CD5D760EEF2DC6C185126A7B85C0043B785A90901137FE197A57E9CC1116FB +604E291B7846ACEB236E1C3BE9029B7B07D21900D8A2D6F19FDDC2EEAB076854 +6443D8C28B4BC46D7CDE0D841E7B0C43F86A30DA56F6BE0F6023E2AA8064EA2E +DDC9D42906137635BC7D21312C23C19593756F4A344C72E7505C41A401B91887 +9512A20F1E1F5A1E065FC6DDDA3412C255C89B9A77CF05A0FEB510146A0EED02 +13633DE45D4626307B03A012A1C44AA0BC4039744D2EF60AA999C0D6F0C2A5EC +065D730A2F43DA9396A58F41F57787BFE8FA71CCF395B9B68C221FA789279CCD +EF29B6635F6028A95C124C6A3025F2B16550E9206CC3245FBCA796E91098F4B5 +C61BBD21365F39045FB67086B11C32515AD245CD0F50687387DE65DB08CF6D4C +9899DF674E334FC25A3B16FD97B19228951D43EA09EF4D0FBAE1D7589B312AE7 +FEC3EA4A20C9D63B7D9DC1A1C35EF58808A988C20ECCD08A407E8F1028B204B4 +267453C5CDD206E47119ACAB15B690EF50B59224D863EE703C76F271E89A4827 +14E154FD7DDA5BAFCD97DC9FECC47F0F136243DC58963D492C3CA6C91E54577D +669228FA800E18F6F60F47675814A7BD746A79AA1F727539F1A7039B65049D41 +2648B977A75178D2EA2806CCB41046C10BC62E2AF9F61A1EEBB7D762FC3F10C7 +30457B1AA72511F10AA111D6DC77EB18F93A6DDFE8B98625FF037B088556DBB1 +86FD399255368EA7161AD6E779502EEDA86F0D1EA4873C01E8A7BF9CE7CD3AB5 +50DD7234BEAB66700D8F028B2468C367841DD2BF035A151FB15EE213C0A5943C +A0A5FD68B90C976EF9A008960CC12257203E95BBF7C82EFC853D41C9F983A6DF +ED243C9C67CA1889719EBE9D5F684210FABC485C3CA8675F2AAE6360312C191A +8B1A0F18AA901257157CD7840324B2B0D78B1D50EDF9B3A812A9321F3091D203 +2E113E616F09DFBC0FFCB15C54F8ABCADCED58DD3BB2526A81119F2B4FF93910 +26A70BC4AB00D54047D1E997C375BA799635AE4AE0E7DF9A4FF97EAA560C269F +4380E3252E6ADEECBA2BAFC7AE56729474E05DEC8A40ED3E0518732FCD253CEB +71F1A8B18EA41AF08D54880924F5B02D7B181BC76B29A4DF769EC1723DDE2519 +6B2170C3C5D4E70C50A21283ABEFE0064996392DFE93EEDBC854BDE2D4EA81BF +AD04AAC565C48737838933C5257D3AC9BE85E4C22AC3AB4FCF28B7580079D8E9 +0F56C6ACABAB0D38C60FE08F5CEB05BA4DAD9B09B0F9E57C4AA524300E6B8AEF +1250C6432E54D007AEA9B36E43890355C788E233454A7D59120E3277DA3EDB55 +6BD9EE10B356C16E67F93F9891EDCD06B16279125C22F2B0EF90315F574BD651 +B46AD78D7723FA0CA2B0A0AE9C102C4CDA3155E33CCCBE026C5E8B603A3210E1 +FE538DD514A4D1FF897BE4655B5D8D752439F135E6EA7869F315F3E9699B7B77 +810A6989623051130F6E4E1471656F6CCB10A13034FF085403221017732F2390 +259FE3B29F6331804C300132B9586D3C6B08318A71AC700FAA6E83CB3A86B1FD +61C6DC7BAFABD3B49F8DA9E3A98BC94926E07DE98945A45061CD0FD002B90CF2 +B8D294606DA133D4CB0874FA3ECD4843828F6F384A595EC123817EEB3BC6140E +6419208362639835765C432D7BE88C8BB85DB91051F2BB3C247E729F25EE441E +BD3D4A44D90E9948BAD1D5C168D7FD14694599566116387F622B53F0E4096071 +0DD97D7A6E64F3A2B11BFD075C6F7DD953F57C1B1C3FC952200E8142AC1D561D +963C5F5C67A05D8E6872B97C6C54AFB455DAC53C80660E6E4CC554E3B5F5C268 +E0E027D321DA10B59BDAECB378E304D11A1CCF3D72A029FC4BBC2CAC76D1D5F2 +84DF09B99A2249E6F1A0ABF58707BCC2C460DB4D4D9250B0FE4283BDE6CA55AE +BCB1C85A373E382ADDB1AA92B2FAA83858FC6444942CB783D5B639D69344B8BB +4A8C7DCBBA3FDCD2B455ED377C3022E2BA3D7D717468B42B731CBBE3FA439E97 +EADECB5AD8DC8ABEF73F510FC6039D001EE8DE53E239594E64428F2A460FC809 +3BB40C9C6A8358C7122B45483FAF3471F164D8BA84D4A844E09188B4C34FABEA +79BEF8F884756AC909B70460BC22C6874F966699DFD1F3C54FA1D2AA72264E93 +75596BA06673B01D2A763CE177E248960BA0F7E3BADD59265C8876EFDC6FCFD1 +81469DBC59AFE8CD07EA8FC0BA3FEFE43DD7D527D84F685FD985B3A89BB5ACC1 +31BEBCE59665D9CCA179B774390A1CA5573A2AFC8BDD6D6901FEBC9CAEBCC5AD +9CF26EF10987154F9CA620F426E3EDE082A2551C5E949984C30CCD98E2B1D0FC +3CCAF3EEADF436ED12108134359B711772E6D3C921B02677BB15EE87DFA5A2FF +A3F253528D2D0828BE0778AA599900DAF72AB2C17D1513BE9630761128C366EF +B3330BCBC83A5F745D0F163CFA100DD8177309A5ECAA912C8FE8546140587FC7 +50B14AE5B8DAE05BD2399CD44B888A894F79550DAA5DBC84AAB94E62F0441A6D +3E7D008F10EE46C58F1A92994269B52DA17A8266BEA8EB4BD99FD39D5361C028 +81FBD28300E40BE415F7306C8D6D94713869722A6A179F5FA66A332CE60A0C39 +97AAF72BED0B337795CEC21379D67FDF7D5011BFCC60CD433EDE8A3768455F68 +62A9CBCC695F9F8B4A265026B1678DCD7ABD8FD566792218BFD7FE5A61FED3DA +9307CF0FA486FB636D09E95D640A95483A929639D14141679BCE01337A309ABE +6CC846D012CAE3E838FCC4FCE3372D020343A155EE284BD858C33A245EFE1B79 +A9FBEFFFA2B402ED5E17A9CBCB2AB9B2B131CCA1484291ADBEAC711503405F17 +66570740C63CCA6E7AD5871AAB381ED4968806A911D6B6A2EF18CA9C6A4A800F +95DB24AD68BDA434CA725D17F0AB0E99E339967FD4F0455D7301ADA41ACA31A9 +6A03698C9A012E022234DC03E2F3276D2DA1FB03955C191D2E8B4DDDD668CF04 +23F806E181DFB4CAC3E4B3C66E79AE87749C4083E84848BE641133EA61D06708 +B3F84508985C54352247D3B42857C49382FDC78F5F0D6101908673D90F4ED17E +040F0B0F6EF8C1AE38B5BA866A45EB0DD3B3C9BB3F342B7F504A37605609E111 +1CFDDFC92101E71E3F6DCA38F0A833D0CDC52CF1A03EC5F49506618277D382EA +94DAC5B910F48275CCFC2AA7181DE0675079286DD6A06FC691989197A40305BD +246A28B5F578E458B39EACEB1361AA5DA481563592DB0C9F03DFBF4D6D84D72D +C6FEBBB5DD1825735C97C51941B9CF05DB32D1C9A33A0676AF6A652077DA1FBC +6E51CD90D46B767C729D54499D392EB6202DC498B57A50ED44FABCB78E8F7B23 +5337EB2DF8395002AC4E2AC04974C9AC46E01BB7DA9C55074EA3BE0FE9F6846F +9C573876BDD9A1086838430B9E5C42246117D7F5B2A8EE45DD30A6DA2504E2A3 +2CAE453E9747615D9F0A0BA9F06B0026DF21FDEB50A4FFE7952FABFD6D17F098 +79237B36805490D764D1843DF4A0190F094778D114489F6D2B5FE89B614BC0F6 +23F5A366B2AC497155D729530FF1BF982C82D24204826C6AEDCB4F3B4AB88CE3 +FD55E650E8E67214253D189D67AC4CCD9090E0482CA19977166DE08230D434C6 +41405B7E4AE2D63BF49E78819CB661237A9E27B2C2091E6EBAC4AAB0C5021B26 +1D38AC2EE717F583B31AD83326080FE441FD2AF2637178F7C4EFDBED63A32C33 +19C315F16BF7D12E78C11D9D769C7B52A453016538A2F72F4FCAB0DEFC246AF4 +FB40A1B5D3520839FAEB7B5E9BBCE4F0EA3874C2426085620B7E62C4FBB47CA0 +7C32065EEE2B8A824999496999F06A6E34FF667808965E11605A19B744CB775D +D0598DFCCD73A530DF88D72D2D467D9631A8D7E665EAED42B3F74586795F7B43 +51FBFA148672EEAA600B76FA43B0D14AFA5BC1BC57A8C13445FF035D5A754687 +986A1774822DD5CA273D64E2D2CC94AC913859D435DE7C8DE64C5F2150BB395F +E55C60C898DA92625462846464F073F2699642F4D3CF0F849A7D9A2B2FDC80C1 +D26C06208191D63E97A2AAA73EC4B96373F23D4FC1FB91B93899E2A6DE369D90 +830C451C3462DA0137C812BF06E8D219B90DC6A551FEBB2A52565030772C8657 +DDDC5D3ED99982F6A3F9FA842C550FE8A5A7A2BA36862EF2C3A413EF94F437CC +E3D51F5196918E4D9F1AF0CA1110AC00F963EE17AB1A2F1B7D6242C29D98747C +E91E8A6F924E89B4C6794677EF604FA3235E8F44578A5A87CE1114631260751A +909C7274E941FA9596669D9FF82C29EC8280B1B326EDBC8812D2EE2DF812C02D +AAFFCEF6165985DDBA1D9537AA0948A4A797F01B316FFF6EEDBE874BD467A239 +E89435CB0AAD16CB06D3401F42EF7677C2D8EC60A395F716687958E5F9B6B887 +5F9C29BB8320634C9892C9E72369A9CC1447B51489743E755363E4624CB88265 +4315F7C6C62EFE3916F7580B3E226FE6C8B3429AF51F93DED861D22EFDB49B3C +6C5FCB5893774E880566DBD66A408495FF65F8BB99D04E33F8830726B20C872C +8F4A8537542E1956C1125311CBC0A014F0E8E90124AE145D2D8FB12D113D79B6 +6D5828941563B1C3F2EC506BD4807A969279AEE347AA6B552E328C9D11AE52C7 +61DAED073036C79B9DA40BACB90855AA3CA93020E2B553BD377C3504D7BE25CD +5A43DD1C53FC73E3C2E1690FD80B93C4C6AA5C76324F32400C019D6360B2BCD0 +F33E15562763487060CD620C5F48C40000671A83C22E4F7E3F5F37C9F70BDD83 +07085085B3F881555E1B8D0C45F13C95916907CC0A8E85EB1BE75A3382D16224 +041858FB54EB7F0B8719AD892B123A2EA81EECF9CA572AF8509B94FF7DCD544A +4CF9A7235FE70F97B9D817EB60E8A809BEB69DC4FFDA1653F588896C4C3E2378 +D1FE3F902ED27E3AD5BEEA4A54A88EFD453B380B06F222C088C5CA5536E1EC70 +3CBB82839056CDCA0E770634B7E8320D856487E9C4B02CAA605B5510D563C3DE +A0709BEB02EDBB59432B65F5D27E38F5F91290B1C871E9FF9901BA8A3F938659 +C5A5D28E001A3F8DDEF24DFE7211081ED9749FF5A753F6FC8F3064ADA79EA8B5 +201161CCC9385FBEF61739C6F103EF29135978DC77B9C374695CE7209F3C2B64 +36CC939E58840C9FCF40888EA836B6EDD24B38A678EC8B988865D41E1389A32F +4B6319BF59D48FF6349C98E611CFE1E7EB55EC557444F22EBF414E8EBE976472 +B2F7580731D42BEB735396F8F144587665BA950F43802B7FD8C4BBAA4D25345B +736C90FE9838EFA1BB52B1973ED01D4DE7E7E1DBE08162C352B06918CF62523F +A135923EC6D932F5DB3469AC188E1409A83839C3F5B9A4967B1E77889C2DD5CA +98D3038CACE8D9623BE6425378CF5262961462D7FF5F2761C1BBEF2A032FA6B2 +7D67129F35D5FB609E5E60398CAEAD4079A9FB008F8EB9FFB26C04914ABAE0BD +AB4875F982AA68C8DEA77CF1F0F7BC8236DFBAC37302BB695E7102373A9DDF67 +2163973FFD610BBB8E0D6E4DCBE688D092E6583EEC11CF6F42245871A3F86AA4 +4D59A9BB6D53E586A4D187930AEAADFA4A072CFD97E3973475A8DDAFD6639535 +44A41BBB8F81ADDBCE14CCBC9DB20268AFDD05E2B85779B0E0CC49E200CFCDE7 +B6B2B98034BB562A43B080360966D51E1DA0EEBA8803A9526F86A59B50861C2B +CE3D72A03EEDABD9ED8935A1C8BAD1D924EE7A118225A576830D30FFA3B2AF1A +8D6B4AB990D3DA5428F6CAD5788553BCC2448DA0896C6A481FB803E28D7D335B +2D569A4D801D66F27175EA483381F5B6ABE1DFA739AEB016C4B95CF230146B59 +440F72EAF259ED4AA1798345DCC04786B8BDE68BE9D85F8AB4FCEF54D8E72DFF +7D0BBBF7D4A79E71CE98EC0F130A2414B4F958DCF7E138C8A15984693FE1A092 +5204582EC8F65BC1E4AA0654D4392B78C29649431886B236C95C11A3ACE49002 +5D83E07965B396FDD136B49B203FC9E48A8BEA97CB77C6EE0F6A5AAFE249AB4A +3194A802121CE314FB773F02A5A1D28C040CEDC32A1EE958018B48AB84E563B6 +DAE93C28036FACAFD6EC351D7960047B9AE8DE4845536EC7C02C4AADB202FAB8 +E32C9FB7056D17A5CF6817679E30A2E58BF2531F8F1521F5EB3F58EBE1EAD4C8 +1BF11243FEA3332BFC647ADC8B7929A78D105423C6E34E5194BD8C18BE0512AF +5A989420376FCB97176DF17EC9922C42E00D1987680C7CD96C3C81BA0C490A4F +A54F11154F3F105D05B465F6711DECDC06391325F04875805F0BE3294B4B412F +425998A37BAB0DAFEBB09F5BB79C344E31FF93A81784CC3B334ADF4E515045A7 +22B5F88737620B4098A7B38842A888AE61DF3E1A5A40E41315886A24C71E744D +05FDE20901F03C5D5747789A686303DAC5690FDCFC5E09F3A031121509455FA7 +8FE6B5C878495F39C40E6241E3A5AC629A1872E2332BEA5C0831D1106CA169A5 +3F596660252B63AED600B8388E89202F81241BF0AD676D1632DDF73C379E05C4 +315839EA8196F9FA4065294AA1770F75F6793D29E585737657A8FB0E3946A6D2 +304F2241C79CDDCACA3162B28EE02C9BA50E511DB84463EB2EEA28CF96D3BDDF +486E44FB8C4EAF0A6C44B459DBDF135863FB8B31958D49BD0C097A4D15C76D00 +EE844D99EF977BC0E89287B0C2C67C06D2256E846F85DBBF41A7059B2BC15D9C +66D5D7693642901D17FA0C68FE80F3D3F7234B6E8D7067658E23FD09CFDEBAD8 +6B35ED0A1EA4A69FD7E8E7EC16394C1E3CAAA9EFFAF95EF6C13230DEFF0302AA +448B60136747CB51427943E0DB1C1DD087AD6B284DE4E354070CCABE9E1D5EEC +B6975793FB09A9655D36BE2D4A3026DC4689294DAF0D7B6320C34B5AC6C32FEA +7E0675B45D3967D1B476FEB52744FFAB4BB49970F13642C89FFF63FED0D6B350 +2B5C2972C747FA0B43C834363D848F99AF84FF0FE8A786D26C4D3167CC08CC67 +ED566087EDA4550120253ED1F19F1A4161E705A3D8DE6DF75C330D571FF2AB5F +E022B58D2EA582091CA3282EED6F075FB96000B36EFA323EC9B893A2CEC57865 +09EEA572BB127A4DB00331BD574C258CBCABB02EC1E088F076EEE22362E93F49 +7B4E08CB19E55431C59CBE634FD12B28D56320FA1A753B528FAD98DE5513CE90 +CC1B0D722A4437FA1508F6FAB9BB8F3BF38F7EDEB6947D2C46580A7602FA90AB +0062ECD827C062737A163E1797576D1C83A31E0F4F892F7D7F83F1F4563EDFB3 +219A03CF16638E6D5E7E961EF4341AB0D7AE9D80B38A0FA8AD4B7D24E4071F04 +8A2B4FEC937C73FDC45CD570DA8C96D56FC104E39EDBB672478D9C34171D93A1 +3A995D5F9306E3B39B35D04D76CAFCBFA1398465FCC9B544B2FCF97424120227 +A97CF3B254084F65516DF48F799D6D4F0E830314E1E7FDF23847B7B22CBB4739 +708B3C0FB3043096AAFD133A43930819F5D16C57BC9A5913B8A552A9CDF5BE41 +4B29F40F181A1089EAB1E1D4298EA03D94BB9D1365BCD0613CD5247A623E0603 +23ED64BDCE80A76F28AD9DBD65495C2E32F8BEB374F2BAC04DEA83299A9FDD4D +5D13287A44190D8CBC8F275AA695D58E7DD99A958FB645929E1134B5A796AF5D +B4DBF734E15633F17FBCEB18A41805E56D3B33C18E0D3DB638B5716FC11609BF +42F01966B3D9E2D05DFC7E61326FF476C5973A6863E0318A95B0DA88F668A6CC +6C657707388B0ECDAC67288015611D0AE7958F52D7F7C380FFD27AC1D3B83934 +C3F22276DC03EEB1DD096D86A24119D3FF9194ADF3FDBB09C42FFFA860550CFE +290553C71DE6CFC37B9A11C22F859D956BC38CF9A4FCEF72B459F44ED1B31C66 +79D80C7C88A7DD4833EE90FC64B7D8CDA2D0C98235665F71B07A3570189C6C88 +FC4AD8D1B0EE5A3BC948004F39963DAC6EBA7240DD832D60472C4F088274CCD7 +A97A05F6AB7BEB8292E20DE373513632C9AF5B1449D1D03BC4EBFE36DC25F58B +75C2461DFB41E1AE20901F01A15362434460A638D80E2F569DD4948C1674B8AE +C5B1C3322B9DAD25A9A99D84932B2CEF8E074F2C031D9BE0CACD94CAC6ED149C +86E787ACBD3CDDCB45057D149A2A155274C6FC165797F5A0973FE29FC9D3914D +1F44B6CF95F23BB378C06447810BD91402DF356E30FB965A69676DD932659481 +A66CA8B8015B4112CC1EE2D90FF1BDDEDD4F80A232351389CABDD596766F19DE +4D93DEF877106A54B0FECB005F41C9468CCF2C84DDB15732B015B2CD1A4155CE +52D8AF86FBC1D97D8249A84C8CF54C271A206CBB0291C9A83F9D3F80A9A94052 +D090CDE951BCE2CC812F66A47202F44AC93FA73A7987D3286FE133103B364E5B +04F3BF4907EFD49128AE6C07DDDA38A257ABD45F13872E0D70A19B82AEF69344 +01F869C42AFE47B8CB550B6EF46B853952EDC511A909B4C8904B4BD121249977 +5785489C28A02A3052D5A122132ED896BF20A5DD0ECFC08C933235FFABF515A5 +C7280AF5CFC4C13B6F153AA92EE18301448E410B882FC827343444B8AA88E281 +73C15C38EFAFA3E640DB986A69B0D2D882DD31B2BAFCF09F8AE98F86761557E7 +BD3ADDBF480C7571770CB086139CB970FBBB4578923726F492DF82FDE83E4F94 +171BFFB8B11C6B195CF22684A8D5F0D63C57E654F196DEFB51A5DC591FDBEB4E +28310F8317514EB7770041BA2B6172B96E691D4F9F289B2E785058F99C288EA6 +9FAC0E3D8D71EC5F16F1FC1F48962488CDE53B1BA5E57FAF21610326F3CEF7A4 +24B314C4A55AD1C644604EA428830304AA36451AC1FD41F007E0AE84C4DF757A +B85F4F91BC123DD926A47161FF996C1EC4A722B912188E626AD7D928526BD12E +ED244BE4CFBBB20676C3BECDE1B734085F00B72C32267DCF002B47E6112BE3DB +9A72953B4B34F98B4FC3E80ADD37A8E2D408007745F51F4BDDDA57038755F031 +D2B09BE5249A9A2C9BFF225C5C7AE43D97B761501B610891725CE320BF9C7C85 +93C9E9AC2BA6947535BC406ECD989D01728EA41D963A8753DA2A0C9B4D9238EF +826DA874319F994FDE1859E4CC3B17601D1495D1B3500AE1B861C55901D9610A +25078C498AFC38B6C64118EE9837E5C61E03B2E7CDEBFD8B37646D649B1A8E21 +B6BA6A8552FFA55102A7F6BF6F8C0A15C66548AB867957728C673DF3221EDE4B +022428A6E829E6CABC7CCA6C1A60700FE68D11C122930FF0D75DF89D89252CCA +692CC02DC52F158E3874A9D030C8EF5B0DCB633B2025C203AE79636E1B2497C1 +51208C4DDAF096885EEC50CDCA1133179227427AB85AF800122A7B7A506BACF1 +6AD4B3954794B5D37F42AD94A93B90846C55E12B8943172C8C4715685D0EB537 +75430F0A6EF94CCE0B6B9D71EA42571E9E26DA0840B0624E1F97FA1548F45FCB +FAA189A40844D88D87AE8EA4DE29CD9E7DF322016AAB4A472DA4DE10956E3DBD +5B8E20B8AE941CD8541419FC0E90813FEC3DF42FE4F8A7C67C661F1AC766A278 +EABCCEE8F45150E4EF2D6F967E98CC3E1578FC5235C9111AE4ABB028A4E8E683 +E39056B5F1CB6E8F5EEBF12BB7DABBA1626D691C4AF07767537462AB6472B6CB +A9F4CC1DC29ABC46FBF92908E1C09D21DF40BA8E0D9376449FC64B1F91B13F10 +9A1A484C7361EDC66F7603CB5C00D988E3A34057E2AB21071AA4554D1234D6B3 +BF04C440FEE0ECDC5378E34ECFE504D9B917543DEE8D86A1A1AAE111F7870C4E +D81D0B277CA333690FB282 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR8 +%!PS-AdobeFont-1.1: CMR8 1.0 +%%CreationDate: 1991 Aug 20 16:39:40 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR8 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-36 -250 1070 750}readonly def +/UniqueID 5000791 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C +68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 +3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65 +48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3 +9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB +0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB +8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F +EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466 +FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3 +9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62 +D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8 +9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5 +ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6 +10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582 +83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493 +2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29 +044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49 +A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0 +23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413 +19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42 +1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39 +8BF6B05F0B97F8FDED86BDA32D9EE6204BEE321529D58F28F7A9B3D04A4469E2 +775A8B43DF5350CA25E95F1794CEA94B99AA02F3498C608E6277595DFEC6CC7C +965B69856CB2AFCAA52F66F5A019C999A1C79906EADED8AB0A185F84F5FC544F +B289E583A8AB4726F9538F4DDEA903CC1E623DC5EC25CD02353A4C9A63CCB7B3 +483A481AD7220714EED8EA179FD74724C7D1F7032527E25A43FB59367B10F3F9 +4BC23E2AD9F5744EB954C8A0086C0ED51450A8EE7DCA2BC27081C4F49FEFCFC0 +DE75DFA3E620747E85ED0F66EC590FE6CE40D08497B52B89FDD0EF6B1D4C0A8E +FB12E7A909CA56C9A44DAE837CFB4515412DA996C9E3A430D48B20671F04448C +51A14CB5E9B2565D33A0C0992D9456F3272776BAB972E4AD37CD9538F78BE951 +9A5898C0E3F68EBE589967254EC4E10B6010E386ECF44C742D37C64502DCB250 +E9CCD2AF341A18836489360B950DAB980CB0621155E647B6DE953A6DB1AF51B1 +31375114FB8E6AC909DF17A7362DA2ADAB0DF9ABF040426957B6264BA0DF2B48 +1AEAD8B9068A3E5A4D85166392CD12ED01738931E5683E83EE999C08C54AD19D +FAE794A00EDFFB4F430DFF757CC2163DE77D79C3F0ECDF5D42A1B079729E276B +DC2691D6B29EB3C37824D4A5C7A452C10C98E38FBD2437BB29CB8964ECB475F1 +3DF9D1EC2F4723CFC914DF067470AB81C22F69FF0A615F693C0BF7084FF67DE4 +741E765B47E222EFEF6DDCBCC5BB5EA3FE507959AA9CA4FF0CEB615938095738 +AE8107FB11FD1C35A85721CAF2FF491E90F4F15B4A8F8CBD72EAC28909FBD231 +B0A45D94469D2C03CC351E5C4127CD2334F94A1EE91FAF19DFAD50D49DDCA165 +1CC936EAC431720FEEEC3184C1578EC4E9C6084EF6C6A30A327A455DE14E72F2 +0ADF4A1DC4232577BA25B75DAFA460FC1E018DF361AA3A8874EB6B445F973459 +83E3C1D441BCF8A100C22DD2B94DF2E3EB57C2C792A2C789137911DC67926D62 +2848C29EC41A771243F46D48FC17133E004F9DA9202364E74773A22999E03437 +1D34277B9724E78020DFE394298E990132C6647546B2F95CC2B336C40A335EAE +85E5CE36670AA9E28C37E43AE4D5CDBE11352105A1A23B2B781A88EAE094B83F +D9FA26C3F500B5BA7E08758777F11A110679044B09CE57B64D1EA9BD4BCB4E71 +E15E27D15A83FC12ACE44971B199C9ECF06F20DBF062B6654DC6E15DAAED262B +D645A7B0B9F6A4159201A1650DDD4F74EC78F5EC876A1F58F351BD3AAD7C46B9 +076F73EC8972CE1DA144C78E629FA13B34AF57913B2101A4A236DDF2FCFF1834 +1C24D8360B9D8A24CE3AD889967CDE59D26511EE57B2C06F05AA04788E1231E2 +854E0A2EE1A5CC34B44547D9EBF87FBC6D1B9E0E5C0323D1BC82EE7358F247FF +6EC3C4F7817F405F91B5AA3FAD663BA2F7E28FC7B50427449B942D0A3820D2C1 +A10EBEBAB909EC5072E37106156859B98B0EAFAEFB8E13A4EB6A1E004B525C69 +DDE72B04661C425A7E03FE440008695D45934CB6192B6A30A5CA8A3FC61D1EA1 +CC2E1F17EA42F6A562E063C2E66B90189D123E6570A485D5019BEABD9C39F639 +6601DA48143C88488B0484E823A382172B3133384336F5369928B5161B7AE927 +710CB575FD233FC0908DC203D3B9A8ADAA0F454054BD29B037F3FBE0AB0F5A50 +A3B80660E06E62CB7306FE8612909E8DF7A1CB7B39B77524CC7472B3964C7C21 +7F59E69BEB0EFB64AD1F79C38D246CB63F61BB31DAA2BCCEAFBC1F418F2B6DF0 +292B5F8A4763BD8BBAD841D0A08D3145064510D427C5978470067ED239D81F6B +0A10477AC233C934CEA58FA051E7F1D915CCA135A0658BA7736574DEE0887216 +CA99343D134715DBD2A5C46B3BD995A4B106DFE5A24347DFE38A14CBBAE8DBF4 +F8B7F782BA8FC181C3F8FB1DEC2C706D7DCCCD97EE254FAE1A9FC6B2466C04AF +626E2A59C8B4E96FFF0DDA9872209084296276E54C5E8BB93E043BD9C9A36AED +2C3E82BCBECEEB0C2DE7356F71235D9CF94EFDD4098B0DA80ADEC47ADA99A946 +B79DCE7274C6DC92757550B7FBF608886D3196206A3ACAAC643395C000541E5D +19C9EBC62BE7AF3F3F81BBCB0476BE81B2083E8802DF643E0E4A8C873D17BDA3 +76141A6F8C990869A3DCD7AB7F46C701DC92ABDF4AD9F38F01D2005415C1BADA +9832C0888E5926C5344B85F4830C17FC928A585CC745DC25A7CEF3B4D41C6680 +219EAF65CADA5524F5FB1F09343CC28AED8FB7A164C25F9CC5E8FC6180D08D88 +509A93BF0AC28ABF2B9C27D5707C4F0188E843E3E8DC73A58D74B4D88525F699 +5B98C71A6982D6DBB65B105B2D6E65E8171D915D8A1BBD89BB160C96F478D61C +EC0FBEEB9AF29705CCD13061097953825DA7354112DD72F1AAF30EBF508A5A02 +6C7680AC7583974BF6A82F4AB9F35260EACEC1C9036C12C88B28B3C2467E4FDD +A22FF5FE59355DD4BFD849B5AC6C9F52DC51A3B8A4CD1AA7491E785B0DF81C1E +33B610B2F1B3595C0D82B86789D548A92C20F5177B17C35A961F858D7DF0CE07 +CF9A957E2FE826F2C6ACE69A2082EEFD86D932C9C3574160AF7784CFA05C1EB1 +A881D7AFEB71668F1DEDA3F8055640E7CB2E7DD23139FDD37373FC6DFEA85C22 +B59330D72D6331B8A1D28A9B3D2172A177AE5CF0D22D28A1911F9F3FA700D355 +F84230610E2B79A735889C5CC591347AC17F9E65C03C0A1CDA2CEF75CF01D6C7 +C6D5F727258F499B09B0A042A97F7ACDDD7B188A5B917E3D7E7A411A0AC84F59 +B96A7DC581B81019168C31F7E5F6EB8211F1F44B785391D41E89565385D15D9F +66FB6986A66B2460B4C8229E244A322ED81FEBCA8E2827E4A5E54236E33A788D +0A06625F92AA6347A73A477A6A37292BDBF2DF42D5FDB1027DCBC8E481147AB3 +7779E5EF008A67808490E7904DFC740E38BC185CF0C8F0C9002606D31764AE5D +FC5F6E9C330D43ECA95380B988084074E8C268FDFA357F7045B7603DFFC5B0BD +01B257B0A754A14A565FA0D8C89CF7C4C9FB69445ACF7ABEDBEEC24C87E89889 +61DAF3144291D4A8E7ABB3CA95F9E89AE84649419A20ACFE872E8BF81C523626 +6CC14EDFE5565FA25E65290EC272E2DCE660A916D60C07C4C9CFBF539C7B5497 +C55F8FA22CC53374F6E07374A73B0F6F68FC0376703B6E73B319312448DD1CB1 +962E16A84A3873A322E7B3C737B42E18D53B02BE9EDB07D21663D0ED6443538A +276EC167D6DE7B94625C6254FB5555DA81B5D6CC92191D15C002F813A73E19A4 +A7C63106EB5C5EA7BD9E1FF3D4C3BFB6265C48AB48CC4A3FBA55B0D2D8795D55 +484F3E387BB56602B8C2EC4D04A8E123AD02422D1FA04809A7F2884957E9DAD7 +EDE67F91D63FD0D73D89D9BB9126B5DF3C1C09CFC81A7C60CF6463ABA6197D2E +CC1E8339E2F5A26569838E66E7024DE8BF50BFFA3F1E6A923D363DAFE4751B48 +D5ED2CD68C5C8F248CA0C0A9B9CE506BE17B4044FE73003395274498928E081C +450385B2F2D9FBF91871109F137E52CCA8035C9B30D3419901F342AAB26F874E +449F214DD406C210DCC35EA89E6A0397E5AB4725586EA12B8C10F41D292F9140 +115A57DFF19496AD04C0D9A640F7AA25E9E22A05B23C7A6FBCC115E3DAC7A34E +BCE9EC19AE54BCA3A7FEA7AA0C23B24870FBCD9BB15AB17F7002CC33ECD6F0EC +4D43607C98126E7FF7A59EA187F3DEF3B6B1A174926B2D0CED8159B3741C0F67 +A16AACD009847CAFAD44B338D2A4F3148D6CA437A8F7709AB4D29EFC4A37C256 +5A3A52282ED1B5114C14045D2A3806C8A7DB6854EF7E158DB4CD6C4F84A46047 +098F6158763C0049A17CFADB12AA198B74E7AB62805556BD9DB8424A1037136B +5AE30853446E67EE01770DC8153A906FC71DE0D8C85B86DDD62E6951B77E1709 +900338A3CB40515E0636185392979B2BE52FEAC763930A99019C675FBFB94041 +DC09D119540CE689EF7C3ABA5D62573F6E4559B44F3F8AE1C3D04540525A10F6 +501588CF0897D767C84E00896EE7CEF9FE832E772AFEAC08B1700F8F54056E19 +F05D44DA94063E497FA35C720A6EEBB2156BC1D91E68101C366AA5BC68CDC2BF +90CB15EB12AE0F234B370EFC0B4A23C4E503EAF5529A032838C87F51FA806214 +41BF8EDBF22C89F8905D4C8F7260B2269180C6E3127ED31ABD878D74EA7BDE87 +F597D440AE923A58AB02D27E349CA7CC043B946D89D81C8AE4264863989AB2AE +5061880897F46E6CF9519548AC8A01431C746C482F4B4C6166788D372CE9C997 +E233DF9597857AF04E493EAFCE780FD229D04F4FA02CE51ACF4BD4CE1917F19D +12C4B25B1A3575F0B41317EEA24DE1BEFDB1BC3AFD5F61E512238726E8E3A31A +8B2F3BE79948C8B1B6CA815AEFE34B90DB93B7282C775D1FE88632A41B4FCBD2 +A05A9A04968293E79A8FE18892B806179790119BA3FE378B2AC882295A25C7FB +59C0F458CB0FA4B103153A2AA534C24ED96976843EA8B30E30E6DB279426C24F +DB7D8ADC3FAEDDE6F204824C5ED8A31E10FA0B8DAD46E1BDC4E80436148D1134 +09D08C56667DE58A1E78DA8103A4E9D6ED7DEACF7561BF0C85039468226296AC +861156CB0F0FF2FEC76D2A32E7E49C48F06A95D61A2FE40F135634BCB99FE538 +1F8492A5CEAC9CD4AC76533C237259E077AF4F1F26B3D1B0EC473CD56D3BAA8B +CDDAE26E7CEFBED818C1DD83AB0142EBB928E6FBC0697FD81B7A73B5CA05A16F +11EC2428A8A77674D63707F0C91D78EC64F8D5F648199904AFCB27DFB49FC8B4 +CBFC4869BC0A2FCFC7AB259DDF59A941CF4A1D4AD4F451CD7FBDB168FF72038B +F1578D89C8F938FF72D408753AD113114460BEB902B7A0EC4F37A6FE3117E4CB +625A664D7FC480E986681C7E3055036ADB8546EAC44B5F12CB4001039A9DE56F +A61D523DE1B0F83609E46E38CFE4146049420154A9C7C75622032404970B674D +4F79BC99A5F3F720A45709338E8C6A529257281CC880C8C77CDD0F7E6B495D67 +AB139E3DA9CCC3C99306C3CE9B0E53D77B1A009A261B8A22B789BB67934EE7F3 +A1CA8C2170082F18903F335085FE5219EB3CD0ED4DC01C9A45426C26046219F5 +3CA60CADB58F6ADE1FEAB848184067C6ABFC365553E20960EDF70DC319FF9574 +654155F8AEFD9864A839EF5E0327291C8784AA2DADD37665FD8A2D70066411CA +C88205E79FF0E2C2FEED0661FFD3736A81A26AEF35599A7463B9F036D6B22AF5 +A6B0C9254F72BECE010800BB32100A745954D96F9A273D5BAC6658B5433BAA80 +22B18397514F4C3DA8D0AFE9ECF437788CF11071BEDBFA9D5FCE42FB0896FFC9 +629971DF9C78E9C40B065C909971202797E90387D12835DF3D305370094E9B37 +4D294623FD09CFDEE5CA6F75827A69303D30026AB518BE812F021C7B25AAFE70 +6485201252BE6AD4F19F33A18844904890003E57A763FCA21B0744BDEE1473E0 +CDD16D4A0A20DDC9B9CCD3E7146C95696FBAD1D1426C6EFF8733219106B56B58 +42DFF423398F878930F85DA3245F6E248E98674144209F1DEFC9BB3D80F4425E +F6CF06E89522871DAC2865 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY9 +%!PS-AdobeFont-1.1: CMSY9 1.0 +%%CreationDate: 1991 Aug 15 07:22:27 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY9 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-30 -958 1146 777}readonly def +/UniqueID 5000819 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC +65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380 +D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C +77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA +15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F +491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F +1A06C514D91C4C937D4E642503392B1CD1BF5AF0BCA28EBD840AD76CC39AD7AA +CF2C05711374F7849708E1106F88737C9AA60612D384CA8C173FF1031EBF6EA4 +176136DE1B9F29E40E82680A2CFFDC24DA05853307F1D1F6537D061EBCBCC5AE +E6316380ECD8E63ACBEA9FD1FC28949366850AAABCBC9552CAB2CA3BB934C8A2 +14C9DFADE24D9214858B1D42B2171DB18A475AF78868C2549F19555AAB07F586 +58B28541C74E14F28B68DA42A9D46C031CBD74FC09BFEAA3AC1DDC68B7B71B81 +6003C9C6AC8EDDDC046D247A2B8AFA63A3B1BA1F12AE0B4DD07327F0138BF470 +4630E4B5DA55C194F454EE2E872E0ABE6B879DF2E87CF81F75D79F458F7D3F81 +FDB76C15EEC4125D18685E1D8591C54C0B0D069E2ED73434617B9D30E64457E6 +1542E4630E848948FF2747D5C31B9C314AE108931003DB9F76644DB43D245499 +2D28E8452E50B1945E13A5DE2A8B93523D3671D1C7ED07EAB6FFB559E5A1F828 +B22D2FAF349B40C3B31FE806595F67C5E75260514F456FA0013668D948619514 +0EFFC35C1AA131AF8578A254AE62CA75A6631489C78CCE633A3B302BFACB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMCSC10 +%!PS-AdobeFont-1.1: CMCSC10 1.0 +%%CreationDate: 1991 Aug 18 17:46:49 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMCSC10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMCSC10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{14 -250 1077 750}readonly def +/UniqueID 5000772 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337 +900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA +87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98 +076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518 +9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A +FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD +B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9 +CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30 +40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D +C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B +7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5 +FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC +81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D +5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90 +CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A +0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB +E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091 +22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060 +1D1941E73310943FA782532ABB1116532AD67AEFE0758C051241E301C7E13A98 +6447EB0180BF6799814BEA4DC0F727D0A40B7BC3B1269CDE174453D6A3C4479C +146001CF717DE25AC1BE5AEA5F2F1C17719251C429D3AED19EFB5F708A36D89A +354AAEB20A954E4FB9682D9D227FAEFB5CD1388867E0860EBB0E279ACE74934E +3D12254656E004266D501B9DE05E7FAB380E4B69467E641D0857F13BABA4A940 +02BD22D63B9600A7FC571C1A3AFF39B9DF9F0DD9F396497CFDD52BFACB8CCDF9 +FF9277FBE2D32303E4B3CAD99F79A7F45618B900CFD718F9AC9FCC77058D9486 +97FC192847B08CAC407B89801CE23E7D54AF9DCCD0320CB64BA0B3E41079316F +19B5A779D0BEC5FD5763BEF31035BD24BCCC838444B60BB1EFC43921BDC2DFDF +C3CECA21CC24C1C7C3CF17D2565DA4EBC9EE79001A286A1D0E0E8F48E4FA44DE +5DAEC3E84B688D4235E35D78264A9CC83AED6DDD0E4591102EDCE85F2FBB474D +CB049179585556D6948D6F720F88853586A768547C085FD2DAFA1B4C986CB4C3 +A92B580C149EE31212E1A0EC36D1830FDDE4F19FB39C2F64586C292AF3BFBED3 +6E3E8DD85124644B874A723D6E9544A3E56BACE9D8A0CDE0CFB0C334258D6A71 +F3A580D03195D0B2B72D92B4EFAB8F8151564C2E86CDDEA43546DCCF1DE7EDC6 +FD8123D17D3DC8A7805395A556CDB49FEFE2136DB8C62B163C37FF258FF675D6 +2D9C7841F7F1FF81389F85DF6382DE676B524F3956216CFECC417767DA7F55E2 +8470E949ADB93BE1E12B281532463BB4CE03C47EECE8D6C4AA13BFCD1C7313F7 +B626AB03395711F8EE5880A5C452E6A0DC1F25285E9C41044CE657AA0BFF7240 +BD162FBC9523073CAAA4790293305910CB07AC00893F35FDC0F0536C84A8D184 +E85542A95786168E1477DFF426E56E03028F3209A56995A842118ED577AA7A2C +735B6808DFEECF65D37E6B7998909F23A9B39E575963B07CF93D47FFFDA47EB6 +8F8EA091835E8293F2DE1C42668A16608AF3F3B2C53222A727A68327ABDC1270 +E98ABEAFC84434D8265697A16A55A735F77EEBF682F1C4A5DE01E042187E3845 +987EB0027B14F7C0EF6C9C5A346ECD3417E381F3FF97AD21907D0DC835E6D976 +990047FA51AD8DAEE9A86381D60B8A60244604701A782FA90D24C34502636353 +2A2C507E189F1D1ED2B4E2EAA426A236C200208B43C765F680AA8F31CFC57992 +4BA5003418EF6A81B2770DEC775C05F1CD948A39C3F5FA49D710151DA9AC22FE +2E68640D5A47F5B4416F0F52279D1B87C563C95639B4AA9AD4D403FB48632824 +4AFCAF43318E8E61D68B67F207DFB322ADBF72C805F09ED0505212F64A6185EF +625F9BBA2126013E181577EB5B4C5A395B98871DAB1164572FDA647DB840ECBB +B119758B52CD0151D12D12EBB5E3AABD05AAA33CFB30BB47F7C4DA5963CE2718 +4EF6272DC76784551C91B62BA293AD0FF335CB2BB8577A957CAFE7E3A91EEAD6 +E3EDD75B5A2BF62FA89A87814F1025344029BB7EF08D1227A6139EFFC9DFB5A9 +F17EB228E3A0CEB99FF9DFEDABEFE69BBEAF6C796F976595FCDA62CB0DF03A1D +2F7D4A307DD6834159ED84EF35D9C2B8DB908469E146640B7499B7B17E3209DF +BFD574F6537287CAAF629AA021A784ECF4751940D231A6832C520318266248BA +0D2EEBCA5CCC8AC81707E6F35424FF58D5B4828B71D5A59480A2502CD71D5620 +05BBE8D046E1E00F6E726CDC38E0788584646D710EA033E917CC3686DD133B07 +4FB8A343C20F11FBD21A93A3DB65383872BEAC848834D03F0217183DF50E3916 +AB7B68238C23848CFC7D345FC4C70AC15CCC3433592AE028C8424E539826AC0A +83E3AA79AE231B447D6DCE32B074B5611EADE8C152F93B571154DB9213E6F6B6 +EAE38C9B2971C8313D15C953CBB7A37F5BA658306AACC6FD3AE4A3D0B1110507 +0854DBB4FAD36BDEDF0ADA15108D9B6F7F61A10A9AD25E87F84A04989551B306 +8C393AAE446F7CB06CB19B9D805DE0C52C70869CAB832F04F3E92E094031E553 +5B8679720C774280F66B56DD63D9EE47371EA55817C4F66BA651C473C27A5F2E +1675547F0B8861A42CD2ADBB8BC778156B5E139A611CE0A17140B72FFB99EF64 +D805E4C477C0EB42A59331D1E7020FCBEFB1B8753CC8DB27509E886EEBBB99C0 +937E7CC06C3F42613612CF874263BE46DA67355ED0ACAC9A1DB02C5934562EEF +D6B30388D057D4488C4B77B3E04140C48966DCDD773BA08661710D19813A7887 +6735A595B2D10D4CA14A807120A43B09DC8855B0EC0749F3532002801F45BE01 +3ACA592F545511E6A889833BCB595D94CCC0905C4E298BF2D1BA59B1CF7BBCC9 +832827A0FA9505B6D468F73DBFC63CF5188A5E2C1291C7666BF88A82FFF54275 +BA9AC8F7A3EE9469FB4D5271750D4AF3FC0BFF55A5F8DD60AD8745822B98495C +2843A39D4FFF1760C2C7F066A760B2D44EA0D36BFC8171EB791126BC3E3575F1 +7194B6A35677519DBEE369390AAFDBCF8C867BFEDE73AD82F90D2F641A9A4016 +C24294F7302D00AF096FD25D8ED6D779D3A1D65F7BA72D9F88BCAC873AA8F3C6 +BB9F693671D2C1E75F57C379604972E32DEE03D3709F7B1E2A71775EB003C9B8 +7DD49825CC31AA66E5573863B2975826C19B8A6BF57B8D2E47F33FAC2E3C23E1 +22946FC2FECF4B38E11F79B9C82EF395BE97E699470836C5FA2F4953C6BE47FD +E8062B48E429629C765EFCEE6CB7DD1D6F58D37E57A8FC521CABE705C7CA7417 +41D0224C9C3D4210101B65ECF0EB4795B03C2ABC4504C09E9ECF74114B39D1BC +8E83B1D818A5A89886071A14D57DAAEDD70540952F0C649452A42F6626C0C1DA +165CE8233F8D318BE73E0F5E1CDBCD62C4BBFAF01A152372BBDF03D4F5950969 +BAE25148A8EF0BA62C20D9500F98697B6D3474B5E5F82AB1C260D52F78CBE06E +D487AC6E916929C5D35BFF07447608DF3C31296551245DE0A3F539C0BEBF5EFF +3686859A904A688FCEE6E2770DB0209B52BC1260B4B0953665572E53FBA56545 +263D697F6D0EE366972A66D481FDE9B5B760A749D9CEE1477A263BDE7163F785 +12E5E52AEAAFB6A05AA3A9412E623AFF76DA062BC8768DCD745FD0B4BC618104 +C4FD4CE144C19D032CED19B8F0A0DA3CC45B2315EA918AC2580BFD08269F1A49 +12DD707B3EBAC19D2593C43CBA8937708BE239D569415E55F885384032B30D95 +1294463865AC6E40EF853BACA42E65F2E8718FC747FFE9633F614B9CE0A47CB7 +8F22A5EC845BFBC50F822319D4CD604CC4A74A2649B2B3B67CB5D79F93C9DFBF +457049066E8A4F3A7DC08593FA16FAF7AB4D8DEE6DAA41DE801BDE5A295CDBCE +177EA270FC3C77914CD71BC4C508943B00CF8CCE983809DF50BECD29382C1BB4 +CAD8D737A88F25C0B9BACD9403A5699166DE2DF733BCA2B7A5C6220466B2649D +46F72A5B9220DE95F19ADD3A5B4588AB50FD5BB335F89FFF1738C8A4E8592E9D +5BD54974C2F5F5449C2100FC239466021C5AD8ACF6F07C9C6B01060CEC83FBE5 +091CCD6B39BEB888015A349245FDE839454038D30A8F800588535A2FCEF762F1 +F90AB562F287030CD4B5D946AA3E78EBA4C852D5AE9205E67401B012F257A72C +2296AB4606F43EF8B1ACB295BFC33F3ADEA31DDD57D6B4A0C133F0F200DEA2D3 +E4126CB9104194E6617A15E1796A14598F3A71EEFFF09EE3DE6EE31FCCAC8C73 +5EE4782DA3CEDCC41EB50C9E12269BE8CD955C55261931E63F3E5B521EE9F6DB +83B0F15E7DB784734E76B21424497B72646245B705BCE06988FD09A65FC7A09A +27DDB98733BF0D7C56331EE45E9507923BC85F4B72053C2548604ADD163E28BD +00EFB6D761342A3BE08CAFEF79F21E5E2949AB810133A394609923C920D44E10 +F605E5D90BF5183CB14536FEAFF86475E0605AC83CA928201ED1E5D8C5AF6AE8 +C7C3FC31C213633EFFFC133CBD012B6DC15A49D6D9FC0456BEB04FD8BB2CC10F +29A93B34FEDAAF618DB52B2993E7EA0897B4A8E5729D0906FEA1F244100E53AC +70EAFF565BA48199A29705D8D41DF7F1A7382D11616ECE63B1F1343209404B00 +6705E0ACA23888F0E5A183AD39F812CA47B7C6EA888B302764D7817260744D5A +CBD64E7741D914DBCB538200B8F2DB8332C1CECC251C4A5A3F64D30569000DFE +A5870E1697576F04F2C887B3E406A99E525D50FA1EF50048FA427B62953ED05D +DF8CD3817D3DDA730622EB3E00A098B84F1E09734ED33DB4E2D0E1692DB61A2D +3FAD2FDC0ADA0251D32517E08F0E74FBAAF407A35DB779995C8B5552696065AA +E4A0789023826E290408D0B871309C665C6CD1645E4039F7F63D1FE9FA5740B8 +D590F177E0381832A300C22CCD9E91E7A93F40B0F5953E40F0CF021FCD5DA3F1 +444B6E8D2E0EC54C49E083806CD5743ED134E97F525BB9F77942688A7820FCC9 +335AAD4E6C71F201B5CF7E1D7C8156F2D2C26D51675C7A164F8C5F8BC0BAD163 +3009C8647860B4F760396872D61C8ACB542AD323EB06546B781D9D6681D0AB8F +9D340526B5062A4CD4FC09425D4338DADF27DD627D25E300ED19D37B14BF4413 +63E6E6F6DC32C593EA549B7A8877312E4498D93F13F1280071546DAA3264589F +A724E78CB69BC18A4C95D987E5264847D55F4BC4EA50220D73C1799D849FC874 +FBCA9C2FE0E4AC60AD37B569FFA06A12D4ABFAD51FC492E1353150BDA27BC49C +791492C6D340C9BB73FCDC6A30655474D22E25845143E8DE4327765874FA7BBD +7E09AC46D9EF1FCAEAB13FEC348EB2819DE9F7395B5B98EC1EE1EE1E14E0E28F +9FB50D0908738B115941BF6A1550D64D7E88390C1E184089638BF40053685A1A +19B7F1AE7AC99C4D58119B957F3E465674A5654AFA70EEBAB7B0B2D6D7DBD979 +6EE804BC93B9465D453E97617A4166B14831FB9249395A9C1496D51E086B2943 +E32CF0283A4E99D0D2907545D17E7F023EC829527F389374FA1A28E068B4014D +D0353CC5EBA3603B41993B3ABF2A9EDA80E30CEB08EF43DB69B70D80E9175F1D +FA17A21172CA272B7E2FA169530C6F6D9E4B7DC99B0D60686C9905B627531100 +B2D49835AC49F002A9E481B62ABE97A4D9487A7F4DF4DC87FFED30809A855486 +89E50FDD6D9AF814F74B5A2FA2940DBFE394C573B5150CC5B2BF3FBC787C7217 +00C26BC6F88B5B4B2EC52BF5A6F3E24003A3A59B901FEBAB824BE07F958AB71C +E61D639EAB084E31FF721B4E17DEEB0E8A0E14E13ACA8BEFE2 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMBX12 +%!PS-AdobeFont-1.1: CMBX12 1.0 +%%CreationDate: 1991 Aug 20 16:34:54 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMBX12 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-53 -251 1139 750}readonly def +/UniqueID 5000769 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 +B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 +AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 +7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF +20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 +B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D +68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 +D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E +26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D +F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 +77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 +BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E +C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 +30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 +148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C +E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D +E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 +337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 +0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 +472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E +A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 +31B84248049A4C7D49ACFC81E3E4FEF5F69FA691073C34351C95E8BACB6C51F1 +F0A239823BF97F518E4B04A7F85F0AC7C6BE40E6FBCA328F96D0F9D9AC3C2A53 +F5781366C50469C5386935E833FC248D8260AD6F72D2F2D3688E9A94F87E5F62 +5DD3358365F85FBE367FA2769C7EAD5EC9BEF5292B14ADDC9683E8CFD76FDECB +CB72CC020BF223B29FF3A9538B04C9B9403B01CE4DE99EF7B0CCDDCDAA7AC5AA +8D7BFA69A836CFE988DDEF001303F7D58DD7E193171F7E9A23ADCB244AEDA2F9 +642CBF8FDD62F6E91B80825292EDDDCD7496624B6C1D381A61E8C1AA0A00DC0F +2280242088F24D4129B4CF1320A2989A08765AC390CA76720FA030743CAD6846 +F6E8789A5E3E96940C65CF0C9677DA1EA3162B71E99B770228070BB9A660909C +47F380B10F7DD5AB2BC23044B4175164A88BA16451EF494E5A1902F43E9FAFFC +3A60286E5561E16780F2115B85685E797E63731011E10EE1D64C148F65873F06 +5DB9C32ADFCA9342F4A18E85BB905DD4AC45AA56B38EAFE3F1C9D17D689D8B0E +C6E91A7D42EE6BF82651E7BDB46BD65BFA57BE8E0A797E97BC1DECF2EA2DDAC3 +CA6164F5AE380D6B2A23B5DE1B97C91D29E535A2274BBFCACFC10C12E554D0C4 +EB97C43A3C752B5393154E9865685D33439FDDDC258860296047026EBF689762 +A1067296C711A03086D178FEC65A2FB0BE917ACA96321BBBFA8458EFA0E14A4C +85AEB8EF6597D75D5BCCD1B0935DC1AFFB755BE6106162EFB60676735BE64564 +B5DDDAA7C26ECE1690A043F2754103FA3F81E29DA762BFB50D4A3F3C8BB419FF +E9317E01EF54AF28B4F875896C7B8196A95707DC79F1C3538D4F162260AFCD90 +61A3967C99F6F780646B5B2A97DD6649CACB141F76E10EFD1A7A9DE0D76705A5 +AB7155D73ADEE46D19B6A7CFC58F614678D999A23C31E1C86CDBF7017DB90531 +C14ACA1F11A9FEDD6C0AE413C7DD478AD99E7CEFF7785DD631552FACE5B0B428 +5781E221364CCDEAA1AB3486990515939A9EDB065282DA4C5A837C81CDE67A52 +97FA3936E332AD57319A0DCF95DD083934855AB5CC535EA4E9D9DAE662F7BB0A +6D45FBE3072DB42C1D27BC8DB5257FEB94D5CC9E7B944C1AE3F4B7322182690C +9541CA08810032516B71FA614EC6823210DF837B551624862C9D4A1A863500A2 +A913E18C4298DB9EA02BDC2BACA79F0B57897AF2E486CDBEBE200FA42B0C2213 +E577843CC8090A89B416F8D09827C62EA1756C82BCFDB38A7888DD1866DF0EB8 +E45701027A28440A6DBADD0D1158BFB645F23DCF66205A14175E31281B1E5CE6 +7BDAD0C786B0782E76044594F693B3546D0D807168833ACAFD06DC4B8CB05496 +D8041FD42795FE58DC25E5C14E78FFFEDE3B48BA53C008C1FC1723551B65BAC9 +155B82AA53A9475D2B62954504DFEDB3DB0A8912313978CDAA587619F64BB9BE +C99872DA229A8D5A282A92148A68DBEA0DA4B2F0A08D2A00F6BC04F793968D0B +7CB56E8AD3ABB9AB57A514A170F16EDA92F8176DE7CB42C4F23E504DFCAD2B20 +2ED5863AAF337A28DAF9FFDAF578C029EE69B0A030CD6134DAEC4C0E71BB0851 +E7753AE655AEA168919C087038417510DAF6C48C31886A2674E2487C2E226B99 +585FB5225A704EAF95B54E688080E863FB94407DDBBDF259620A9BD9073640C5 +ADBF23A33F705B852365912A262A40CB57FF109A87AF25466AE93C957DA63E5E +6DC474A4DAABBD9337A852206C50B645D28AC81A9F1848425DFCF6A10702F23A +1CDA1F43EFF11578D55C1380AA9DE2B0CB7BDCE13C78966FC614FBA1BF4F64F5 +4B38ABC7919DA46D084DE5A435F006F127F3D1B232089ADA7B1705E03D727BA0 +0F8BCB53E985AEF73B9D68B3DE0B1CD36E566072AF21BDE7D991E090D02E3239 +E1E389F9F799BD17C453F0885D74FB9CA04E6DB6BE1EC840F8C1E7C117199177 +A8BD4361E733E53210D3FD7B71825563EDA0D99153F1A81174D5850704559972 +60D67F2A11FF9403C64D9F58F30C2A0E89C96281F8395E26B12C6EA61FEBFE63 +737F0A33D7E37E3DCD245043BA1522729C6DBD5D78B2C8C58FA5BA77BFABCAE1 +AAE7C36E70FFA3E83A906E8E63CF6F331499964299443B9C5F0EFB91DC4E675C +5784DBA5413F3DE861903D970018AC64CCB010133F2EFA4821ACD4474715F057 +6FA8565AAD50B9F19F8DBB6E3AC72E1906423AB35A93D56E34CFD5F3B5863571 +F654EA6D67B299A48185EE5DA4F873932B39C23F57764ED19EBBA923A51A2C6C +5CD7A59477341ABB5B5F21115D1774500B930AD6CD07638047F45A2AD8FFBA36 +05C5CB6B7B97F88404462CC50EC5A75676E8F91E7D42C4DB59AA74E24848DFFE +B556A249D8E3D23137B60D9E8FE2A9641AF959A216C57A825B811C6E7522C443 +69B8FA6395F7F3C628A3CA99FC5D8689C95E35EDD6B271F3FEED9D184F0B3AFA +8A7B6100E336589BDD6FBD03B782E36D809A64E9A94F5E9B3C9E7822D24D46D8 +515CBAFB830CE3F1923F6156E29AD479301470DB9A9180FA7381C4A09E9D1ADB +51DA817559A37DE2615DF1AA2DD6B8C4BB1C9B27723DDE22C116B4E43ACE5463 +71C4B79C1729EBF6F1ACABB12A3F596817827589E67879ED40DF7DDD403D45AA +021B11B11859CD7ED42A6C6F15021E04508C2CBF94CDA637A75ACB47D3A249B3 +31DC550B331B22CE2191850799B2E0AF443ABB788CC6297929AF3D3BC9405C8F +2433C4BF18C250C2C15C442C10C119F543C101F60FEF1EE0F9558A8E2F6035B0 +C5789E9248D846D2ECD3EC4E790A79D2817F5E612833FCDC360C6902F176E130 +E70FC6E15E07ABF4FD6BE5F3EE3BD4A48DD38256706C25BF0E6D9A7C51DC80BA +72BC5F5243C1B49E3D75455BEA13195C093C47AAC6ED3EABFFA674F9E66207EB +98571BAA8C06389AD5402730DA846CDD6040CA84E0F27A65D1194D916A835275 +4E99D6F6084F8EB0E34940F47C4D8700E1B46AAD46EE464D4E10C4E1259D2208 +70D0EB1661EE28B7FBA067BAF8067480793B37D4C881678B2612531E87BC7243 +0AC0B8A4B816F1670443C0A3E4FD631EB8B48DF3D4A03D9690408986E98F227E +05253E9BCCB8C61AA0B4E352B6B76FD9D785AC8823A4FBCEBD4574182D86382F +6CF90EE394506B1043FC4137E9FBE5D471F605E34B59AB3822ACF3B71730A79D +802486209B66D4AF6BCB7821CE4BBC447F66B35ED8BC949A935C335B9F61646B +AED373E141AEFCC868D068C2D133AC284885829718513ED5328EDF5230C38399 +F97CE6F55004A89D21937914FC9CDEABC3837A63B658C1F96E1F6474420916CB +3197C6F107159EC20D34E13A8698BB04E9E8BBB59993776DA701148447D07F19 +2E8FFF1160E89A82D07D58C7DFC3B71EEBF7A9E958572BAAC093568F5BA7C0BD +B118994D1A3A9F60CC96A1A996D369E7FC684244C07C3461C932ABF4C266B7A3 +239D80C79F603449A0145D88AB24A4DD8B2D82F315AF8F05904EF22F09331D9E +D6340306D266B4283E919117D283918BF0B4D944BD0B7990DEA8859A690F011C +7C6843BFEFC9329CAE786F102EF0CF8A2D70050B264BF0D824E1647191D1AC13 +C23E7F53BA73E1B3636C50BC33E2F8D0631C3A76789304A52DC48AB4BD9D6C9C +51D64DCF77AD95EFA09415A64B346B32D4189A9922B9514A26AD918667CE94DB +A631AAA4EABD64C71E9E954A40A16A66CC50F444350FBB77C1BF49868E2DF59F +5EEBB30170DD95B0D8D7530E3B613B70337239A47C582AB7E3E0EA6C6C908B16 +5E89F0969A57D2AB5429DE5CABF2158AD4DDEBA86000C37DA9D859BA60A6A4B0 +EC7C29E0B6E01D174EC741BD5989B5BE020C843A86ADCD2D6BA02CB524140D80 +97FFC7AA43CD5ED3B6A4E7D4D90F3244A71598955428E310D2263394B807FF04 +E102DD0203FC79B002D2458B4E29AEEB42CB757197316ECA9A21D5E8D0F1CA74 +1B52DFB5FDC9EE0764E5A2F2CA7307050D13DFAA548514374CE8BFFFE8109F57 +638DD8BFCA8F51079D9ED3621A6AE9CAF4BC163F79E283BC7D52E215E73B896E +7A208969AE5E6D2660B73891FE0C38D3F65A65117EFEA6C9008F006811ECABB3 +ACED727AB8D25D9D6F7B12A630090675131BD7657017E0D1BEBA6C721D97E496 +3113B14D6D8C6ECCE0C82CD092480BE17F5031FE21FA67AEBAFE90E2DE02F273 +8B82E66CA84CE6210D492175BD6A0EB412240AA3799637142CB8F8E07033FC81 +CAC9CC379FE10A0E444A373605647996A2AFF259B0A2332DC2C4C6AB519A102B +5A0EF3331915EF092F5ACF3CAB65F21DBD04986BE3DF862411E7EDFF32867B63 +9891E06A0BDCDABCD7EFB0F8080CA30C79FEA9ED999B9B2D94CB3CD3ABC6C94B +1460CDB5C58247EE64C7B0A3896E86DFF036B3BACB489FCDE3C6B4926F7D6EF7 +0166D4B404F3EEC540EB39B801F22B57F59F7E987F76E6BC8A61DC216557FF8F +98901298DD5571653CC29C5B7F2DA9FBB4D93B62CE43C06AEC1B942BA6A3E86D +7C1F83AC372F681EFCC95CC23149881FD1BF6951C669977722357026C481BD85 +C8B79C02D35D6EDF2DA523EF97B32CA023C21B7C0E746DC61A4E062AFA6033E2 +D1221BBB36256B230363B9B4E40E34272AB93C63D962D5BCFF652259E9EED617 +38DB29D6521453834C876865FBA9AED8D6F740EFD3A0AC9DDDF999DEBFCE49B0 +848E6B535C89DC288C1BC750B9FD923A74853E2EC884AF81499539BA9DA06041 +89BFC782FB656E28F911EFFC5CD1AB78AD270D02AB7D129F1512EDAFF40E1895 +4B9B7FD4D3F0669B1692B22690B08623D21318669D032E899617279149C08A48 +E71DB761E6E25DAFA8B51755120DAB6C7D9AA16EE353A5A619EB659C974FC026 +9558753A717D6F3928835038F32C0FDD63D4664BC97FFC8FD5378CDDC66A3CFA +093EE8063A0B09B9DF05F7564D65940FE9E6F1E9461355ACCA406A4B6E16FBCB +5A2C9BA2EF4FFE362FA6CA020F5DB489755D27557242393E50377C6945B64996 +868A29A500C5D5772BDBED54B25DCD6C229F6D43290FDD5D410576511D907D3A +5BAFC90F329A4C861883FE8185ED5ABA95A7DF29623704DD4EF379ECDE1CEC4F +AC06577755135A1B5427D5DAD85485AF0741FF7F16884AD6509854D7944CC513 +6EF45A4A3E3F1F4C2DC86682B7A62811F784C3B7A735BE518196E8E2CAD81E6B +2B8734FF26C91E988AA5B9E1E7FB42DE6B82FF6479AFBB7368A4260F67BDAB69 +3E689082825E4FE7469CBA1B9B7177119C0825B100BE8E6F1A910DE8F92CB3A6 +661B19BE5EC3B6DF6B04781432F40EDB678878FA51FB4F3DDE2076921CF3EEB8 +AB9885EDE74E091F0A6C1583515C7C46828AB1487B18B84F8B85A439A6C8EE1E +3822776A0A1E25216B7BA38AE77EBC4FB706257290FCBDECBDC13BEB402F2C25 +610AF618A12E7D229F6A83B8CA7D8A117E1EBAFE6C044F13D583223F4DC56E79 +4C297063953E49AEC2428F1E96B1EAFAE79099FCA69EAC63E970F10512AE8B91 +5BD5E11C20C0D65F637642E85058D8B2ECB4A5E6C6EBF6C7DEA6EADA0F978CB5 +EDFE9D9A7E608088F791EC9A12612DD9C997C71BD0465B2D06AEF2DA48BD4C2C +ABA638772D5E614C726AC75F61823707B4F72F2D42146089FEFC3998D9C15521 +27863929D103F46673B563712BF63819930CD03242F480A026F77B3FB17C8819 +4F9FC69F0EE56E975EF3C545AB514B0E6DCB8E575388E0961CCE8D200F445B2A +4EC2A853EE7B2192526999A1C0AAE2A90A58DB58EC82A10661DC30134286FFEE +3EA512A024143D07A6C671AFEC84858B4828B2B772AAE09E9CA9F7882A4220C8 +D618C9C5892FA5A36059B978EF8B26D6839EA8D9C679452810CC9E132C8E0274 +117339DCEED2A92632DA2BA784AB19E90A938C9ABCEAE9296E0935F5F6309B16 +1EC413004EC7E3CD2CEB4452AA657183E4733200C62A02914ECAC30FE556AF4A +1AF2B26101CFDA61F122B1F4353F9551E38FEA412DE7D0A8445B9D039A417861 +5C373641A4B6532370C2E8C5257583484A065421EDB4E50EE8AEEDE46F557A6C +6CD994D162A969698AE100116344007A7B7F747391DA9796409D301E59C94148 +F285929AF6B8C6A31D65594F63BFA0D352BCEC60D50E9232C8F28E73B2DDE881 +DBC5F5DD8E88E8EF97828453D5095311B92409C532A1A549EFE3CAC1F3D91E5D +2EEC82CA6129FE9DB8CC6FBD6F4BC204CA9454C475BD8877597D75ECBCEACC97 +9DC698CC7A064227CBA45EAD0AD850C45D059E2A4ABB0C830EBF95E61F8AC3B3 +8A9389EE9E05EA091E64DB71863480D9E4312772FD9B4D6757556CC7C43FB03E +04EEA1C9A048ECEC4B7C465CDFCEAB707F67FFDC903F784CDB60CCA60CB3DA37 +09CDEC7264AE28487F0042ED019070BA501C22685AD2EA7BB03EFD5D8728F672 +E8FAEC9A5885461CE9F2FE3BEB7F64DDBDE5B0F2A6CF1FF0CB2BA0DFA2CBFA20 +C539DBA84F0DDFD3E62AFA11CADD416CA921C2965093177B34DAC627D18442AD +3167DFA2688C2364C0AB3F2DC94D0867CCF22998ECFC568EC07F28161F401789 +4F3A13987DCA67E0012D41C712F4515135DAB1405B77BC1C2C3B7CFB52BDE5B1 +7E2EFF5C3F19195B778B0016ADF3FF0B11DBF0D674A412AA946167CE88D6B10C +3D77EC4BAE76A665329C977409D2AA8A8CB07325501FCCA2A295F83C21AD5582 +09406FD233B02E25A465739986A6962ACC3FECCEA316A8C747B6CBA3B1C4C7F8 +5A01B5BB008651EDAFC2A0AAB839EBDD14025BC19B9233D54CB5D400345106AB +E2D1617BC855A3AA6E2B60C50AFBC7FEA9DBA3D30EF2905D96A5F928011CAE86 +B1C6FB92AC8BA20D7B15B40113BDCFD9A05B0F9293477C4695E6FF84AA54E779 +AF7E19AFE02FE9A3DE310E6CDD4A2C612C227FBEA17CC5014AD9853A74BB6D05 +5A64F1C4366DD4D807809FD02B29B8E455293104ED7187A3D4943C2643ADE321 +3299D423DA71D017DEF79F33E499D5DEDC97120E91D0408ABA55CD77190E0964 +F7B7FCD76DC3213CC9D6F5EF9A7456A181433712F1ED8FCC46BA54793C33F10B +F8BF3C7E8B59C058AA0A9C18CFCF23CCE06D71A146A34B5362CA8EE5DBA42690 +1EE541CD07C043C565F803F5EB1E459807DE1380398989EE397D73EA7D142AED +B255F05A5BBFF1F73C05FFDD277EF060CA9E3C7318A58AC3BA0A335442BAB763 +E725EDFAB0C984B14893F0050D0773F5037D763074D3CD9EDCFC92F17C3FB699 +F7AF92090BAB4B356C4837B9ECB1D71BCC98ACE7F88448A2E2FFE1B96767F9C9 +45FE6C13E93E0638B370D660FE15D1AD1B6BEEC26C04EC188641560733EB5C39 +D19FE0D6CCADA8D7004F8132E7F535BCEC3C5D45321E59EEAB9576F7B4B39ADE +59A85AA8EA28B2C737F4368720E2AF82A7BC1B364FCB39588256017A745059BD +7C31D183495F63A7B4A76BC50C4A00EB2FE4EE0C512C3BD2573D2E6E415CC58D +E2933DB1BB194B005651138415593EB9EB4B9BD91D37A0CD576B218B6827EFC4 +1D3F1D036C6DA66217EF92B6F349B918AA5E20B9D4BB950823BF7EB9FC07F78C +8574224AA93ED2064D7A00C98C41F732215ECC9DE1017CFA379A5B8569C3A496 +C0CD61A6201D53177F2736DDF182379C671B38B16AF092D63450CA96C8E8084F +2DB8C8EBA732B5A84F540CC34A4AD3E9908B3DD149A10767999850D353EB7149 +E2BD0102585AE07505B83FAE856F467310372205F79199BAE473893B723F7E21 +88EE6659BE3088859D2FCEC1604FD568DDA45559DDF64EB10FDB19FE8C9D7C59 +F0E7B781DB5FD80A3C7A73420D470F1256D683F92EE6A7A9DD241B66CE4FC35E +C6D69D2B66834D848437D45374829F5F1624722806B9E126B43A51B4FB9C27E9 +D5EC07C90DFB7CDA30B53C0DDA3D1F93B7EE82DB6EBC14466F0FCA5149F13B4A +BD949717FB44FF8BFAFDAA7914240E43B0253E4F8ED5C481376C3B609A191670 +1F2BDA2F6F6A466FD42FE9BE9EF7C3A5B20DCB2A7C18DACD0A75038DC30E3FD3 +64F8389204FEEC67029A64FCC3E5FCF97AF24D98A455997D5667270A95BE2D13 +ED87F410B35B52A2D3D89BF180B3EF83CF39B634A0C1CAFB62D76F373D675E86 +856E7D0ECFD67A5C48A7FF4653B7A607622DBDE7CB434E145F9A4B0501456B86 +3E99DF2570B034243861E4BB80E0F9CE2649329960A792F30913C967F9538E76 +75B1591E075C10BB59139E2D1933F6BED658D704F623F8507B0E2A03C582B75D +657B577A72585B6926D51882ABE25C752824092C6A1F5A006512FFAB96700DCA +E2AD0C7D7A3AFFC4F823A02FAB788C32ABDFCDD56DDE65FBA63BF95E890573CB +EA28F7BB049BD3133DE22E8F4F05AD04133FE48785524A14041C73EAD6F60D7A +2CF1F8F3C7258172EAC2A9820F4C04DC34DECF2912182EDC86D7412A25A6FB25 +F46341AC7889B645C36A85C8F10D22E41D4143D10EDFF014C00A7B1E4EFAAD1A +7E42EBC657CBA442E9B2DA0BF049E86D680C5E1C4B2588E99F24844E8EA639D3 +A4CED6A0A7BE055856FD998BECB9DAADEFACA913A60AE501FDB6F035A2D300FB +FF13B510595A64A900DA5496B7CF1085676680008CE70D114082EBDB5B384058 +06A99A26CBB247CFE8EDB6EA428D261602319D5EF03C9B6BB657E6D8A7632970 +491BA80744BB5DF021382808F3F99ACDC4EBF26887523FA5EA81321D6EF2AA9A +55939200A4D011602FFF717AD90EB5E47807CB58370C40461591217C2A714DCD +2BE918A0177D068A21B5927C254643AE0B36EA772A3D2EFC25083B8291BF311D +74B95C21696904773C60760CBEE6F94638855697A1948221438456099589576A +AE5438C70C082D177905FB82FFDBD4BD94ECAC1B6FAF0D4D7578A1B6576B4F13 +E3A6F814B4AB580ED09C916E20820DF0626FC1D9A925E8BB6A368E630AC6EBEB +933991990F4E49075B318B62CA8296CA43B77FBB16578839419929DC8A2AD819 +F3C404FBAC9CE3CAE8AA904E39924C4B704272257DD3D0C8421A90D426376F9E +E2A4B6C868BA2884D7BAF0BADA6299E307ACA1A74B1D73D73F0150A6C560E65E +6C0D247AD55969C1FC5DD81C764338799892D391A254B3613F89D1A348A9BDAF +CCA171CC6E51DEF7A91C7929D6FA2BBC243DA7B1BEF9652F1D8FBCEB2D367187 +9FD4B2C681820B2189A213866CE3456E2007FB3DFE2E362149177CD104444D0B +C026EAD4390AF141B33868DC5A49E0E1108DF1A6DBC81E2015969F66773BFF69 +707FCD43DD72B483EA751FB1C840C917EAAE7447AEC688EB9922FAAACE7BC094 +F617EFFA3199DD06552C72E53E67B0053A3BE5C5750EA0581B1A7692AEF0921A +859C7F04DB8AAB312D2480ABE8AAFF257469A555B5F983D277ECE041588E8F94 +07ACAC0E3DDFF44817A21B86939E7787FA7772113699B0A4D9E5462D3E59CEFC +2798A0D70911F57BB068F9D11393D3F2A4161C26DC2F3C92A7D1F5FC32C6295D +9C6DFD5E9561DD4443F5CB7A356A9BDCBB61706ACF0C51670668C67DC0FFF754 +286CF2BEF36A02F637DA2DAB10F4897FAB65E78A408C405B52C4F88C4F70CE20 +9A27803EAE707C5E9BBEAEF09A2ACEE9986A64BC671BA9D638375ADEC6E83038 +303B41BD653612FBE967C4B5A121032C73C085A237A561B860660D52FC408F3F +CCC694CED076A3F42CA1CA6C12A222BEF6850199F45E2354CC7E308D277CE2FF +F85076C0FF875911B86306112881047E688C5EA9CB6497EF84A659A54ACE4AE9 +774EB2A9ECD4ABA95831E2B6DCF60E8CCD197670E2CA7B79FBBF3C9D9990E737 +D8372E43DB9D4A1B488C630E86BB9B9E91012DAD1D7FD603D2DBBC732690B2A0 +8295EB964EDC0197D6CE17CC3C71559962405AA1E21BB1A8C17EA1DB8911C970 +4EFC85F0DB429C54FC4BDAE64F5BF4B5DD90236269894A180920BF30FED59182 +6781F1602EFE3DFB2467EAB8B00CB5FC30B9669AADD4DAB5795E69F4B8703815 +95F15C33DDF808D242BC2169FF88EB6D74E9E10B638658330EBC284C89442949 +8F4658A6B3B0E70D1431E969676900E56D0773D36A7CD91CBA93C35EE3E07BB8 +2124EA7CDAFD27C4EAB0C53754CD38D4A08C362E0479422E9042C8586BE74C21 +FE71358084B5395DED53C62FEE8ED78460D8A9E8C39E49355E9F712142D3CC38 +A62E9B7BA97061D2C70579E40A54C0962BFD0C5DC6B3338FE09770DE0910F9FC +4B35C0A307412BF77CB83E62BE74B4EDD3A6BBF2E2294477209F823F57B87452 +778759BA065047FA61F3CF1853F60BF4600245237CAA359DBD88619EE2E948A7 +FD380EE535751CEC58BEA1C0E48E098CAA97C0AB72A2BAD0B538D8D48A44CAC1 +AEA3848BE1B68AA401F37A1E2C4361FE68EF65617237AEC00A37FDA5E826ABD3 +291EEA47E3D9800F98665C75184247D4CEE91401411E53B8B48FD8CFA7147E05 +3603F82AA77C3FB65E787AF953D88B897ABF206480083C171AD32AF26F927E7F +58F29406D9A4C64522378E3009AB2DDFA65F62ACBB25888F7244002324FCDD2C +D01D4E83F7D222DED9242922F1187FCFEDD0DC300E05C4508256AF9D8DF2141A +84265C77AE2034B7848A2078933229C180BB2176481EA46056610BC76B21B33E +B5792BB9A3C4AFDA74A7316CFDBC0F9C63625CAC268AD7A3B82A9E693F4A2CC1 +6CD9E3499B943C6B6522F4DFF471B012E8BBC82E941CB87F1672669A7297DA94 +1D05CBE1D1BA7E3749E59275B55C1893F0EACF28EA06567D4702EFA6328B4E06 +A179896B168BEA4B248FF64884DA6B42EC4E49116F1BD06104C77E80DEE2B5B3 +96476851455CBC7BA1F8D37E927F2B8AA5F6860070940F182B1643929C4A02C8 +0D0CF40CBD295C8B5965CAF002D464D032209B83A69CDAC059D2C949A1CA48DC +93C3F287AB2FAAA8010D2B982AD7663E331752B23C82FC07E7F3EB7D72FCE84F +02EF6982C96FA3FCFCEA45BC433C3A1EAF91DA6BB03B8E6C22EB79958025C3D9 +6BF93DD6421909607AC24B682E90C3E6F1559C58ADFC90350EB44CC159A69475 +BD46BB4123F4AA935D836E5BE5AD399F13D35136933D47F980D19CCA98DC441A +351E2843395245E1A3412ABEAADCC1D314E61FD3F7C227804175717E50D4A553 +F329D7D5B1D3ECA7C063471ECB6F72B2FCF5B31C18FCB1C92B013C502C36E795 +4BEBEA3247CCA9989B9AFB2E0144C8FDB21E6611242D26DDEF38024E971E3BB8 +2ED74172E32515C57A002275759AE8C59CC17AA0EB4A849BB434F1CFE128CF02 +E5EF9D2A02279E03CFACBE546FEA176A9864EA3E2748CE7D6480C7BB1E8A469D +85DF3BBB2D98337E82B68BE7A8C2DFE8D6D86FF6BD205D332030679599B70AFD +8A002326707FB485B995826FC0D2F8C3588D1201446162A1F8FC7E75F9208B05 +EFF017F40F429CBF0CDE769D14016514543752438D907B32F0C40398C0E0B246 +B06E5C2740E7E5A6AF3182E0E0860A0B5158241D79F7F5FF174764D8351A89FD +0A7D99E40F317AEFAE208F3C463DB86593B91892F11C9BFDCC8D741ACA2A0BEE +B2C1A836EC39A8894B9097B194F980E7501608B1403CAC065E92B41AE18664ED +8D9A889C1653217FFDF6006CDAF20073DB4300CFA63025D381E4AE4FE969FBF4 +1C66D6FBAA6C0BA67B91CE299044261708D93B15F30F685589FEF331733633D7 +F90D071B2CAF4106C22DC5C7361AE88FC817DB8BF37FCF2E409D882F1FEAEF11 +41DC3702D9B44DAD630071210E34D2E644101C7CB2AAF0892C497BB391146614 +50AD23021FE8FDFF23A505B207A89803DADB5E0E16886FC382809EB0854346C3 +5D4D7084F688EBC02DF2673AFF763801F90DBCF5B43FB0E8D57B3079A2C6B07A +69A462168B9FC750AD55E11A10724943B61F425344C8FAA924C87F31E07C3467 +1002FDC8CCF3153405FD66EF0EB2FA0FF5E5E0A35FCF5052133B5550152BD88C +2700F1A7D05EAF25B6857615918BA5654925448B950BEFB9EA36073AA00E7B40 +0D7E839AC159B8856EDC45FEE444945EA9C4DE984C68C9C1EE918A8CD45BEB50 +58C8DA3508F5353B1EB83FD38BAB985608E08A0412A5C83C2CBFE295057EC58C +1C6B537EC6CBE44342700E114DF42ADD55E2FE7FDD9056908AF166ADDDDD93F7 +DD5865C03E8FAAADEA4173E3213392D37A545B409211E2D30F2118B5183DBEBD +E7CAB3C1E3C17CDDC47BA80B2EEC36E47E9CF81A30780B0B50B231A7A4C5E3D8 +4151DE0CF686095E2706850C90761CCF524D1B61B3E76F6E8611F0E4D993D87C +8A08A4809656DC07FDDFFCD8F5E60782F3160171BB025A6B736D4F4093BBB062 +B2F3704B7A438495FD39CE9270411A5111B499A5B97AE75D94A56EBCBD013406 +BD215B1A3526C8ECD4C745FA6384931D197EDF17C37BA19DCC3B0E0FB79C1946 +53145487B08EF827AB1E4AE0BD7A0106CC4C1A61F2529CFEA254FA028D0D3DF8 +48D762C42E711FDB0EDCC0D3D1DD6B4ABF4650856B8F275DF1C8179A8B4D3A28 +94EC6376424A8F2462A99D1989AAAB1163A67D05D4EF46D07EADBF747BD56E9A +DC48E7E1B40A2FBDAF5D8CE2EB3AC9CDE96A6044160DA3D5B96B52ED82EE892D +CF600C28E53B9AAE89AA2FFD100EC94BEAE73FCFAB2F4FBC2CE26570C17AFC32 +5B343E71769C190E8BB3CC4FAA48991930F7A5995F998D382A90C2A0C98AD6B1 +57782EB0D16F191AAA1F04D2BAF1DB754D8543FBCD2B5D3E76591E5E6F1A2F80 +6705E607D921873420D7A347215D7A522BAD6CAA9A2285D0353820C27D0834C2 +B3BF27AA4704E1E8ADF303E3855D4447BA084098B6E37F578DE9D6C739D44353 +10957E129D642D099B137C406524161A5CBF6619FAB7BDB4A1FEB5F69EC2D8C0 +803685291E483C2A9DDB83D8F7D751AE6C69DB8297702D20BDD7E293F7DACFA7 +E56F7B77F915221981C363DC170F6E04267CE593751908CAB3D95018E8CA038C +8BA4EA16A91A227F04552857B947B693B0DAA420C7D99B5BFD058677FEB15E61 +EF1888A69C9E33CFB2E0010E1BA49CA8198242B9E025B988A9E6AB0A7D434C80 +50CD2307B194DFB07FC8A827BF6239B3226935A32CCD429348E1789C8B3DFAF3 +03B59B0905DF2EBE6C807F52A4811D10B8B10E967FED1853A6D4DB02A46DA4D5 +05150D24118FFB7445C8CA17168BD332F32A78DD5211A37FCE92F8BC2142BAE5 +FED439839A5F7D1FA4364A2F5F8B1BB4F4BFD27F0078EF167F247DDE2210128F +B927D08CB682DE3C8F954E064349C585376E84DD8D0A15FACFFBC5F54CDB2EA7 +34728FE9B4A4D2B07FBF7C6598EE6A5CE1CBB7C0A176D890AD82F3E2F19D686D +75A6B5816D89FAEA212AA077AFEB0055AC44B4E9E639B7D7C8A2FD4C476F4A61 +AFE52462E4B8352D98B3412DD494642AD5BF0D59050DE29A72F90838941C4BB7 +8A826E48A9AA4AFFC93DBB77A7C8BF4787C47E54F24BD702A3459CD060E70429 +5EE5A72C97BCC54F001241C7E0B1D5E0DF76DA82FBDDD294ED30876554BE1E88 +DFAAD6D8DA75ECEC61588EDCB48E39A654CC3A8C5641A385B3E0590DE54E9EE2 +65A85A1DAC0AAE90E1B131E7064006D5933D96A18235EA1CDE5662B14C393359 +6F7995B833A671DC33B8ECCBEAE657004483AEDCB128D2D89DBBE7D87F56FBA8 +091300D55B04A20C4ECED98B229A61D4A0ADFA6E7CB8EF07D92F69BA316F6690 +02BAC63DF03E07BF5DDDF5C26EF67375032DD9E1CD0A4F9DEAE0AEB79D3BC2B2 +A084661D6DA1DBF6B5AB2047BDF4C1A52856524E17ABE66E38A37711FFE2C3AB +0FAE88F096CECB55695970A1EB99491DADB601E0872543310D4335E11FC92DA0 +EC1E364D1A81CB3CDCDA4ACD219104C828108D8F75EA0990D6F39F879A58A757 +56709186B52D8BDD9205E22DCE70F81FF0DB0F73D7BF22906A9DC9A95AF8452B +40F60A11EDB522C9C8B1473C1B7409E95C520E660EF08F99BA405F44CBEF56B4 +388ED1E816AAD6C5DFBA690C207D08DAE204826183FE0C18261EB2E51B594561 +D88BCFB02E70054F35E0DE0F31B15191867079301EAA85D5FE398D83F08F9FF9 +054E00968650A1546AAF86268CD31B5769B6CAB63D5539D67B426847A822468E +472A5BCFEA9DC15DDD0ECCBEFF03BEB6FA5ACBABEE7CF2A4CB7D85388BD84649 +4ABAE15C9B52FED3B8C9AAAB550719309764625EBBD5434F4049309FCAF7571B +377C4DFD355A890803929CBC4596FCDC5875E36668E891E1FFD980B8FA734931 +632D59F23D6A80FFDAB866B595A86E6EF798FBDF73C1B0F7073F1C671D641F55 +9757E3459CEFF505F1F35CA640B572F985717C6E5CA9E6C006DD797B3F47E0E4 +03AA2294E550C63651FA76B2C32ADBB897A3F6099D211A31081AC349B67C89FA +9D2BCDAE1BA92DF9F7B8AA9035783EAFA722A038AA94EBE8453B4A7C1C875090 +3D13D7D2843E9E92FD2D55C5A31D7A0FB86A63E6F39D8A2E285AA7767EEBF42A +ADA62726BE511F7283FB148079086AE4A4148CD3B0BA71D2366D02DCEBC34EBB +278D4869B09CC8E191C28D212615125A7BF3C7ABD0ED0173EB04751EB4AEC783 +3E781DE01956244B1502D5CCB14EC3C1558F44BD8A7B4C5235EE01EB9787E3F4 +7633CF9ACF9D1B95CCD78FCBE8B015FADFF6961D960DFF37AC63E5FCB3BDB0FA +455935C1DD9D3D0D6B998E83E562A0CCECED8BCADB546D4298854C3E760A34E6 +63AB4419351F5567DFA518340EA5E8DFF2C63E8A8862B992C3BF020A514EBA10 +718183819DA30F6DCF7C47D94845835495E3B69FEF796728DDFE4C9E2E32D163 +E02393F60133F2316BB88A3FDF7BCE977CD1F23B4735DA3DC10631D5716CDD84 +A9E67B3A60493AB9589026321993D57CAA1E68A8E15BF7CAA67AC1C33A5458B5 +4D6FDD851667B28F5E50EDFF7051F2A934BE94F86D5088412F5720D25A480D21 +CBD723974537BD0D8EC45B84FE50B15548CC910BD0E91BEEAA1966F3CD79EB7F +5111A9E7597217524A812DD4C2FF71CD57EC7E368A13B56EF52BDE19E34561E6 +58AC76FC258B6CAC1AB4A5564F90761D0A9EF18FFB33D27AFAA073B3228C22C9 +E2D0106451552CDB212B28F3597D8B652F03B94DF3A980C6888D69BD8597C73C +5F9C6FD102453E2DE1DA43F0531BCD09873867BCCB7D2A78E8205BDDDF4F1602 +6A9B9C370F9EB49AB46C6686BB5B74A65F0F7BC4A6028BCD93CA252785E8E27E +F0ED475B95D2819629AF5C08BCE99EE7F5AD89152FA4B6C5A06A15FF077911D0 +F3D99CCAB72B83A877508AD5AA2D8551623E22B1CB39753D61099184D035B063 +69B7D8FDD9AF3515AB4EB6D423E302EE2D0D6E402632D9FD28BDC27B40157940 +809A7F580610903D5BB8D3AA9B2D7F7B6512C106267D41B3644A21F2D8770E4E +4A69BAC7DF73C94BDDCA5A54810FD0F4CB27E4583D1AF77A631DBD0F260296F4 +E61B4CBD7641D80CB0FCBBCBB03229D6386111E927B91B128E601ADF44B8F481 +99E9941A3E9E5C4E791D822C4DA3B6DDF7D8E01FF3F4264C61E8A779BEC51DA8 +FAF47F90BFEF18B8A02E27C4F98A2413C659002232AD2FF6F556F90B634A4F3A +220E89D77C19E9D9AADABF338EDB3C0A0FBF2995C8BD1FF35826988935FEA5EC +C36D3994011F3FDC88581F9431335719FBEA6CA09E232F3D3723937C4EF79E04 +C1026CF28D01A630044065B894C833F83254155E92B0B2EA97F1F262FAF419F6 +7C665F1675CBE362A3848613677132FD9F8674B23937243BDA27D8C17521FE63 +7950087A0D9E678AF1814B234127353D9C9BBDC7A156F8A67B45B3D7708B9AFD +4647790FF9E9AC3CD84D67CE96E98FE1FC45526F0B1CED5A8E6E1117342DE6B5 +966B2B006F3475210B2293769BD5119042D8D610BF2A98A8A749F99F54537A76 +BAE6FF65A536DF5C93F04CBBFE4736375CF9FE05CD4444D0DC75D5A19351AF7B +E3708E72FDB3246E2ED29E8E2D1DE84A547C72450185FA82E066369D37467725 +6ECA1771A162DBE738F68EBE829C6F4297DCA6AC1C58072015551631C88DBFDF +1887D5CE0726800230AE561F8B37880C536F39C70FE9A3FECDAFC92DBF5726EC +8B4D486AFED75AB1FBE9468E449CAA33D450D68936A5DC20F9E179438318F5A8 +CE9D51AFB937162E7DDD1AA3292C17BA791657A7EE7DC44E80D363B0A0A26E03 +F6DD84E89D28D7C1C3ED347AF7FD4816B66FBF56A4A551776FD3DBBBAFBFAAA5 +A99CBA77634AC5FBA9A02B8289E14FD064591A9C1DAFBBA02F44125B931ACC5F +B94304B22DF6D09845415B0FBAD0F206E809EB721B7D57B4538A364EC470CFBC +3D9D30311A4C98976498DE7B6FAF7EA6385B2F6BC3F913517083EA1A03BF3A37 +28B17D9D90DDEEFFB6FED93911508F48424A2C7EF96FF5F7C2BE572C6BECEDAE +9895E3364C10ECF70C24CF1F16C4265E4AE26E8118AD1CA54D17E0E5E1DC3E54 +25A65F2180CADDBD660CC16034A000CB321E3F55C07039A5DAE31B9AFFB2A33F +E85C43EBFF2216229FAFF16DA8B2E91272C20A3D44BD9D1613347B80FC96D23A +E84FB08E2C4AF42E48C6DBE656C1593E1DEC2E3C5C5719AE12B5507840D27383 +5D8B266561EEEC730072BB24DC7E734DDF6B8E725E9205AD2DA26A517478AA2A +531AD334BC428F48586FC2DAEA9D262B673F5F3FCC1EE33C0FCA58955E739C58 +75306B3CE28A091645670B38846F56D438561B84D7DDD7FCD31A7023916E0079 +FF95D359F472198BAE4628F8097C984B094C5601B8BF3AE95BD8F7ABE1BAA6A6 +A4E073756A2140A266B01B1D31253FA57BE714282F88960BAF37AA5DFE4FBBAE +9DC32332D7C578C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTI10 +%!PS-AdobeFont-1.1: CMTI10 1.00B +%%CreationDate: 1992 Feb 19 19:56:16 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMTI10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-163 -250 1146 969}readonly def +/UniqueID 5000828 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F +21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6 +06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF +55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5 +B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86 +0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9 +1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961 +7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A +7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402 +356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B +19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2 +C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F +244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B +AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95 +5C43C8942435D0AAA3D9055FF808F2C3C887A3C469BBD98F026D0A59E26BA9F9 +C2144CFE49A9AD892D4D31764F0AE3A10644AE3966B0A790684B14D11FA49785 +EC5565D2B2E584CBFD85125F3FAC133338DE35361943DCE9AF05FCF2840CE512 +998D42CBEC52B57B79DD63F00985881E8463396ADA47189A94DDF951A78866F0 +B8A3D9197E39335277EF2294308DA70065D910943A34F7D5F2090FB4AA42ED70 +CBA469A9F64B95A6FBA4BC89DBC93765E3AE4723162DF3F9D6BDE77DD5870ADE +C8900D6346957B84C3CE88A8F9A12D46B8FCA50DF4433B0B8AED6A63B3DA102B +6DF94E62408E24154BAAC66B2B249C695BC0FA37A28699D9C0F3EE94AA32E3C5 +8F8D7F803B5D25014D43A353D719B14B247A87898A960DF68C0C0BAF70C83917 +6E9F7B3ACC64DBAEF3FDCD3A80C0AB907EE342E543D607556CBE5A9089B86D1D +E768F27D74A613F3ABF883222A8596B542EBF54E9DCE327B5682AEE5F6BCC38A +2A052EC4018AE3189DC1963BA39ACDED8F0C60C83F8873FBBF0302010956C520 +A7F3F8ECD0F177EDF5F4D5522C5984A3678FF32EEEB570B69C142AB89467641F +917155D646DAF3352E27BF2AA0746E062E48532256AF364EFC0F0AAE3766F68E +89DF9AEAE43DE6B2E2EBCB666FB344286445FFA4714A341419C7FE51D43CF1B8 +01FC0B0071F73EA4FEB08FEAB64FC98F56EDA5E27B7A71F1F8E350BD94C093D5 +9A86175C46B78C65BD85BA347656778AEEBC81467970F644D32D6F2BF2A3F14A +6B05DAE8858A02D212177F15DABAFB2961F2746D4C3176FDDB5AB9821C57C417 +0C8E0DC8B069090D8C95DCC3340643C68E5CFA60C3F41326579B869EA5D832D9 +85119A957DE314546187E8C4AD9841F42DCAE231C5FDDB483481FF29FDE695C8 +45FEC01A911F1390E3E3B80D59A30805601366FC0535E62E0CD9EAEBDE4DDEE0 +260B40C3F20D80944ADEBD496A4C82985FA55362CEF5AA91377F3E5E2C3300AA +C24A28B5DE446EA56CE7173EA3A3983F8A39C1C04DC1117A9AD9EE90A6B0A6B8 +340651456ECDE5360D8CFC8D88EF157B44EA6BD3CEEF3BB89425A716D03A671F +E2DAC845699F8213DF6BF7EAA0CCE93CFD7557629AFEF755FD9506F006789AD9 +100BAEE1F8DAFB9C55DCD2CF75ABA02841B88EACAEBFBB6A3AE4F145204944B1 +1B7EA32D8730B3E29C5D0CD64AFD23656C6E462ECB6CDF4757F8EFC0CB2DDA8A +91B79D3F44A59B587DA59DDDFB2BE6AC75606C0A1F15CDCD27C6AD77C38CA62B +692230D98A504D41F645E9379A8A8B3F95F33E4CC3605A9B44422EAFA939C4E0 +19EB1E3A67FAC6E7E905F92B1E7F35F150F75364B22B71B8DAFA0E995CF30D8D +119A9EEC79606E9B038E4B4D449653B0537907789B54D8E949BF20BC6AAD3C0E +53075AFD1F67865A1D42AB0945534D9C59AA91C7C87275E2B3024CECBAE47E64 +9E6190D0E790CE26F88CE6C0F7258FFDEC557C88F5560A756705B2D8B0B2F1FE +279CF534C2604BB283024ECFB6AA6D1496021FCAEC3390B01DC093F7D04C9D67 +E2D77BB40E9035A1C41632037B5DB63C6302D464ABC9FEE829B742105984C3D3 +3AA836FF446D394DDC7882C3A9FF355340EAA8461CB4AA082F03E11B6034DA2F +37FB132E23E182E74333E46ADC2CA82A58AC483FBCA5FA6A0B7CC69FE75339E9 +58350D7C0B336626ECF2BC024FB5712BA5B3F7936995FD937A4B1EA5FC4A6BFD +050B25C5DDD3B64207A90097897FAC7F0D5F8C51ED0CD8F74D9C3C6006118B69 +0A3C80BF08509EC03A7712076C9B789B9AFCBE0848FC16DFE18C9043D2C62CEE +21422D965A6A398D7E3880C18461D16B0805FB95F5A7429D35F707C9543AF4C3 +6568A1CD13E4D551C4D391390A9FD45D993B0A27A327B9E3E6511B3EF6C14BAA +F972D98A7596CD6A145603D942F59FD2081EEC6978C7AD5AA04683291CE5CF85 +1CAD87DAAE0FFF00D14AFFEF3472F8413558DCE88E196647ABE2198E401ABE29 +875BBF2E2AE0AFB0C9A262F60DD9CB19F43BD16CD90B199359A01490ACA053B3 +77A76B7FB98A3E096A4C376A9DF69C8B91F76ADC634B4AFB58ED00C9655A0E7E +A0C55508304363A82C81254D827FA1911C16D49670A63E4402BD78A1F7F4C616 +4910967EF94276B30AFDEB5724EA1F087D572BE403B0CFD786D5397453B44DA4 +A3F91FDF0789626FF3D8178331683B1CD16EBF7F97742AA3A966B8BC92E87D5B +B529CA5522D31A6EC30BBB4C80023BA8887D87DBB8FBEE8524409A554F5282A7 +F2D389139DBE74563663CE5C839DB39F9390CCFF9AA3AAF8C713A5F60D2FEA06 +E069A8AF06B118EE22926B6AA67AC8D9E8F7B8C95C6884A2816BB1BFA71D86A1 +303B0448D870CB6D41006A017B26617782496EE396E68F8501F6B0ABC13EBB88 +C1AD1BD3C33DF6B013B8CD034F268645A2215713874D66C21EB75E65A2A88AAB +6E83D74DD9D509F2B0D4355D528F9AD6A7EBF6ADFAF76A9220573F3E6219BD96 +640F535F5F0B154FF77B5D6097C6D13F739E9AEBE8B2E745224EF1AE4570A437 +0086BB3069D29059EEDD760AFF1D448F69669BDD37ED7FD90D5B18B055A9A1DD +D1237817EEFEB2C4DE9F27BDAEBDC0970587C9AFBCEF71F45CD7E6199EFDCBC0 +0C7FBC2BC922289493C40FA7C624A1AEB18133FC0B5292EA905823937E82A2C2 +00081E0DB58E59DE2D0962765CB54FCF8F9FAE24ED3FC649B1B4C2B1B7A85425 +B637B0431AA42CD8012D6FB016B984DAB93E0794C35EAD838B750DB8D3D5CA79 +E89C09DFFD4FF26D29BE719A1792A868DB70004051C3F801DF00CF356A5F2083 +CEA418DDD9C73F3DE15D1E0B1FB2D3A17CF92321E155AE4940DB50DCB15A333C +622AB7D7A004348BADDD7ABF5B941463BEF9FBB812186CF17856FE4474DF7C4B +6261E8D0FC262334A4605F4E6AFFD23F0B91A54C83638FC7A909694A3EFF251D +16DD6B72F4E90C159EF9E0F2084795E93D4C38606AC68D72E28C5D9AF4FBCEA6 +329E7617D13F8F81B0F91541A53B502EFE17D2776D7286BCA63A6AE78EADE167 +32F3F3929D941516A9AAF2D3D26AA900491CE534BA3FFB14D60FDC6F51D36FD5 +20D2B2C17A8751F02E90BF48B080DAC2BC7601604D97BDC0441D08D31E8DA70A +528239646607E9AD6708A8E401229DB8DEB508BFE65582CF91506F3F627B24D3 +4D7A8BF6C5CAE1A0BDE435ECC247551935EAB94BBA6BBA5BF1DFA673F4B5060A +0AA6018F6D67B86E5437D3AF6E9A3A68AD7BF229919881FB6FC3B48FDFA51B1E +9AABDBC1F9E8D97ED2B1FE2D465F6D7CE514FEF2B62276AA872546A0E27903E2 +F1D0460EE43C3806EBD9EA14C41088AB8AE0DAE60E5CE0FB63A226B232F78A7B +B6C96617C75BE615A510248A4FF3F09F7AD0EB0B104BB0EE5316496390A0DF28 +BED8A07237800A2FF3D37E3880D3602459C7BD5A92F393595D4FABE161052D34 +EEDF37EA8885564680BEBF27DD504EBDB28413CD242E181C07F2038EEA55D346 +B4431A12F580300AA1D2E12C9CEE10602D63852A26964E5523B1040A86A1B33D +FE271D325052B0A79F2A736DA669EC660AA60C844F2A08913E04CC92800A9358 +5C0F1A4164140397FBF75672C7366128A2A3DE696901EA882DCA6EDC457D6145 +FC84214EAB132905FC7529E63022CD7E08D828E47B5C7D0BBCD171F0C0788A2D +BE4FE10CBF36FB8DFCEB0702365B4A58F8DA9F8C24061970B47C39E0153DC714 +9EE93688EB1BB49F171364F1BCFD69B0B38BEEC512841B7B59F48E2BDF0C8232 +3CBEE59A81530987299A450478201B8FB8E98B0F6369F5FE50106C3A0AF03D98 +49B780C7FD6BFCB03677033FA56127E28871494281C0ADB19DB2D777D299FE76 +C262C2E999F56E64284C4533AF281C1936EA6174AC011C38680D10829226B268 +AFF13938517274BD415ABE48CF8928DAD48C10852C257858F2BC616499086BE6 +9D3F0A2F6FEC61CA36A7271549AD623B6AC984DDB50A603D5682718730E7D200 +CBF0518D89F46E91B8580D8E9902018EBC8B1FD4D1A8648EE790A5067A2B2F0F +AD3A4AD02F0CFA43E612C2AE8E758AA1D80989FCD00E41487E3D2A563B2369F0 +E4DFF0582EAD6552253FDE8FCF3E1DDBA63185E512F41193533E21BC5EAEBD92 +A48DF5F64384719683608F1DE5767882784CC7B5E15B2E296B5303BBBED04074 +9CECCFD4ADF441ABE8F689B4843E9A23D6F49F93A28E8AB4B16ECA7D3FE5F5D0 +2D615E219C92538BFA1B4A69379A138E54E640119E9DB26441D797A337494517 +EFF7DF0429A7F508F8DBE974FCFBC97D9D1380BD012B2C20DC36D2337F259AAE +691A0705BDB9394DC90A1DF5C180C033A0D139C1B12E62061E05F9A2551B7F9B +A7A90850ECB9878A9DD62FE08100A77CF9BC4BE11231F190B741741686F48FF5 +A19AE1DBB06323E9A1BB20D1F4EC8A845FD8C702C4E9090BAEAD6CA0E188F1E2 +D26280B587334AA83E36BBF96AC652AB10FDE648B364235582169B5CD5F6E65C +91D1224171D25026FE6C030C29FEBCC84AC1D4FDB1E027952F00658B3EEDF9C0 +E498969539211F54CEF79EA07E8BE789CB88A7D0DC064C6B138B0A08E78FA517 +A466F534A15C839B94D7643CFB51C8B0D83522479542F044B14A751D5EE125EF +08539F8A1FE1C0F083747BAB9CEEB7940BE0DED33165DB549D8E91EFD50CB8FE +C48BF3901D4515FFE1F82CF7155F7A441C00D380EDB2AC81A23114BF7E2CAB46 +2517D67692C1FEBC62EEBA954BCF7407E096D839C9998AAF740B2F6503B4B40E +A85255E6AAC61D6E83E25D205DD4784EB270CA150F639078DA1AC9B2D2338488 +C0DA863DD9FED4A30C6803CB601883E95C1209D1E3572EDAFAFEB2D5B8F025F6 +84765B31CAD2D66C3AFE6417E2156B039893183C7AC26EBEF0001CECCEFCE180 +511CB2691E429155ACB128EA2E33E38434467F89F9A61CD996921C8B378B72C9 +EE97FF7AA8D2CD8797037892209C10F5947350E7DDC33DC6A01D23374CB1EAAD +537DEBF3B575143F6BDEF20DE12B2DAC6B522F7048E23F9B22B2EC042DBCB851 +5B392DCE99C783C870EEF9586D731732AF882401E812C2A553D6DBA2D78C324C +A653B748A155C1AAE475B5B7D416E8E4463AF3CA87146BADBA7DB13412C94949 +317812DD7BD9F9945DCBEFFD7C05BA588714371AFCD0147B0F7A5DC66E0F0F7F +4B597E49716029FFFAE90EF4A6D633407CD450BB2B831AC6289F449724DCF278 +AEFFDDB0D12BA46B7D39F11888A50BEDAEAC715E4B880E9FC41C635463BD99E1 +4C401E5965405ECCE3AC654A2AFC59E95ED0416C797E5F145724DCD5A293A717 +9A977A438CD5EDB02D1208F8A3CDF4E00E6D6A188DCFEC2CD5BF86CBF61D7C67 +A1A0A7946A35D7E7AC06F71DE671E33EC9A9ECA21E966AB453DEBF483D36F688 +9D03C08AC0B39B8FA47C704E1B7522ACCA02C9DD0A21D47C0A4E007C9C2A6F61 +C0BD63CAAB8FB38E4D9775B42C49C33FC4A10AC96F71D2282E1A5C3CA63AC981 +3F84C84EB68C4225FC169E8BC6F0CFDD7CBD8EB98A49C1F60705E8F3686EED4A +CF7E7FBB6630537CACB9C8A7F75DAA999BD91F88AA09F399AD41C19ABC746E83 +93CEC3820496D0C0B4EB224AE6286A637DA5DE +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMBXTI10 +%!PS-AdobeFont-1.1: CMBXTI10 1.0 +%%CreationDate: 1991 Aug 18 17:46:30 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMBXTI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +end readonly def +/FontName /CMBXTI10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-29 -250 1274 754}readonly def +/UniqueID 5000771 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF +E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207 +BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3 +3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2 +F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707 +C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E +BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632 +2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1 +879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D +141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF +63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46 +4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B +FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD +395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003 +82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1 +763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019 +165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E +57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED +E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5 +178DAA7C97C35EAFA47778CE03E863303582D8A9900EF4F8DA879DED54BACD7A +4A50C18AA2ED906FC4DC073B1E6CA1E3855AD5B7698EF4A96B77DBE19A12382A +CFA8717DE230CB6182F2250885B8E90AC42A66484A7B527061B223A6D1CC72D4 +890359E7E04690BFFA99FAB5CC9999F0873A9DBE49E33F79E483FAD72313DF9A +7B7D926461988C23CCE9F71AB7BB63BDB2B10B3F78176380AFFC154825C9BDCE +82303FBFC3B59E070438984C28D12E8655BBBF049125BF56DD2B0DE8C0450E55 +82832DA59EBEB001AAD86F2317460DD7ED264611B9043614221ECF +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.1: CMSY10 1.0 +%%CreationDate: 1991 Aug 15 07:20:57 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.035 def +/isFixedPitch false def +end readonly def +/FontName /CMSY10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-29 -960 1116 775}readonly def +/UniqueID 5000820 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 +7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 +A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 +E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A +221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A +27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF +5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 +0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 +DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A +71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 +4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C +515DB70A8D4F6146FE068DC1E5DE8BC57033D79919697C81395D5B94C3AAAB11 +52D73937B8F82D3E2E764DA1B3BE273CBB84E4B1919CC1D5586C21F6FC23BF1D +82DE5A8DFA3E8F5C25622AAB9F7A588532D13C663079C8FB84DA6BD4D2DEDB2F +84CE30D0F188EEA26BAA650B1AA18C7D241CC179AE82933C45A82BD57808E2D8 +032E1ABA37E4FD8E27AF35326011B8BD7FCA4EA71B5FDB60F7D63D0874B77656 +F289B324BE95E33A9B732669966C96E64C4840A8EDE39410E6F6F0F027063530 +B760AECC1594FED97FDAF84016D6D7CD8358E062040143593FD734B7EBEF810C +6B1B941E0676910D0A04466C27EB62523967DA65748264D137D8ED841E3D36A8 +06761884C9AC0DE7C88FBA06B933E311EC28B17428C69C796E3F14C6E7CF97E7 +9FF2559E5D1F9EA00554A5995096075ED8901E2F45E76B2C5566E947E41294B5 +9BC17D2F1AB2C577F2710540F7235BB4569D2FEE06C8E45C8A1C0BDCA78A43D5 +7A687297D36E269B9EC59754EDB5DE481018BA228AEC200DD877D3E5DA7159C6 +50F4D7348BA64508F84DAF7FCF01B8C5ABFBE5861D4B32F9E32C7C4B2B6EA064 +F179E8F62E3A59DC65FB475A3DB61C36E43AB3EEF286A50FD5F57277747CB7B7 +78284143B3F0196437A1DEC9E61454F80C6720D8008EB945799236677E7FA331 +E091CD5D924C48EF02DEB2B54D8EE02897C481C815C24F15A7548E2ED908E3DE +3763983CE2ED0A86B6BB97B4626F1AAFFAFF27CEF18947AF2EB40D7124A122C7 +6A6ED9E0528A29F7A238DB73B95869018D40674CEDB9A993B6C117FADE48A8C5 +C6ADAE4960C0D56F3E30ACB38CA8AA8443166BCFF6A5FC2177C6836859CDE55B +E0F1E80605C8670AC34DC8E8586ACA6E1CECE99C53A42C5730 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSL10 +%!PS-AdobeFont-1.1: CMSL10 1.0 +%%CreationDate: 1991 Aug 20 16:40:20 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.0) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMSL10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch false def +end readonly def +/FontName /CMSL10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-62 -250 1123 750}readonly def +/UniqueID 5000798 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE +3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B +532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 +B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B +986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE +D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 +9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142 +08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C +30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF +C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A +BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78 +5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D +43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1 +374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23 +DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4 +B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83 +63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B +89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A +5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2 +C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5 +7A5FD1B49560969BF5C44F3749370663A04776F749DDD7B50674D93254426C4B +EFE264BEE7810EC93784B7C01A7F29EFD92547E13A2C7851A2E709FBD5B87850 +4A44F08F56A542DBE072D2FBC58D9E6468E1AB858DC35240E30D31C7AC13D6C5 +7D2BB634BEE96FA0E10F842B11A789F72A333DD6DDCB1BC23227EBC406E50B40 +30AF0C48E6359AB0C46898CDAF1118E46BFF8B00F54EACBC2AC262AB898C42B9 +2E080C10DE923C195ED0A46BD535972F0A59D3977A0C4E4C413050044C486CCE +9413D853E3FDF83C84B0A7E5FC5AA859BD382DC2D94780F2B9FACCDD437183AF +E656EDA4147CB501BC39013529A953D6D78F640BD51EE6D1526D1D27F2538715 +2BFA7F33FC8CE7A1B811D7E4251EE8C0640097D655F9EBB15102F85DAFFAB797 +0E07D701E1BA93C6196EDE47DCF0491F102A3ADD983898E72900D1398033A2C1 +CB464B9EE9A47E7DE97F7D4ED4E99530C9A770F43EA6FFCBA27C41B4668C6047 +FD5DCECE8899E1603D3DEB282DFBEB30C8040E7EAAB83B8E78B2F7F61B7E8A77 +4C544F5ED83E5056EED08C1A29221D05A4949A0AD635D9C930F7FE8601D74FA5 +33B2F4FD4C29FAE4346FE914B123BA9CF5BA732FC430A128EDE270E3C60BD7AF +CF54674799A0DC1C214E10BA5511B29813AF2E3768AE494D240EC647D9851CB2 +EC38976C6D8763F8C413B8CBFCF8EDD0FAE02F72C6366F5CEC2715BB7C90440F +2D7BB30CD1F107CB2340075D2A0D9D4114D644A09003403685A7D466CF47362A +B3187106FB1E2B32D7FE26F9231BE1AA87C8556A5421528BF5FC0478AC567DDF +EC95E6151FB92C7986631F641E23CA968DBDDC42A5880B89CCC00F09B82ABF41 +F72B2F9F28806308176EA7081DAC3DE89BC389FBC54E60D2C6B666F18562BA0E +32B5906EF1C2B6A31FE0946E648C73142ADB3136E7D2BE4BCC42E08DE3A5F02C +4B8575B1A296F04735C0F30C32D3DB7423FBFE682109815234C88BE292C8F313 +F667207D842DE2052A8D3701AE71C44F6C4788AA08A967D66270C5EA7DDB61C7 +56D7BCBD106F1CF4EA7BC3A532CE23E29368899E7DE2175C4EB20802FAD3E840 +FD7B7B9956777195B646FCA2E5F4ABA05940E269858FDF5CBD236269C9FB0621 +C8224C63BC120EC8B8ECB643468C468CECAD06EA59C1CC6131F8091ECDD0D23A +419DA3F684B229B64CADEF0AD3314C91186EC445B596FD398F41880FECC56453 +6459474EAD902F020B750E99DE425498DB3ABFCEF48305FF9B0C412ACE5363C2 +75EEA02FC8395179DF95E2A257E273F07CB0B899EC5E5AC093C9EEC345F6FA2E +AF7A6FF8AC2786F25DFA834FDF023B1DA2C4301D807999010C5EFF3DEE1EEBD9 +F4D888F285847810A3DA48BE7B63D23D432231E1C3FD7D7F249A68DB43C0B439 +6EB0ACCE9083508830ED8BA1D9DC575938B07F07D9DAABA164281A09C7D00FDC +78DB17CF89185DFF736892A6741CAF6B3864E92E7DE32A677E64B10C9765F925 +CFF01D76799957C8E2A4789CF754E9352C4957520A1D5303E4DFC850A5918A9D +B90735BED913175122AAA4426917ABE09DC19218EABDE6FEF861669F60819DBF +6A76690FE9C9CD86851FE1D1AAD0219178779037A3C0C66589ACDDB712CD236F +DDC950DC13E099B747F7892B0B2DAB00161BA35240DD4CAE298B0EEAE5A4A2E5 +4DB38F070F3985205B2391FEDC8AF24256323A68AF8FD7A62BBA1A2F702F5402 +4EDC17889993E0D56817E6D2AE1469180286651F6C6643770D0251C8626A2A6E +2CC25B87A3A520335B2AB1544807683BD52C3B8C3DAE7AD46077BC08E91D0701 +387312C9481A4CE788A11DF9E94A5700EA62581EC3BC2D0DDC709ADF5ED14CD2 +6B23D4480BFFD15828AA39A5E6A9BD9ED07C03F3B9528FEC1328AC1B35B5A1EA +C0BBAB5E5ACEDE99FF0099625897168374623C391A76441CCB7ADA5B458D0EFA +B829328D3A34C297BC605B3979C7110C90FA41295C25F84616A8F79A31B4E6D5 +B6F443022FB9F3AE6A0C23DC97F1811F50E38C254126EC2B9DD3992A6F61DED7 +02C3535B414C33DA24D5F172A6B34AA29336AB5AD10EDE4DBCDF08574BAFCAB2 +25D741156747BA56BF1069EDF0EF8AEF00C0B98860E8928DD5FA7600B2068188 +CF933C1C23DE74BDA86B3680D1E81401FE2FFF2905DDB015ED31F68F57BFF691 +DBBD798632E85A68477BAA42755C34A14D063059F88F411A0FDF0DFADFDC2F7F +B77353A472CFF8B6C420C535288CB18B0B0CEE480DAB9A767F2F6C7C427310A9 +BB1FCBC48C194E91855E54CA50C1EEF64B1BE0F7C8CEE9E1EB620902FA40DE3E +96F962F6E38B2C64BB774F45BA51986434C8E25716EC38E320D0914F68645DCF +67454133BBFDD4AFFF0A8ADB82E9730F94B17964A5E8A4FC1D630D4C7A9CE970 +82C0B79D4E4B98CB3E173175CF1DDBD28A47FB67BAE582F9D072C1EA0B5A2B42 +988B173EFC21F67BE388BD8C9D1D83D4752DD5A6CC8DA57A86BEC2FE2B1E269C +DBEAED127C4526C27FD349564F988DAF675C80E491162FDD7BCEBD7F3B13153C +2AFD7F9D5CE941C6FCB0E585FF99D5706B3B90E630CF4985BD5CAE567CE919EB +2DF4C66A7F366F68009E80373C0A9C386C1D30CE77A112C2BC3C59A2EBE50225 +75B58ADCB776094FCCA56C3892D8FE0911361D3FB581A7F2B2DFCA79042BE3A5 +80AFA160903B86CD46C65BC4BD9487928B06F6E387E8069AFFE9B2F784C0F722 +53E3FAE45E96D993999645621D2633035DF829279F51E25161A7A48317C904EF +264642205EF3D61840425EDDF9B5B80D5F66D642F7C393CACEBC8DF6838E074F +FB1FEDE41F42726CFBCC96B5BEF17EC26B27EF29087A163F40E3A1A777D4352E +7E4E389F0685FDF4A6ACB6C88D997250104A35E879A0C0203BFC3BA7AE49AFCB +3E8DFE3ACCC3F4A7364514AC94346332EFF06D7199CC29F017D9A21AB8731ECD +1E01E0CC9B503C58A7093B2FE69282AAAF604849D7B916B477673CEB81C37AD7 +65B3CE3EA27E158868CF723F803409E48EE3B5B68D5116ED1276C95FA12C46F1 +EF8633329220C07A6C5830EF35E5F510F50A762EC69C0C4464175A7F8556860A +1D8C0CA834721A33CAF6CDAFD6658B8E0FFE72369B355AD2A854D6DF4D5E2922 +EDB5DDB055ED9E349AA71B211A6C07ABD6A9184CAD668AE16F0DE68D7ABDAC6E +1AD0A61EE9864500045F0F033303BBA2879BE36D4A52AEAF51CC1377A85D326D +424E03664C527F74CD4466987C232AAA468048E5B517B79E4276EFE4B9B881AC +E9BEC15016A207F3B270507EA8477A8F97E8E8B108733B4DC48505F14E93B75D +1AEB210FA5E55F8C6EA04AA441A385E336B9FCB337C53261659A7AE9F69489B0 +E4B38ADE248B90043A6EB0DFA3795DD111931CE6462CACAD0B69B185E627B156 +960F46F9031790770D6A8BD3FC3F535CE85FDA7E27629AA14B3D97DE676EB440 +DE7ABD25EE41CC51BEC18F707D35DAD24662EA4EEAC59FA0A8F8AE09CED2653B +013226BFFB578ABD5E2341759B229CA9D1882465784D5BCD351E3884620D0A9F +075F1EA689A99C7F24878E8F79ED2AE6A8536F9D1BA1C07A2DC05807C438CA44 +F3E9708C877AB2BDD3F6467C39419606083598F1BD22DEDE6CDECEA07A838249 +1D289F98A1108574C5F13B25E2545B7146CD9AF5D11BA3DB3140EFCC7365C143 +DE5C87525122EC71BD00E3ABF2939DA6BCE4EE64C4B56271B393F3CB00413620 +B4AB8AA010B38FF264E76A5E74F1EBAD812BF9E7E0188F3308D85434360F124F +8E9B24133BB853F4E64D973254E304BE6EAD60E2343DD994E61C26C496B4517E +69F577D13817EB375933FD3FA53C9A1BF02A89CDFC00296E2A2D2689CC850088 +73E181933D90A88078AB76EF5C50598AFC12CEEF15A2BFE3C87B773B7FF1B8DC +3F9A8D68908615F621BB695C57215308F69C069C24433349DFF17E8CA7273691 +845DE5B2B736CECA05A5BA8B3B61C04305C5CFB5E089FD4A8B9E6BAE31C4C5FF +A84FBCB040C72A8D453BE0B263B223A8A9D1B74AA175F9AE02F2F4C34BA87263 +830A03CF5D34E060ED148221E3C617D1D4C70003EA05623C4C1F2082DC633E79 +A1E9D57A4AC834BFED02856B32DC13A39F39139D59F9637B8470C944D03A8D97 +DF61859A53954B7DED4738BFB91165EC60A44BB69D607AC6B70F592224121960 +E56BE9A190DFEC3F07EE60AC62AB28678F8DCB6A77CCF44B153789AFDB28CBBE +BB99798FA478CEBF9C1BEDE10DCC704FC3FA0280EEABB6E909056242B7A2E193 +DCE348EC8587CF15D40C219251DAEA07854234A9EC835190EFD1CC69B3C7EC82 +AE57FEE324AA2F1A45EA3BDE5F60E1A232270C2105D57D3845A48837DFD389E1 +02293DC23B6E76AD95282017E91E7042D9734D82D46E3DBEE0CC790F4052E008 +B3792AD9822B94CC445AA1C9185466DD7D28A0F7D6A33D727A485F24E709DB18 +86AA1A798CC7758BE528C4300BA560FB89AD49AD57961E96799A1B31DEA2C715 +4E804BE9396A1AE54C7549E73B2ED2F548B042D8DED2B7C7BAA049C7D120149A +A90B7D458D15B8DA6F533CCDF7E82D64A7E0CDEDC2D281D6B7E470D93849CF17 +2A579C3403F6FD16EF49C6F136449EED08BAFC1E0D03CBA37B4765BCA1F26699 +17E542001E2614D83877E37EBAD25029B97B94AC1586BC42A0A0C49066708051 +0DBD7B46D45A02E2FDD9F2FEFC8B1217811A3BE709F392AAA03D2F7EAEC828C3 +3C5EE95A5E273702A176ABB4B2C4BA48EE7F16348F650D426BC71C3EB740323A +A8BEF22F6EBAADB73AD4C9883557AB33451A89DFBE25CA6C184A3C37F058C3A5 +4C6EFDA4E2B0354845CC6A38293891891FEF286712171E56FBD8B7A9EBFFF47E +FBD889E1EA7D08F7A06BAF9CD988773FCD4DAE43FC6A9F80F1D6A56E550CF799 +3BBAEE0303933E02D1427A5842C9272D3D0A0ED94ECEAA9B82E81EDC54560F8F +2A4C0D28B3264EA640491E24D3F7165A17725C28A6F153C742D01C7E95C79C1E +8229B8183B8C10F00DF68899914534C58E2DFBF7087D7B6A3A4BF875F5A754C3 +B4B8713DC4EB1682B84151887B8461EE05A0C9FFD6F619B83444BA9ECE1D0C7B +D17E96315220F7C341194994375CEA1AC7C061D9E7700B6B30B5F15A6A2A61E4 +25E6C3D0B1E13BCBE7FB89C24327AF46AC62B2EE332348B55D9E6D599D9FBD79 +E64E8BA6C960A598600EAEB080E08A0D9AF13FBC60218A9FB400D5CF3507DD38 +FE41BFBB0594F43F10EAE9CF159097226DE7706F34871A76661B6CB9EC1127DC +09651E98E34D3ECA5BA7D695B27645AC8C16364CA380D45524D700A460051B62 +A69ED221BDA45051C1723796A305A3A7C85A62F5DFF7F7ED690DEE4C0BE2571A +155ADB8BF7DD4E6B31AAD3D884337C1A2F99FAA44BFDA357966C77C35A435411 +2AF36766DC0BBEF0B50B742A9C9E8541C58AD964B26C47BED17B5BDD9C5520F5 +947E4B8017AFFF9FDD3BF15B2DDA6CD750E09222A3DF1D9ECE2AA6E22CC5FCD4 +C6746E58BD628558A7157B72F6370507AB0596FD4F4821A800A358BE7B62C7FD +92131D308957E99FE4408ECDC0F48F5C747680992721F9D96B41B956C14F8E13 +FB260376C508F88D30355C94D0208D419F81019EE01A114E20EC2438C3894C79 +62096B4A5F6288116308FB98EB0DDADDB259205A11C56C6AC6C5E1C8FF45A25A +F16596B76397BF54C3DBD0ACA1599AC886415E46EF99FD15C9218125CF0426CC +B6B5BC60C0A14CFD116DCDCC3CE7DA6962B972AE23BCBDC5F283A807A63C1C8C +9EDC5D95CBED7A9E1D63876A55C7A8878DBE0C66FAF5E7A680416840156FC63D +FD8FD7FD12F32245B3084FC3532F3883DEEEFD52325439EDADE56EC1B4845CCB +282FA0EDBC405ED2FC3B01FC93D1ABF06B64B2EF4D6FE40B6BC91D7540BDC5EB +F3681BA084FE84FA153E8E11442A7840C6F7FEF98E346601A67885B3B0AE2EF2 +E3703ED14AB786488C48CD937E9DE8B666CD25DFC9AA9351338605D653BA6EC8 +16A18D7181B2DB084BB1D3E75C84D8CD3533EB35F150F006C6047BFCABDE14EA +32FE9A0C1BACCBBAB3F6595E1D11D279A34CE66D0BDC09764436A23BAFC467E7 +A986D6947DE65B77BC8480B94E6F66F8B4D93FDB517FE1A6C2AE5FF3BDA37919 +6F34C72EDBD09CDA95D751CB5ADD93B422E98560EA03AFE810E1435490C19405 +C534026D001C4E2A86EFA7F342E3967059BE771E728361AA77E8C2F497442E24 +AB938CBA02C5FD0561A601BBA8AE96E8232212DB222C202C1AB4B4EDB4494CA2 +77221C9EE7810640B730DD31FFF60F2A05DB7FB80577A48513BB9A76B262EC6B +751157FA65B47B7CE97D61DC0161877F89210EF3C9A8CEC5DBC5EDA5B9A8770D +7643300C9C3A5D00F0FA18BCBED0295833612A57246D8184975ADF14D84C32F4 +BBF15E6BEBDA45A2E8BBA461D53C090C25BF7FD351CBF69CC904EEEF8D7802D5 +D14A4EBE6804075D2F742384749150174603F14519BAC00B220E83F7309D15BF +12A0DC08230DBE23EF40048A77ED17D9F931C817F780C67E59ECFEA62FD4D8E9 +DEB4D1A8D28643C4E476AFB2F86FE8E5C353F08B9D0F0C10035B1737A7D51F4A +6141D0000F04113A7FD710DFEAA16CED294E5AFC3856BB243E2A676794DE99EF +660C4B522E5A4EDAD43C3A0A359B4B34AA9A59A6E2D4E5217553B790ADF45A9A +7636529EF840879F18A34C3C2D5207B4D14C59E264A6415F142A7C0294597D64 +D02A28F126E774A31604FCC671E1BC0FF681082B2818792A60DAE56FFEDEE3B7 +6EA7A834D088E6D10B1673F3250D229F1BF59CE4D0AE3376E6FD99D883B2ED03 +71B72A3F679A5DBD76BD2FF6C04435D14364C4A61AFBC0D5B31E48BC631C0545 +DD3C1C0FBF3123EC3944C404D37398D05BE3756848E59FA54EE7C34D0D5382D8 +74DB6A6E70C7A5AAEC7B941B4F5D800B226D8976473FDABB34FDBFF2C6016FBC +5E34BAA392A29B7CA9F667D609EA7A391C6067566631FA910BF17DDC0CE56F37 +A2E6A22228A4A0AE138924F09275921C8DA60D818AAB8C2B06108DCB9A85D6B9 +DF6BF40ED6E86DEC75A2DB917E605C1735D5896F29D762C77AC212994AA2F9D3 +96857C5A2F3E86FBE7E34F34D8E0CAB1024AAF59699844CECB49D7A429F4BD02 +5567416D4D0152C3D0B6B77D7104B20EE19EDB264DF437E51F4BD92D21873FBF +3D35B2EFCDC5F146491099BCBD3B381AEE555FC25A7B0713FFB082389975552A +825B8762D630B204B99D97E0F0062B358E1E443D65CD8DF3CF8284CF38066DEF +3F130A06CCEA592955EA05F416E0F67AEEB690D626728426BA54BC4C4083CBD0 +F3F9A0E7EBF3B1489C019F7A29FA78F77D8A96251B66D73C7C858E2B7AA768C0 +31CCD34792D6D093643502BCB4453C3D5DEA5B577EF92D3EDAA22E90827F3573 +A811FF5C5F6697AB88C42291498BC348F4102BFBE007D68092C0057DD8576A9B +5BD032CF7196103028156CDFEA122F9A7101F0DFB1C73D3B5605A73C1B335EC8 +7DA6B4CD39E976F7DB91CDA187B1CB4E4338F7C72873F24D5C02934BDFDA019A +69FAD10C96BD82D12D07A2EF76D86C3082E1D68B0A4462D0635A8F15245EBDA4 +4EDBC69D510B12637F02ACEB3A1DF278C4055B98D77ECFF82BDDBEF4C5AFE2B0 +B88A9EB5333AE842093A80E2064BD36D5D81AAB9D80CAA04B55943FF5A1DDE94 +CF3CA32648BDCFAAC88E72CD3ACE65C880FD8BB75B11A8A6ED351524E1DA35F3 +13466B349A3E4CEEF0C1160B1F95643B500A171B33ADE7D55F4EEE1934952333 +2CBD044D07A12985D93FE51C93EC8F629DC423458C1B631A7364E17B07E89C40 +256DEF8A88897ACA388014A2C6969ACB9B3AE6925B4B4543BC924061EDCF86E7 +F51F447A7FB62E03A05EA6FA2DA1CD76615680FE009621148647C7C74E4BC6E0 +B34B356A3CB8947E0F775AE6079FC4594F39A4B8218E5D27DDA4583D9D5BAF07 +009CA08E3E08E407D0AA9EE80E3B0B049F37DC38FE8F7FD055CE316D72A6993D +60CAAB09DB8A899E5EBD8AF11BBB8B2EA8E644D2B6CB4D9EED9266EDDC3A7ECC +FBEBADD9506987DE2945A65D027DE828D5A12FB0D6AEF5D6A2035421DB46313A +9CB95EEABB6F5A87013C3F3130DB32B3D955D22C9F3095A19715D341FD118259 +C661FC30E9D781B32396A8A2EA06122045D98EC5FCC6CFE11AF9B2A2FBBC99CE +45925EDE91D6A964B68EE20032B96A71B48DACDBFC145B6F6DEA7F011DD7B246 +D9DBC3CC6B1EB35F471FFC463E8444F1E1CE43D3D41A113D9601C12FDD755E34 +86B8202134691C4DA22717CD3F9F958CC6E7BE20CFAE9F10EB67C0BB58E40F17 +5E3A142AE71E3619B1B61F706F611496EF29DC07111BEAFCF4D2979D39660C0D +05A8A2BA5D2E0BBE2F522B6BA0A39B27AFB2FD2DD4666A0F895F49F7833C2661 +88D28BFD7522A9CE8EA109E1B8273A1295F4982907109518E82A156A9C4D7F27 +9B7EA2CAD89D22A3D56637D5427AEDEDA98A6D9257B419D761C8AC925B61C93D +5E4C47DA6EFCC66A6A4D3B7FC1DF27C6F5C7919E34E9E7CA982C0D40C5D53F0D +0A09C57FF29657A7FA230102C9487A8D68F93F278BFF94E6CFE8E5E3BA38A082 +744F9D018A6D7452D2BF0D06BB61D72F7767A4E9936DDB660C8CA18468262471 +3C81A68BCC375326C935B90D02F80B704F479DD7F030B089685F091B3144E794 +11D284BF2B8502964E4F6C7B79FC2C37197D52166E377D66AD0E7D0325909D46 +E0F8A35807DFB8C8208BA672EC21188149F3155027F16A23AAEFDD2F3AD642F9 +310D631E07655AB6885C6C3882CCC8690D05D96779CC83A117D946E2F9F6521F +B8F4458B8E01FC30CF59ACDB52DAEAD21F7B7F490D74898F2570C6FA5B4DB522 +C077FF694CBEF398F0207C708D7C3E4F8EF42FAB91ADB4CEACB592E56035DA1D +E8C44FE37116712D588C873D8C2C51B960E97D07651D611AB133D950258F0A2A +D8C4557DE5EC6D98E1298B71FF08B5F59C6619AEA88CEA839A16B9C810438B78 +060594A85095D525246CA31DB045C2BEEBC0B1F8262C59F9A687951AD2A1A5E1 +3049E4BC2CF76E90956DC45670A6A7A6A4A07983758BA4887552CB30DDCFDB02 +090E12B56D356EBA8E7AEED14E4EA4C36A528A7F5105A545BD9EA5BDFD1F04E6 +C65428A54A41C5977142EBEB7F49D65F1FAB9FBBC2C283EC7AAB8562047E013D +369A009127BAE150E7822A278BB3638BDEDE5A1985DD3081F08EDE5E0EC8C4EE +56AAA592D3EB3BAA1CFFCE3AC23854790D0B648E83E2FE3C2CF7A14ED0601761 +E5A377DD4CFAAAA59D375499CF40DFC355D344AE50DFC65E4E5AEDC0ABB48A2D +12DCA4C33F9671CBE7CBFF6D302805F433F581B4A6B1E4537EFE9C11F8C808F1 +F9C56321C402BA29DA2BDA3D2468CF3A26276929980D53E3BED09C5D9C2FAED6 +DBF053142E82A04F618CED7F51D09C28A1885DA028F275B85D3BF5DB6D20FCAC +6202ED88D2DFC36D642FCB236F51B4016D7380CB85FC2306D986345F8A127EB8 +E32C7118C0F77B1B668D54FC2E8A4C70A681535A5117DB2E3D9ECD1B59A476CC +8BE712591E1135B8E05652849F3A0737EDAA98E160D39A1C83AB9E586DE2524F +C22C5BAB3075D6198C15F9E6EC9C066B085B532B8B1ACD16EDBA42DDA0C6E2C7 +DA50A742E55A1C4B86332FC7406BEE517373BD0E5A252763DF5886F433E60A64 +7BC6B0E70FB998C448F7C2D431249B581BF20680572405853CFB5CCAA1DE68B9 +D6AB0E0FE7E0C4D9DF2444267C6428C6D5CFAE69D651651FBF84C606282B4F95 +0C81904C77350ECA5B82128A4BD281C9889912ECB461D651652986EFA8B701F1 +4B721AFE6AD536CB1968FE14D0BADCBBDF798D11F4DC6A3EF533B3BB8A236595 +B70C4A03E6E33A6D44F93FB54A63063328305D2193E012D24E4D31E62CAE4DE2 +87D59D842475522204CEBB88D08AB0DD5DF57B6F165C693DD0AD34B87F89AAA4 +9F7B7A880BC3A5DBDFD9FD9C3D3B9DA30B132CA968A216BB52434FD3FE77BA51 +A70210B1ACFD28B81BDB75F97712DF6F7297F34A59A393006A881E2B3CCC3F7B +B39C8D6E99AAAC39B071B7F383F9E8EC407118C5DC17BEB0D737059ED7DCE758 +83EE43E0514015D490C2271FA5463B93EAEF9B3BD3C88CD74A19D9DC95660C96 +0A38B26D3B023FFDD27FF6E9D98ADDADB54825D2B555206F0E7C889DB55347DA +9A4C9519C0C8A8D3ACDC06AB3069268BA83984376BFED1CFE3B1417845911CAC +5428A0800146CF549EE78C263F36DDD8A04A75BFBA4534A78412B7C2B6EC47DC +49223DB72FCDC5E88839709D704C196133A3032149AD0AE29950C8D6509F877E +04B849B5AC09421BB33B658D30CE6E04DA1A35862043BDEAB7BC684E1A6DE8E5 +CAF33EFC866D6D075C269693690750D526B801DBAF5099A04BD3E911135B118D +EF01207599588E25EDE475FA428E67AD93FFF63682A9B1F9ED495C7AD50EB96E +836A965C2B27CAC71CE79170C4F56E0497F0F6CA9041E92E1D01078FC922DDD7 +3F79147EA667173AB4E64AB4E3664054547AFC2E2E1382FE059C37B352120D69 +6A15BBA8670CAE7E310B03C2A4B12FB33617C17CB9D992AFE2DB2A1BC1DA806B +1B82DACB2C1157A8D3F5D86353C12F474078418FAE22EB4213FBDFED904F0156 +C17A9C5205DE359694C899E992E40C2B54A565F4777C0147E864F25FD4C487ED +6CB1C1BDD93702AEBC7278FD7E62A79A28F7E3A16E763F154471E001D21D4FE3 +2FD8ACBBCF301995528042E861A9830ACACB99669EABA851FF2A8609D30B9775 +A048BEA2E1B538D9865A8A646E907407EEBFAB32F76BDF132E905764EAF10891 +907EC36BDB2D8F89CDCF5365D2FDEF131B23A8308E05A696E5FF6EC44066FA26 +9348C4249B64F87D71C552F9CEE2AD126AB9A9B6FBFCC58438C6248A7C0962C5 +6D7622CF440288F906566E4947699270D4E5BB1E9D80E10C17A7147852495892 +707F47DD09B09802B37B1D40F848BB9C732941996EBF595184E4F484BE6561EE +9BA94C00F1AA76BCBF817C814CDD4ED94F025A31765A118C75E6F3B2C6C2767A +090D5389DCCB5A0ACCC67CB1B1DA2EB5B4B3EEAF5A4D7F390BC83A0C1B2B0910 +C180698E9E7F9D288C3BDEBD37D74CB5710AAACD2FAA4686A9A750064F6B306B +F86C9F4BB77ED693419232AF4C1D897A6A5B737B41647A7E37350BC7853FBA31 +C5CA92ED67367D9858919229645A81EC6E30BE97FFF25AE6FE8CB16709D4550C +DD5B4098ADD0D4D60ECE796384C007203A2B00595CB4608AB8C265C4E67FEAAD +7B5AEDADDE94CCB6FFC545A9E3C47B8B911110EDCAF2160135492B722879C62A +6A8FBB02BE4AC067194682264771595601859CDF549C3BD7A3DBF7F681D01F2A +1FF5329CE52A00E9FB7F76E7F50A2B37AD1DF467A7B63EE8555FCFEC2A8C42CF +C2297EF18EE8D49B0FAE5FE08857F0E0424FFCC5804D3063715F039C7F87396D +579C57944840382C2A9524DDA1BB3C87866EF386581F2B1ABC18BD49490EC9DE +5D184B752A976528892A0401AB4F165BEDA7597236C6A5433D7B8486FB007DF5 +A0A8503322639EA7916CE8D727284E90CD3F657E07C10370B3D8708B26AB933E +DAF9BC060C2DE8345802CB0A3FF962FCA229295E15A02FB35D15476EFD85EB05 +AB102C504AC86BDFC3613EC7E947D5411CBE0A66AFC012115334ECA15BB0A353 +EAD3C33090046DD5FE981BE10A7EE6FEB747178AB6357EE22F6BE81D0FD617D7 +ABBA0F7ED0CB5E14F213A96854FE0FB0FAD0C3469A9590BCF9E7076BDC8BDF20 +933DE9DD6E99EA0C7DF1D28114B7EAD10367BD28A82314829E4FAB344F3A8882 +080BD2A920FBBD2227D2DA1FD6AF21E538DC10E50648535187EFAE304D0F72E5 +0746BE1853D59A1FC89BC3847BB8A0EB5A1BFD83B6E465D79012A80E27AE7BDA +590BCDFDAA602DDD8D596F3B57490A564120EAEBCDCE0EA0000C572266CAA363 +536E654DEB595B137CB03701ABF08EC994B2D48622DCF99E137BB27DF2FC85B3 +FFFB9D781ED87B39054756B9B9AE7A13978E8EABD8F30804031CF77E698F8852 +F26626A3D817D3A3234475A80C1768CABAE431CC6E552596818F9B47161B8C67 +CFB0618039025E0B76E95B770BD302F3EE622C5E0898B34027932498345DF0D8 +32C65257F9DB75D158EF0081911CFBFD8E73BCC7F254C17C0B72AB39CE7EEDC8 +8ADD52AEB813C016D982BA5F10268E28466947C765F65C80E2595B2F732D4E68 +D69A757D8230F6ADEB79D31EEAEE284EBEE7E40A99C422050B338A07564BF7CB +EBDB383FB6E5F632A972450E4F88241F4C7CA492A860822054E41BEEB3A59E7B +6D6E769894FD8FE20B47D25F43809077696F516DE603D4EF1D683FC9895B9C4F +00D38E738BC1899C9403F9BD7D861B0FB18AE11BBAF4438303AF6D1942A41DA0 +29FB10183B46BAC9AB9E858D95CD54DE11D3167B94F0642E89BB08082A3E589B +33797A5B481669A45C76463B69BB4EF884CE76812BA488BD8A32DEE0AD6E9762 +10DE07FF0216F6B88AECD07E5A1DFE60801607FDC4F03D9A5B074E59A2EB23B8 +D85503FA1D12A6717FDC69220E31B04911E249446AF19FF550B09DBE833AE75D +6BE48EB06866CDFB7999E9FCD923E5CAC8286D638C643AC161A80B1FF87A44AB +6181929F69A6795591D319879BE5999F200F0556650475472F9863BE3525F6B3 +9DE2D2CD94229A257602F4956A0018A4211324E3ECEABE650EEA36D34A77E5D3 +DCA8AC728A71377A9E7A9B12E58492196C852303B9DD4EAE6983066C6ABD4D9C +7787C837EFAA2F9D3FDE032665323585D4450A9D3E8C7E8FB2FBC87234CAF228 +B5C1654EB2B36AA06224C22A33C7E0300ABA12825C47D2F20BD71C03D546E4FB +2FDD37D7069C6A8EE431A45D810E52CF05A478945988DF389AC0DC8C807CD51F +EB049AC262A09D5355907421A5D3A5903A67C79F2F82BC62EAA06EFF45872229 +1E9AE5A761FBE2BAE8276314A1ABB109FCD681A0E339182720A41099D77C47EE +7B6586829BC6728C44BA90D2A259130B78EA3648EAADF62B501D8482D7A0955C +C7972E5C22435AE131CC837EA6481371E79535B455861023D881FFE838FEAAEB +CA47DDB85DAF8FEBE91A5897CBCFC4E2E49213855ABFE6FBB558A9E27AA46244 +49FD8FABD897417E0008B57675283EFA92780046E5A1D41B3FFB3399518EB86F +4D110EAA5C0AF45563103B89A9388929E719EF8FE2794B8BD18388DD66F2EF1E +8C4206510EB7BE863F23D255C45B40CCCFCA951EF67582C00AFFF61C2199B046 +5D7C463F3AD70446A29F899E95EB6898721C737850E4350FD3660BE1FF7B317F +E2F170120F972AE9923F79D453B5E51845E6264A41E1CD7545C35BC1AAAAA545 +BDF3D419D9D2E6B1F8DC295004689506BDBF6BF47BAC17CFEBB565C41700E784 +70BA1163B66A4FA197EF0D2868B1FC46E0E8695F8C92BBECE917C792442AE284 +A2F859DE93424F51D52D5D1C00DEF99BD1F1160EC2F94F84C3BB59C1EE56CA69 +A6616AD396B9469FBECB6B4986EAF6E439441CCDED87607BDDA10757BD4B439D +28ABDB82D4CC8D4095831509F1087252BBB1DF0557B2F6275F7CC610E8742C01 +ACD9F985641A3C16A8BE1B172BFDFD36115855AC40A04C6C26060D6D95A10707 +B1F56D0DEDA7A48E25D9281790D3A2FFDDD479F24A3A0E68FD097448CF500597 +B662EF8DD419AE338D4C81859547CB86FABDD162907034D2ED814895115E76F5 +B8BA5DF352CBC93260002C3D72015180067F1A74ACB5A6BC48225E116395EA43 +65C12774423923E4859AF3374456F204E0FDC9460E8EE2E87098B9E7A3977992 +F106D0A8C542DED8B2E4C67527810CD19E03275998684483F33E9A6242ED0330 +EC553A673B1B34C89057D5972BE82AED5E88B5619C748DEBF6EE02489C51D3C5 +6DA3478C65521B8FFCADFA3E569963649019CF46AEA9357B5EDBA74A43A4A199 +A132885B74D5879BD2DDD2E444187737BE8CDEC939500F1CFF538BC8373266F9 +2E91BFCEDF58A2CC1F197EA1A941E85E021AAD4F94AB54986AA42E138BF54E26 +78BC33104EDD4E86565FF8456CD151FA2ECCEFC15943B7F0F23C359608D48D79 +B1BDE2A0308CD359089009E0B39CBC21FA4B337E7F502595D6B22CB92C096709 +EEB2B4D1D8F697EDA69C13EABAC0FAC550C5A15D1018B6DD4D740EDB2F9C700E +9383D7307D0F6CB98006B0453EEFF884949DE1CDB38A681B412E2A98312C3A8E +FCDB7080BBCAD61746027D3261389CCC55A6159B18B3B29B36C5071846117431 +C67079CDF2E5DC78EE02F82716E31D6B63AE901E7BFA1EE86F3858FBA107B735 +D42155673489A7714B683D2BC5D630D492F1537823001E70EF18242F06F52F38 +80901A5EF067BE5F2473DBE171E8D85A89796C98074424D384F01DE987F5544F +118527F4C19427E8338B8CC7050DC48AC4BDB23C160EC2918EDD2AFD17B4DB92 +7B9736676D6AC40AF23A6541AA47141C047D0BFECF7DE8BC917FD34A13F2EB7A +28A0EA62137A8A1CE7BC5F1439242084A4DF8DFEEF495D308830F04DD7D2286A +499E3802995BEE8D3236511C1C2F6B5CF4668857386AA2AA42872E5769B49F66 +61F058103691825DCDEF5AA4554F4DA460FACBF69DD8956FE3F1766A72143EEB +80D4F8D3A109C2277C620322B6B33C62382F4AC88E8A49451914A5FDC69E33FF +3C65D1FF4A193AEDCA633FC5BAE6D10D63A98E0A2596B6E65456327E59EFBD37 +B5C45EDC86A4BBD9072061856C4FA228250640406F9976645171978F6DFF12B2 +C7946FF5FB10F4532F4A780BA48F5B203B223AF1043646A484CF7B4DB3628B9C +B06DC7D8847A42F21328BC90A7BD8131B330D9EA2F513C564EB8B4B0EB3E404C +13069D6ED4599EE4DCCD36A4178007D1AE551FC0863FBDE1CD639F05484598BD +33325BBE61C5B10EF6A89886D854D6AD643005210262770A6F4D92E7328BB00C +9E2D4DF7F41D941952F9A08D318EC90A5A6E0EA95DA7F21BBE72DBEA4BBD0002 +C7677F14F2DEFA91794674B4C06696C5D11C1350CFBD4F56FEDB1EFBAF120B6D +D6CEF9ED27A6BDB215C4D25A0973CDFFDDEE574D4BEFA05AD9EF3BC70129B888 +84B6160AA09A3C2DDF44283511B376658B9985732F27A8B60CB60B87D8BE7383 +6A2EE83043FB5390E0CE89D7CE02E9C0B90183E959CB233AF3754C137962563D +253B70B07A45DE56E476437DE41DBF7D178A902E899021E822C511CCD4EAA212 +4687E475F6817C093719800AC5E9B6F6F80C7A275DED35E7E8F35D365C070654 +DC5ABEC55536DC085808CE8B657711B9CE5F2347A5F99808EDFC577E587A6878 +DEC190AFFBB5E443EF719E72A8B5541EEE670E90B36042712FBB0AEED585B70F +4260EC637590AECC2407A7DAB5D789AACC819C3460881FCBD0BDE3DA20E5A62B +3B021CAC46DC9557559B483AB41ABD4B0EA498F483730454826891EB93523F32 +C07794BE2DEC3A86F0ADE128E9FAAE879A961B04C12F1F0E65CB869DF7C6A79F +C7CE635163CBE878B3E8723706AB83A9334F4C67F72D28BD1D02F9600BEED3D0 +B4DBC423710CDE7FFD92C96E5B80D79E2142EBF216F4F10A857A744DC7BCFD44 +CA57CC9ACC7726B1A8F09039F77F0B1CD29FD64DFCD6A179961CA869E3AF0A63 +C1D1 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMTT10 +%!PS-AdobeFont-1.1: CMTT10 1.00B +%%CreationDate: 1992 Apr 26 10:42:42 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +end readonly def +/FontName /CMTT10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-4 -235 731 800}readonly def +/UniqueID 5000832 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 +38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF +D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 +EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 +A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 +F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 +4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA +6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E +A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B +E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F +1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 +452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF +8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 +5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA +DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 +BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 +741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 +E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 +E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 +D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE +C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA +726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227 +CEBEF0C9440DC034DAD9C19FB27DB399BDAEE22053591D6538587C768C1B7B0B +7D1E222D2D8AF3A6473CC4C0D6C3E0DB49068CEB8C9BD1C5CD486A50DAA10BC7 +7D6286142355E3F21DD254E27C00C442728A0BAEC9D3F17AE9CE320D365152E9 +EB0D5E3874F2BCEDA98521D23FCFC30B4B69DAD2ADBE80E5964ED0ABEF6C73B6 +DAD30E2C5061E3747FE536E1A5D190D028F2130AF608F5DDF9DDDF1E77DC8437 +ECB3EC93B33505DF47884DDBD1DC6BBE4098DF04A29AF6FA3AE344600D0AAB53 +B3820DD7ECB600A3B8001C51AF2CA7A39AE1485A087FD1752DF68F55B52B4DA7 +48030F2AA7E570B3D56C4EAD367B9B73FBC0A7356253233006178B9A6BC19081 +B815B5988AE76FE6FAFD7AC239072B1106A3F509381AAEE79B2F2154CAC4727B +D199CDC8B4D05DF4BA006982512ABD7539E28D937B0F87FF79A3F84C29ECF943 +A8DCB8BDF8EA9E7A0E7CD60BC2308C96B3E889C797D0FF28FF4847016B3DA141 +E76FC6BE78A6EE9CE07E651FF86E720A1A1F075972D36E5C55162E3FE26BCE3A +814BFEB12D4C5FD24340CFFED499C7CA183E57EC4F12CFFBE3291D43F7270575 +C6C3306F832EF182ADD0AA14C4D8669A17C09F632406AFA195F90C4DDC39779E +EC0A77E590211592D6EE19563963225C06C2F13265EBB5A6CFB7C17D9E77650D +11958305727AF662AE73AD0E3ED5F7E7086C5A0C3548A8129575980B06C715AF +DD55C8DF869BED0A7883491030B1A7E82C5EB04E5A7D952E716DD8F2EF6275EE +087614CFAB55FCE2BBECD7E8D9C90FD8359E929D5E0A416A23BD58158318B4FF +87B095EB63F7F052B3A77F136FD66EB2C52BD46CD7DB3091A4B78A607112B12C +4D171B2A00B78B0E1C44B0D90C20D9244281F5123DC1F6063F91E9E3E48DE78B +C862D848BAD073A4FCB5EEC9FF54B5AB8E234CCC3C7439C62ABC4A13EF1B8897 +ABBF21F900C564C9A305FC36FC7224932F766E6E72C2EBB55953DFE2AFC2E3FD +33A0C6F0FDFF086E9FD796E7242596AE85B877223532667625E371D2156E4C04 +0D7FFCD3337B93DF066CB6FE1E13960719EB7CB409EE805C08ACD2C06303ED9C +E34C898787A43C1B428B896551C6FEB50A831C6F8CE2073EFC662EC286CB7555 +A3B42E58772E82FEE206948B8C439FEC5E4ECB9E11DC3A4CBC7611E30890E408 +637A01A2118441B4F9467A98BB2A1B03BB2F5D8E3DB7D1D15C188D9E856088EC +B762F07B1C06024F7EF53A2FBD60C0A1F4C0275D07164545250ECEEF8CB15B04 +A2D8AC44DDE818C4E3CBD2A5FA0FE49750886CD7CFAAF8B780255F89DF7F4F5C +BB594FE7C1597DA71813C2952AD3E811524459EB71D29696B450C924B6A5C843 +8F36A0F1D7DFE796FB9564333666D74AE614D0D698FAFF20F83C86524C894BB0 +272221C060544F3B653CB0E4E4F82B20D7530B3806E6A5830852C58070177815 +E287C847F19F64E854F1463C23DDD80093D6FEB8BAA22C5F05C21F99FBA7193A +EB7CD49CFDF4308C6C68CC955A45FCFB54FCADA9A3BFBDE086B057DE88BE335D +280F5338D7E66AD39FD08F9B55884F1F377FB6869FBABE3EAA4B7ACCD85BE672 +724B4B8F236B0889B6E7049CBA558A89F17863E82DF145DB8C7ED1F36332DE23 +3C0053B74E850FA14F9EC9EFC23AF18E153CC96FB0FFD910347370E57F0D81E9 +4A83E2D189EE5635E85A2BEAB5B1CB974546BFB2FC2ABA1E15DC0EC1BB3AF1DB +B2F93538B92F504CBD7AAFE36F5F3AD45EB16378F169B17869FE81464CB826CB +400D2F5441A496B6C60A4F15FD20ECCAC1F8F91015E7E1C1A10B7992A1554E52 +9FBEE905A3005336E49CB04BA7223F1674C0BBDFA06ACA34F7BFDA56906E04A7 +4DD79EC7E79B021A5008F3B1E04712D689366F520B0FA66A558F957011992728 +561BF4B75C2BE07C4024C172085E51CCC5CFA439F570297154CDDBB3AA25CD6A +3004B936488851BA1E814260C06CD5479DCAB1A6AE21A5F4563024F973D738B4 +0DDB6C6DD2E3AC21B4F6D95CF9AACA782919F5D3E613D61F3224A982AF485C8D +EA0037410EB70AB7D3EC174C6D5DE5C9C5A1220EF7C2B74499ADCEEFF077D1D3 +50C1124535F88C3C3F66477E42F1932665AD323E06B398D2805B9CEA632F5B1E +50FA587B102A35E2F15EC22DD66E4DF06A3F4BB717A3ED7FBBE2458EB4D896DD +AF00D1BC71FE1CCA27890ECBF9F0AF01D3E65CAA29427FAF06B3BE1E640522E0 +73B213D04491B93DB29113EF72211E31F4C5A7FD58451946CFC15FD805112FE2 +547D1131A46710DFB75659A33695FFAF3CDD40AE5260AD6766DA81DAB0A6E96B +E89D57AAEF32B5EDBBE9F7CC033BB2595CA3FEDA2ABAC8E5395EBC35BC112FE9 +67EAF1F123228538091483050847F8FB5194203609502D3A09CDE811EADC18B9 +F039593782C27EFA7697182D6367E88E326AD5622C5A457FE2644FEADA88615D +9DE3E483BFD9329667953CDB86F9D2F0D4F02DAB8A98FDEB1D17CAAED9B6E2E6 +0C55C1FEE25AB98FF59FC235876029CE03E4A713B75B3163BE3B2DC0D4472DBC +473E10400C0F57E627AE97FD0C1CB0F78FD8E2FA831A3D2B1C2BB3F2D4E812A4 +194C8732B0C525361DC8480CB27C30CD4DCFF01318D2EB4F5234B4A42EA8C23E +7B3EECA41B8E4F54D5458B37EF0FB2F49EB19F4EA8AD2B53820FA36E93DD309E +48847F5C01B1118ECE7D0186E6B8953344EB775D655AAAD7BCDA642EA2E39A15 +855C027CBC0E3FA752900EEB464E2D39404D1B85072B40834748C6F9C74C5B6C +3CEDE988343FD984CFE4B856A481E60E2E65D3BB41BAF2FA80AC0BFE381071C4 +573C6ED65C524FF777F34D82E9661E4A75E3878CC77BC59218244612219C5A92 +E95B90EC2C38614665550026F1730D11162F19D841681C04C401E102C047541B +97B9264D86F47E25A347696AE5EF0FF3ECD9BA32C92901DEDD816F7D73ED1216 +0A98771892472CD625A8F7F19DEFCF5CA2AE57F8AD3898F2C1005B187DEC6F2A +A31C32720EBC934178E0E9979013B3C9AEDA4051DF63D8C903A399DC88F83DCB +A73F1B2083819D1BBEA5235F8FE1D098F32A2BA6274424A99A4975FE4BFD59AD +79B40A8003CC0AA728EA79D6BDCBBD73DF45B7918BC099C5BE4A068BF64A30B1 +C39442CED98AAE1BD495F6CA32D564A72E3BF753B49E4178927E4BBC0F06048F +96DE7C30AF580B0BFFDB330B3B87D7F6532A24F403680BD9F15E758CDF04EB94 +E83C7E644FDE5BEE7CE73EFAC75669E41BDFB20A5B8ADE1137378DD8102A0DBE +19499A623770417CBF5211395A6BA9F4490F4707A46F1F9B3FBE642DEA0CA053 +9ABC307B1E71DC2B069DDDBB4EAE378BCC75AD61DA900AF8BA6DF0E27A8D2258 +DC80205305AB6ABFE3726703E60869BFAFF1874F3C0E05FAD9C05D7D89ECECA9 +DD2AF5F777D7514208697E712B52448B364D3ECEFD8127043DDC9D0757B7CC37 +5CDE8001D007A6E961EA24D7FFC92410F3B13A32946F12A50DFFA256249BC8D7 +C1842FB84AD51B41008EC4604F6B70990510EE13E6DA34F864A572D99A13FFC7 +3609EF2BB1FCDEDF37A6018248C545E086EAD1BA1143E74AC60B684E755E59E7 +36557B915F92EF78FC177621D49F777A2AF39F3C2AA6EC74750AAAE08BCC21CA +A71CCDC91DD45E6050D83ABA49ECE425B55EEE137C55619037F1C30530BD0A6E +CD2004B6A040405064D7E87C55536680364E09248BFAA3FDF95CDA0708E55F4C +F7D0A92A93DEE0C7B69638F171B28B7F854CCC6EBC6AEE14864BF5144EA36D46 +A9C297225AB0325E28EF6BD06D7E40E3A724EA1E50C4C6163B195CFFD5DD291D +D7BBE9AF4324A69394117EFD62F08D6BA6A8F0AC3E2353492999AF28FBA758C3 +A50B6840CC72054355E6CBDBD86F683537A4115049BC1616BA35C2B0B6F5CC32 +3F6831DE4E6029310738DE23D36D2C6E82F04EB675FB89789F74AFE3B8854250 +51812FBEFBCF162947554324FADAB765C74B6DA89F60A734076D44BBE45263B1 +3FEFEEA90EC7948F23F34D4049087AF6563692417DDBCDD5A9552A373C2528F8 +0318D3C0669279F292127CBA40B0ABE08A1476BC9EBFA8BD5D622BC5CE7DBA20 +C689BDAF50D5B1EAA89E296787CC53845DB2BA54FDE363DCC98A7BA256663869 +E9E02E09077884DF1A2A41AA698B7EDE8DAFA621B552DDA91AD1E671D636FB36 +91C62B4D2D4112F2C169E0023EB7521F570CECC54ECA5EBA462049AABBE2ADEF +E3234BFD71B26DFDD9D34DFA69E5E80FD90406E6505A6798F030A4B5172A7BC2 +C9B765A86ED55C0590E0432719BCD7BDE7CCC7F6B33BD467063D886276C8879D +E04897A4623111C14A1EDBBF69E2FEDDFEAEB2A785C6D2F0711DF4B93AAA291E +7F4E0CF9CC3FF0D31953C594DAD014097DA02CBD5AE8828C7E7B5BDA09188B05 +0D7263F164E1E78CC430ACAD1E8FA71001E9BCEFAE47C79846916A5F819CA366 +5734089BCDD458CA1A9E8E17BFF357A91F9A7A8A6E1DEFB121353AA80F1906A5 +AF7CD2E59EE6776FC0DA6574DA0DE522918CAC4E566F13FB9B64EFE79F3A3BC0 +689E3B0676741C90FF3BF85C7A0FA9716F4ED0E329512B66BFB8AEB56C3DD6B2 +24F8D6E23751A8485F7EB46719E9D22618FEE86D5E01ECCF4C6E74368A8E9B49 +245D80E7484DFBC916FB2447852B36EF3F99A82B6C106F786707D7689DCD7AEC +A0C51AC1A3F67034C16B74994403FAE7743BF02149BEBEF554814BEF31B79184 +3FAB4D2C887E1BEE81B465D12DCDDAD03DE5ABE9E763C440B2CFD42FD16D96EB +C21FE788C8C2688F79F148AA7090BE64B0EA710D376222FD1590301BA9A2E715 +D33B8C1D95F2589AB0EE476F7046537E27DBBCDADEA1E7357C9D7FA92C2F93A6 +7BDDF58A44966590821023380C97CDE37EF6D449E35EF32BCA6E69DC8458511E +8DC8AB63171A6018AC9A334829E5978484C4C6E917A5F1C254E6669F4037C691 +36980250A80673E0F18C9E0FBA1E5CCA3BE30B8E7B7188062B25F8E1E16528A2 +F217C18D6A1955482E5463FBF097ABAF7314E449C6FEE56E2695407A8AA9648C +61AC2BF3B2D9CB6317A9B16CE931D318C8BC9676CD908505568C197D90C2BB46 +06431C999EB68C8216409E4CABACB2BB34A05B697B9DD1E91471A404B4969519 +E25209EF4EDD420944BED17B18DB3566FCB8059699FE416789191EC2B35086AA +2E10C139E3C9FA0A535DEE9255A867A26656213E85851DE5F51F9780D3A6E572 +F1F5CE64DA176CA810799DC1C60A8FD2A5ED42E613021A19928EC4572059B2C1 +EE441E79CDF7DD4AF7B6E3D3230419ACAED329388044B107DCB4DE91B71EB838 +904B1F969738BBDA064FFE75C6623639BE9924602DDF0C166B433B9D54ACDA5E +018680477FB8F10621FF32319E58DB672D744959A33E7314A1B3CDE0C038F7D6 +0C8A195AF191E36B0325334A711CD8E25D9C1D257E46A734779E486567481108 +E0281DE96907D460546578DE83A0A01A9ABF64402B48DEF739F4308E14145753 +719CEF720FE5CF8DAD7845E74D502B69DC18D172C3A27411259B8042F3FF82C3 +B157BE242C351830255CF0EDA96577375A70657BD9A2E9FFC54AF0AE563D73F2 +E510279FEF48D79F5F7745DBB492F1D74DA738E6A4FE4364799B5BEC93B4CAF6 +B06B9B8C8D164F8FA1FBBA693204064F2C1806C39910910E02ECA8D092558CB8 +33338B359D56483B7B99A1D8137204EC1AE70ED3D75881FC3B00BB9349AD934C +81A9F285312FDDC77FA923B18B1873D288C2AAF2E6D0AF90BF25A982B843789D +5662D6A2DD58E065026885601ABED4B09CAAA3116DEE6B430B15BE0A121FC1BB +FDEA5A501F0798CFFFFEAB5101E707F1A00C8E014A3561FD39972EA9AB108EBB +960AEA7FF60C301AD6CBFCAA7D35CBF6F8462A4D76C4FBA6F3DF6BB762DF7900 +9F69529AB4EAF96C2866444B257160E8822533A7A1240C83EC18C364F577407B +4CB314678D2511735308A1660AD94B8B818CEA4A3DC00C5A1C978F8BB4E0491C +49328F6CDF95BF620AE53056364423841D84418B23C2A447B0CCF8D8633FE2E8 +4A4AC1C6C74627EECDC994059F1BAE9E6B10FA80D767B3FE97BFFAD413DCB0A8 +495039744B48266278194D60422D6E7C74D0DB45ACF217797D0C0678EEB60759 +6231438CFEFB346553A7A447B50807EBB6E885B5A49CA9A350EC4A8C76EDFBB3 +A4DA1C9E3EFA193CDF08553302998F20055C84420A4C5252F764CC4B7A4BEF6A +A09170EC417B296DD9E2301CD8EABE4A087E648E0525A9FFAF26374C47FDC123 +82F18C9884843864F418ACB08041E7896FDD395225532460A8194A8DB4DBD824 +1C68C6665F85059E365EC0972EC6465E2D8867449907DA6692A021F026F437BD +D02654BC11381BB6557663E0B0B8C4F2FF69E4776F4EABA69311BC1AF8155F7D +6D3A418BDC912CC7CF1A4BBC8A1376D8B4DEEB6585416959BCA4AA08D4520C33 +EB054DE53140992D0707210593BE62B3659E3E493C4562C2E99CECA143791DAC +679896BCDA0699E405957E17DDBD243E65CDD7C9C8629F29A2078658746A7779 +0F75BE24E2DDBB672B95F26366BAF036B3C23BE4132D7362E76D4183A469E0F7 +29174711ECAF4FD9A923E72FE58DF2854C5537E3626317D471D1E8A922C9BBA4 +CE9163A4086AC4A231C2BF35FBC39A5BBCFE41843CAC7D81A054509D31572BE1 +596E0B0B563DF2BF0E57DB4943DAEE35CA26C8433FEE4FC61145C77F65DADE75 +62DA18DFABC7F4194906F53884E62E77D8AB3E099776AB93B2B4D0C98FA44C71 +597202A2643942795EE8CE098FE26F1AF8134F1E75FAE18D563B1FF43A511C9E +EAFB9EFCF61490A1A4FD2CF354927B72C5EDD5D62B2F3F5006D6130562A13BCB +1B988A994A8D68B051A5A821CCD5D0F8D9D49FE7CD04EECCFD7A554CCDFFD77E +27AC4AB5BF9FE40F90EBD066C483796CE1A364E95C5E0CF2154834760522F128 +B2DBD1F4F73347D42635B2875A23597C35A0823CC6F71E49598125411BC9B2C2 +72470D36DD967C947AFB031BFCF770FE50551A134DF8C5D1AB1F09819569A57E +E23D4E87C0B52CD02B0A2E3FAA7D27A94359E82AF047756BB769BC5950A75207 +78ABD49D174F2F69810AFFA9336A52D6B93B004DCA5CDE58475C0210E0BA1D20 +FD4FFD6838EC56A0922472D4C4EE0CC481574BC30618179E733EA40A48847E14 +A75BE7717CC5DDCB5B0718074EAB6FF07CFFE794D335B3A13EB968EA8FC5B08A +13B38AD1C2C964E4B07E90B9732C458216B028E07DD593A5B767A2B415EFE7DA +951FC07800F11C7E2EF9BDD152BC6815B7F32117F49FE08BD79BEB949003512A +327F3F8FAE1767E7842348BA4373649F1A21DB2C56C081BCF9FA4EA86C8DFF00 +FF45C4F1386CF8C2C4120F3F6019CEBB639F2D272D08C1763A470D4BF6330DC8 +43C069A6333113C3A0C93471486EFE9BFC02B760C7CBB2E9156087D09EE8A178 +5EF50B34994094C3F0015EA2ADB6C920F4302FDEF128711994875551C4E883E2 +DDEFFAAE11F2234AFDD96400BB69C1B4E6EFD75734C586A10A54A98E7D790F28 +DEF7C7DF61FB23BF91AA700AE585EBDE74E215DA49F4ED466F46129022722086 +8884D8E026F35C4BEE7E866DF8E0846D5EC3534069B713FAB02D4B4EE3B44E1B +656F30D629D40AA1337786C1FDA08EA1217AFA4A6E2498B334DAB5461A70DFBB +5AA5686C89FFA4EE82D81CE2B28334DC5C032487CCE998616F48150BA1281911 +076E626E5BFCC56A0A4CDC559F878F14C2BD7A5148C1D8CC303FF9EC473354D2 +D4FB0F0F2AD0CF182A28074ED6552E179222570DE0E0D44E8FF4DB36C3AD6487 +C4BA53C8548714A69FCF8E3E5202F09469D7447C6519AE902C1D611A720BAFB5 +59E27A6DBA73624F44B4ABE0988BA3450F82E03521CCE8EDE8BE7EE1223B575A +DF9A52650E85545525E6F121FF2D1531F156EA9D5594239AEA2CD09EE28ACB15 +A445E11FD1C031188DB61881F474D49425C084489A88A47D681EA68E7FC4B1F9 +DBB552063A02A0EB51125E9B2CC646B940D46FF457415F9565892DEAC030F08B +E4C10DC38D825C7597394C844CB863CE6C843F67F2E1C42C4EF86AC7FB727BF0 +224B5E91BAD99CC6638AB2C64469A81D8B1789981872ED037B3A34BDF3130137 +80FE80FDA65EFBC11A08B98A1AE595F980B577E22D3CB7FED1D4016F5290ADF5 +47D7D9BAFE39F294582F2C084003E9C83FDB9EBC87C8B477CB8BB359EDD9BBC9 +9368D6605E1468A20909831BF602EFCEC0D5EBA99A2223E5A269275C8B221B3A +F9226654185929F794E1979ED18B4CD36152F973433AC67BE24B9D953254FBBD +B644CDF3BF0E29A2C72113DC486E46DED2CE8F8DFA8B0F8478D1F18C9AA8E054 +A31C3DBE84ECEDD85DF6AF9467AC2990ECAA3384FBCA1BBE598AA0D6813C859E +1520B88BF30ADA910A6AC3068A5B8CFD76B7F0F6F4AF4C32450D628B5320C384 +F23A2B5E8756895584155226A30F8B0437E028978491DCD00E79C0ED58DF261E +79B9DA17E57AEE03EE92102EAB2D63E69A88EE0B1E2087ED0C0CF6475EBDC3BE +0324D1FC8F7B90D8D807533E5436F2C2583B9629EC390403437FDAC908557894 +03054A6DD6A3586043A9C8BFD0C7EDE1229DBB9F69F7A5D20F55664D061F6517 +0051C6B3CD7338241FB403F2AF77DAB1A8EBE1650156D40863EC1957372BFDEA +BA8D0BB1193CC5BEB5A68C8274802E14FFA3ADCEBE19070325B1BDB960CF2988 +C0F5A9BFD843C515ADEC8B8AB02B2891EDD7502D9F28F4E58D8F67D1ACAFD0C3 +3531E0C7D1554344CCF90AC8696E83A3F968252981CAC09653956F4343B99D3D +4F17CB8BBE4506B354439B70F2024871D16668F9DECD8EDB872BE5E6ACC406F1 +1DF4E3ADF60EFED57D1C426292970199BB663405236C6A907B6891C6190E87F2 +78D9142220FF295C7BF44AF61470798FB8CFBEE6973C69DA1CC24ECB058AA753 +DDBFD92FBB15560EA19D5D92F0005B74F06F0EA5901D231996E0866389DCA433 +E62BE48479687084C1D67BC592E592939F806FA8BF5F0D3F644B1FA6F056DE0D +51D3F212C6818CB6166317058C2A0C07AE2E324CD90D4EC83CF4819B10CC348C +6DBABA024A5FCDAE6E288F82DA060BCD16437F07DCA43BF1E5A1B402F16C78FC +075BEE900B4021A1019C4A5ADC33230047FF11FDE8FB775DDA267040A22B4E5D +6012F7E72B8BC8DD3A81369A08FB81C6C4873C2147D03D4181D6D8032DD2B610 +9C44CAB50C5BD8F489EBF01C72D4198B66EEA4E976462F8874143640B82AE57C +A51EDEDE75A9A55D31587C14F8DEFFE69F75EA7B95BF725CE9991FB2F07AF568 +5AFEB39447B728B99BE0502BF28DE1D92B15926BE4E3DA2E7BB44A24836A97C6 +EE3A2080E01DC6514180DAF9C055F4C94929D34F193920020505E62804461630 +9F42C652F9D5681C91BE23DCB0C634247E739135F925EF3D5424767D5F5C5879 +C46F2E3395E2B49D282622FA4C18475FC52BA7AC4DB7C1AAD65352E66DB9D962 +AB975C01CC6490490F35CB358D77DF26703B356F5C5D80E25091CDE93B39BC22 +AC7F7CC6FBCBD39C39F7F8B41B3286CD39D6DE2E6B2A9AC1D2EE8AD1FF53AA85 +C34B2BB3A2E385B980FB5F35A1BECB5596FC2FB2209828F3C54D01B3D867B391 +033A752F4AA80C91775F9CB9BE939C850B2B322FA948907302D670F2302DAE93 +B5F8D2B835DDE001ECEA3B67BD3D620BC6D1E325C4B355985A129CBD6AFFD2D3 +5147E4CEC0209A8DF23ED77AE818B88A3696257268536CEF2DA90202ADF21C34 +07A0383E17206532F5F71061E625F3199D72E461D04F4AF18AD91B8A09E37E5A +46D2E5D3634C508197C6CBD81F3E2BB8C759E331AD1CD54FCA815B92207579D5 +B248F2A1BD2B725117C76FE754F5D3CAA9F642D29AFE61DD78ACEB9F1DD67764 +0AE3E795C8016E150C92CC4D2EA682D6808DCCB4F24724541F856C29B3ED24D6 +64F1BFA439DD155E53F06FEBD8DD73C7C2D933CF70D9001707870C2D06EAB2F1 +649B32FFF09C7A1FA4C2E7EC2B3CEAEF12515CD401C582A315906EAE1A0D51B8 +1BF625E07761AC2BF59A28B7840E8833410C7A3CCFA16E32A0E90E0FDFDC46B6 +7E073A5957E59E58B33CDC146394FB7C860EF5CB1CC9871D3783D189B1A5EDB4 +1BD462A5AF1CE8BA67D096CCBA709C49A6EA7C1233C125155D8FC7E9482C8EED +E15A207196E74C9D2C19CA96CB1B4852C3DB5ACFE88246F0325169DCCC88F4B8 +8BC213413EC95D2E3F39329B2165A0D1E3B4643C8AC58C126AD9E71B02B8A04E +D5ED3F93B60A7D1D142A4CAEFDE0FD1C0778B3F9E2CEB4E0058D714FED13EFC0 +F4BC2FA09A125652BD936BDFB3B9C83C182DF3C329E060E983D054410928E4E2 +DA66453101A4D23BB5FDF7D67051BC92152A687620C9B653CBE6160929FBC393 +BCDD07F0010CB35BD030CB5E13A4AFEB7DC0DD5D89F9A638509AA2A4DCB83CF5 +DFC0873FCAA432F351D88B35DBC6129A44A35CB2CE4308979F474921590FE9B5 +45A4F50C799BFB555A1674D1E49CD81DD2EFF2A409626569C64B9C80B5341EAE +50A011D7BC615F2BD6270981E2D66BEBB017EA4B5E9DC2EF8A7D059C94CDD2D1 +2C2C80FE9E086DFF9682C1BBD31EFC52E60625FD854280CB6717225D2FF35582 +CC3B9924635593248420EE48AC47332745597A5E542C2C375E947BB80F463C8D +54FADB19A7B5993F39D9E07875785DF6342617F718A660F6A27C9642717CEC01 +D9DECD957E3C8CE1C0CFA3F2F02796EDC1CBE35E7F12C3CAF968D8EFB5F09588 +4277CDD2FB8DB2CF43C82980C9CD75599416218D7F88077B6B7CB579B7331D1E +2ADCFF01EBB0A43FF5C78B5F4CE0F183FA66DD45BD9E950738FC3E78AB286B70 +FC45C628DD2DD70F8C33E99AD2F3A82389FAE546138FD8609EE51BF337C50EDF +A4666AE87E764F38A99EA91F0CE63D72CBCB7B8EDDFB72AB57270F33599BE69B +8C7A9F15B6704240A719A1B2B8E662B5F479ED331FDCD7EA86179971E0F193DA +27DB7DDD61EEB68D5F5ADDF0827E7A961D0F35D943C89E46909EC09B3D02FA88 +10E8D8B85474248CBEE142D33C5CC24CA4923CDED8A4A5028D585392DD1BC8AD +61CCE83D7D2371A5AA76F87642C10253D00EF336FF8C5B14BCBEA473577333D5 +5A858CCDC4D51A715859FE3DC0B79BEDD3187ED7C579615394354C46AB860C4E +13D26ADD1D09B3B86FDDEF1D5232B618B6A8636BDBE04E7187F4CC624CF2BC9E +38D39A393A0A6E42654329BB2F5735AEA951A1642CF093B06BB7656A23B9A9C5 +487947A4419B1AC4EDD7FDAF7FD0DB8FBA10E65AAFCECEEDA53D3CA4C5F381CF +8A15DE4D52EA901171C5AC8D8D402F6EC75E898E0756BAD7F206311E74101055 +730DA667F74E9AD40BBDA833EA7439EC939381EFE8DE64917CBFC4E4C0A96A2A +069053049D14A8CA33ACC6900C37CE589DEEC5CDCBC4153C0DEDE51266091DE5 +E417ACF812AC380EFB7523EAECEDC133D2368C3916A92B85EAAE86CE9CE912AC +94749AF7E040CDFFA2EA2B78875EC3BF0E72C228B2C68ABA783E9EA17663CD76 +70CAD683E416E6863D21FC2A42F1BD447CAA62A66CAB6DE56B193B3D83FB521A +82A7C3F08190BC10217F7EAB6876354320F1A63885479B1EC91750A247CB51B9 +1D22EF0D19D48C9893E0716A64ABF1A54700DD9BF0BB498EC874B2266B6E86C3 +2D273A2969F184B9023E83CB245FF9F484C9C37E70BFF61AD20EDB3C2DCCBD3C +38716C5AEA8465E87C3E9F4B9884AC9E213817E102B30691D25D808388A3C4DC +8894BA463F8E0F5E3406BAEA54BECA95E934C8E019AB014B13A618D68A89CBC8 +3F76AD4C46060C0FF3D0BEE87082294BCEC05BED477BF02BD9F8D62ACF3AB816 +30A0846A3FDCD885E4F310D56C332CED12A279154275A682438ADA6970E18CFF +F66012252726FC421A3D772DDF7867ACA38E70DDC25255283E72918772DED8AB +AB05ACA6477F6FB6D2C2A4C35D7CB877C2F07B6A3E113468B53356947B0EC500 +FF3ABA15ADC0466BB9333C6A1E73EBDDE53986FFC8F44ED9A1136BF27A599F28 +414C8A71B2893F248284DD7E0D887A1102357CD8EC4E034C7736469DAD3BBBF3 +45F0231D7C29DC8D0A62CF4ABA718BBD7D985513986B93B599C912408BBB2BA7 +DB96EEAFE84D1C6AD71FC59216FCE27E179BE74FD7007FBAB1AE2A9ECD11F1FF +4396A13B7EE4FE5727E2142AEEE4E39941F02E54BA6730086B9FCFA6A6D00B7D +BC6AA1432E129289B05C34A0B68494019D387AC6161B6585B2266DCF37DC63AE +1CAFE2F3EC9E584981468CB2B1FF77C7FAF3342B72E260E15B558974BCCA35E1 +4D9040394866724F140857AAAB68BB9EE785787A857D17CBDB0F4CB00844FFB4 +2244AAD459ECCA522F5C590976EDDA6900919CDA0FE66DC39DBCF1434FD7EFF9 +194BEDAB53F7580D169909C31D6FD38EB7A79DD4426186235098A9F574E08DF1 +A03F709A1FA398A545331FF9454622B4CF225E95753037BF7620FAB86E06A1CB +0B5FD5C82C3C2A9E2BDD2AEE6F3547033D5512045506D6DC0946AF56E87DD984 +2BC92D8C6F1494E6A19CEC6E3CC20CC46465AA61DF9A9CB7D9B4ED157E3DC4BF +FF6B752AFD16943A4CA7B6954AD3C8E115055F0FCCED4A7A9AC3DF6888724A0C +1AC640EF479E7D502B2F030F2B43D51996429B40841CA139E8EAA87B6AE277AE +F8A4C55D4555BDBEE4232DFD1A468548DD2BE1193B3E0C7DE64A944973BA61A7 +4EB28DB3AA37C5FA901A9E7DB175DAED17DB95E22EFAC77CF7D4B0885824825C +9B6C7B83BD0ECEB934797B49BC0F530F7E114C2B46D63DD7C56B89FE4A67EB3B +6730F3281453F8B12A13967F1FC1428ED836B7B74C88C893407F13CD9FEB37A2 +E63D62D24F0097F41F756E706C376E1F85EA99FD6FA72611A9A92D3E49711516 +42FCDD0AB37B61DC086B7CE1D4FC559E2436D1334B3FC6A45F2FBFAEA7274455 +AC6715983EF884243D21C1FB3B433634A1B100DE7EFEDC96A2375C370F5F6AF7 +88FF97C7F49A8716AC5BE715578FA60394A5AA3ABD91750D3D92EB2C20697852 +A7701DE59D37A8FBE71FB85C8BB31BE3FB05443E7ACBED3CEB33379E088BA46C +9F00659840057537B0CBBB92106343FE7B22E1EBDF988D2EDDE8454DE5042227 +B71CD978B414CEFD6CD9C3F17F11D325DFB90DACC1EA8D539B258B36A67AC1F4 +A3151BF7CC34F987932C469ADDE1FF880C6AA1638D11D339181C3AB485D9531C +ECB30F18504BCBD1432123AAF1A20B45DD783C4BDE3D9222B7090F20D3DD0CC4 +46EDBECB37892190C4E3099B2A5599C2969A2772D7BCEAEF5E68C7BF2FA00DE2 +B955FB052E6C030D9077456494ED80A3E06937E0C47B28B92E3EE4E4D287C687 +E65221A1F3D8D61780C7A9199B373087770136C43A8B2A15A288CC4E89B3D298 +6F368BCC97D573BC587A0638FBD3618AB7AE3385BB12277EF891C06F6F618BC1 +5376A53CDDAC8067BE854DE1C5E554DAD1D067B6236E24C71E05DD580AF904BA +B6085CC5FD0EF91C7A9D99E765C1A0C042508EE88E882121735E5A8FD6AB154F +9993E0FB801632B535E6855A2E957D1DC342AECCF2E3BB566CD687271DC01C73 +C04F207F8C6294E0EC5C4644C8FC359A7DE5656D49965F7A4AF7D4AAB46BDE80 +7AAE6A0B0A1F737E075FD15984BDE06E06670A676EDDB0FD7BEFACBDD16EFB6D +78AC731178AF94A77470EFD8F327A15F1A03300CFC19C9A9C90EF1388E9FF702 +5526B6990D2F8AA2DB72A1B19043045121F02D0212F3E892D1B13601E8324493 +BC4FB860EABE27DB73E5828FDE47C2D83E5505DB2C8491612605DC988F84574A +5152E8F40CF20B26BE241B1036C9BF67942A8664398F43C4A5F1ADE0EB752D34 +1201D0DEC34EA95609A2DD65A7F761A0BE2FAB352F7AB8BFA31D559D39BC356B +E796188AC31E0C512B37AA9637604C6656B10F0BF5C8F083496E3FBA6F449420 +C05C5371B16BA0B047F450104834C2FF96ED9E66F146D19E807B4C1C78746CF2 +C918DEBFA52C49A4645CCB2F3C5FF2E4588DDD1CC6832A7991CBCF3D3387992E +4DBE05C65455EFC9D3F88248B27C5B83DBCFB13E72B24B9A13DF66E68CBACA95 +BEC7C0A6E2CBEE404259455688DA4F512A2AEACA619C2CB1FF20546200F164C9 +DAAD09F2CAAD9A9B05FD59790FB8B892B9A72B3A04F9443EB216E762AD9C0695 +B966BC2510652F31A1DD10AECE493329982E3583A7C106E8E4EDF7186574ADC4 +CF2227B520ED9DCEA96D8FDBA7E227219DC13DEEEF8958EA602FCB52DEF6F9A1 +589C659AAA7A4CA5D78176CD27F7328BB71FADE61224866B756C78329BB6557A +3B003E15B66A6C307023282FFC3EA63467683B1428DCE51B2D5BA418661A4DA4 +BE4E35945C93F22D9B4467B2A20D1B282724A02D9032F48F2829868163989995 +1B866536E43B6AFD8090ECD4AE576A28CE2DC7BAF04111701A71EF4C3B8E8BA8 +8AFF6E096BCFEF20DF3BF29ABFDC2507896D53E3AA48DDCC77BB58D85A3515FF +BA5BBB0A44D4FE8580838AB91BA337CE461B537EFCB0D4BD968D0CA8F4B808FC +3ACB08AF1C580C634AE27123E50E7E42A8C861667238A52856A66E9BBBECB160 +DBDB1DD426A2F76CB8C7890320F7DF50C9FE89ED1405A59721D11FDF2FA2B048 +83B77C164248F7BF436E2007AC9BB4F27BD8FF62C4ED9D377F2044D2F5F63420 +1D9935BEC227187942805B7A66342044F54692D71C820729691709CFE6720A1C +6DCE3E05095351635827C6C03B1E67C9CE546E5D464B6E2F608CFBDF7EBD0280 +04D2C1DD0AB53E75E0C4D2864D793E617477F3A308E95D68E717790B3BA4B4B6 +9CDC5B978CCA0A52FBF14D7FDB5AAEA8AF591CCEF944D9757163370A95394324 +8AE2885C1F9FDC8D5365811D20355BAFCCDA0722057A229D9609D5DBCAB0C3B7 +354B8A0432FF196F4B5DE84BF7B7C799C5772D9B1FE97ABBA646916F7081B98C +5EE2019F992CD1611956B9C500F89DD6610224371833D0B85319EA50CA5B6797 +DFF2EAAD1A190F32CCC801C06D40DB4978646590FF40A943C419BEF1C1E7C642 +1CC1F33899247BF8B830FE58A2F0B93E5F011BF23A54782CA0EA09A0BDCC10DF +7B688287D2D0DA736A9194F070DDA4D39248DEC41CB441A4225602C87AC3F7CC +780120F4F92E65ADD62FEBA9F5D8AD1029AFC86EB4D8AB729B17E1AB21E5A07A +DA4AF13BB3C02B9CDD7C063741D0E79310D48D7A435D8904F87BAD143BE8E521 +A51D6E7F3D348A3512C2D315BDF1A68D87FE3DE03F5D95E440B691AEE8C7DED7 +92189FC58C20E36FD72932BF07A921DFCB5C444F180D78F7CC5B83848DE155A2 +F3E47F45F576CF59C5D46ADD277B0DE74778F11F999F3C2B6436CDA253033328 +65D0BDBE877B644A4A6685C239921821357CFD228E9BE92C21B3428D693F48EC +058CD8C02C5EEBE3957A671555703F01E430A5CDAFA3A95155E6750A4CE39D1E +A89F19195788625B26FE693F312CBA53F08DE5E3A2A8C29FD7312A92DBF79C73 +0BC7A31C9D1945CF8578672F586493132463032964C629E0CCE49647DB95EF33 +CB434C8816E0E3427A0114F795F8A0C51CB2AEAEAA62C98CED7B87024BC16B30 +40D997940650EAE72BE6323F1697205F608091BE8AF08A9C91089C120420B3A6 +68FD09615D986FFD06EEDD39BBAC9C4C166FCB9E3657D88FADEFB2EAD4941591 +4420282BE836A4CCB74476114E2979CA9CDA9845668DC89B04BA0AD91CA46BF5 +F91F8E677815B3D2CACA13A3C7E62BA3FF44B35E957A0BE4A1EDB4DE5EC2B42B +CC427D4E8B8907C7F0E3B82E960663456C1AEC4C2B275A1EAE6126BB5A802238 +1830D00CCF43963C8CA537D24D7B8A8A767E978DA955613A819AE1F5A0D12BFD +378B8118EA7ED73D6914DA71C0FD41620151A7CAE1AA36625E98A25F72D0CEAD +F48F4A822862095EEFA5FEA97A7A72047985E455F326F94F65F9B8ECAC0B2A42 +58396F7F3C4211EE320CBBE9280B08ED54171E44D8973256A286AF41730A9A7E +A88FC1F92509135434BABCA88CEAAA2ED499E2F3C316529DEE9D024FC1F92FFA +69D8BF95AE1A5ABAD706442CCA15D352D10A03384B06DB6C31AAE831013B32F7 +53C0D21ECB615D0F08BE01C0E7FB1F23715A10CE32F1E33CB40292CEDF59A4A3 +4BF715EDABE23B4D1FCFF71C40550249A03235D307F948D462944BF685530035 +1269AA516F99D95618B24B07A8D2E56F1DE82C5A2336263C46F329A5AFF5AB23 +FED8E1B05B07935581816B5A3F3412C403DCD207A1F332C79F17B711442DF1CD +7A54B90653F78C0180FAF33C82BF371D56CCB71CC73B9EB2BB10E3617FB7E0D8 +C8AD510865216E44B6D2D3B2A02178A42766BBE1F738402C6DCE694307C8EA63 +25CCB6D7298A2200C63CEE67739D14270D1898C495361504B38A15F81057B129 +89835CA35A523E2B848DE47F50EEE2062050522B8C6E4EE0C3CDF8EA7E878C1C +387B5BA7EAED5E890CA1508413CEAE9370286690BDE5A96E89E916A8A81A90CF +223797B54F0C408044F035D1BCADFE1850DA6EEC5D61211A543741C36CA5A14B +D5402FE65382DF64CE4072E5A532F009D156287866C0035953B5AC4CBFD33EB6 +AC1123A0D0B8AED978F2D9B7EA1923C104237A97AEE2263163727E98D22CC5FF +BDC0352C9BC16ADFD1D4DC968882D53DCC5E7ADA2CA2FD67DA972CFF17735833 +D4E0DF395B0F5F8038E4B70D6CBB8DA85AAC12D8C9B63EDA42066977FAA79121 +43AE6F4692A9F7F88DC200D049FBAF35D776BDBB0B89811F2FADB8224690902B +2A6E146A133A517CA12386AC920A4543A0F6CF05A9071074CD157C133EA7A7BC +4E6A2874A6699DD65DC25C5859580308316E743B8938ED9DFAEA61E1F836D2D5 +F13DF35A82339269D80A1041651CB4A28B4608D0E2C326F01B698816DD20541A +5D01822C865109022872230FC18DA7A7B3BD858712AF458F4D17F3286303F837 +954F784FF3CAC74E28C5C633A4581AB32C11B9974BDC0FC47F546A9F81FDC281 +6495A1229CA0B91B63E491842BCBFF262DE9556EFCBAE22881466AA874904438 +A57EE59D023A2D3C6EF7D5478323812CD8719A14AC99D480ACFD5CC9DC5C13B4 +28E43CC9784386169BA06D306E25C8D1BB6C0C325885423DAE98B7B74F477768 +6AC27A297360C8530142BC1E7DEFA726C2A6B191442BD7CA8936EF73087D8ADF +6C9A1557BCA49C69E33081FD3F4766092F00DB3C7DC71CC151DEF1EBA8D9001C +4F11AB87091DB2646CCF6D480B6E71E7106581A0509FA55E8326A428F3A2865C +94B3A88660C35B24559ACC697DE7DB5729F33D1E72719D38CA6BBE24D3E6A0CC +D291719268709C7AA1B4F00D42A973164E573827773F5D476D5FC2C915937065 +66C6F51D1E9293BE96E0E16AF71E5A26A64FB07D29D5548FEE89DC3A6CB98388 +5505C882BBFE323D4E7483BB1F5F75D9332C8FA1C75628FACC6F6C9CA2065DA3 +A69E213ECFE3B1EC646DAF1422AA8E8734B028314EC6318ADB331E25223E4C1A +1312A03BC70E0A390F9F07A15E46AF1F39F561BF65790669866A9444D72C4D57 +181AD91B1350573D35122EDC10EF57CB6505EE89148D8750704A036F9B80078A +D6DE659C19193236E531DEF598D972D826379B9C675A8CF10B3977E7088C717D +A211BFCADDE1B91C9F79B3DB488C5EEF262F0524E6F82BE7E5D94B58953E72C9 +63F6778919F1F2126404A2E1EF9397773BB32C0C4EAA1B8E02BBE3E9FC75546A +072611BF1D5DA8360AE0E2B199288F690859D9BA2720878301E6A358D26F04F0 +D93B36441077B89CD9ECC805B87BDD1FF13E6E4426C1CCA3E9F4141B4D268A07 +02ED31E3EE96C6E62DA983E9DDC28796995F452F5F1B9635DF1914140006FA69 +AE2D0C04D504E4B735B8BF7A5CA4ED496D56EF87389EDCD78B6870951F963F17 +A4A9E2378830CFD1B0AFAC64C93203C083D580D0DC575A69E5F2A318C35C4052 +FFFC7F4EC5DD7556DF2CE165A362FD3BD3BEB568C247569F18FD85B5CEBAB263 +9B7F1E9B5886F07E9E3BF192E462659944241030D9375DCC40E1D744CCCD18CB +5A6595A1976E3767C0F1829F76F220A335A5EC49A6E099F7288FB1A415DE05CE +F41FE8AF2DB82BE6B53EC82A0AB3FF14ADD98F5AFD9B68B76F5199BABA5436DC +921C36A6AC8B245BE2702A7C036216C82E81A775D1AD068FF106789CED865D64 +A4FAA7861BF49C52065A1C9E52AFE9A0CC9BBC8863B902FA5DC046A645C3D72E +E28FA624B18103C9782123D6AEB075E22B0707348C15159D1A3002B2822F3269 +129457B3FBDE1DD4E148B77D75A50A0A063D541DC4D00E1500E5A19BEF09BFCD +C36D7E0B60BC2A745B50BD7B650536C563AC305C0AB63389BA4E9AB11A171D6E +36EBB5CCA1A06960173A865B7BE57336C18BA87710092A12C88A4BB739A070B1 +92D1D52A22EA87E84B9D70A0C8764F48076F7C381E2FEA4DD8F9A86FAB2FF56A +9FCE5A47BCFEBB78F4248513E9F117A50DF41F14379F9D61EE774F109162B87E +A3F45F36EEAFFBC1EB63D796FE6D4FAF2D16B3807E4BE4E54F9779FA01EB853C +B6DDCD9773EEDAD35F4795D90D17BE66400B31A2E4C3ECA5B5282E22CD2846AD +C1D46908A493998F17D13A2416D4671F956398EBFD075FFC676F4BA9B8CD5BCE +391B45AD842C43F98FF8FA42F6ADAF4C429DAF025AA7383F4CB0195CC514E804 +C47FC3217159F58E174481B4037112F219F4E7CD8816DD332F2596109AC3E46D +C38E214ACBA5A55ABF5177D53782E2CE38763618ACA0E461B0B735AB5A9DC1AB +B92F8588E3362F24202F163DB7CBB3D24A06620F0D75F621869A97DFB8678ABC +EB57767E94672F51154F22FFF68EDC69279603BF5499F58B3BCF5ED32848F42A +78A029DD1F5950DA3C6C4E7CB911C69A88075E14970EF23ACAB307D52A627EC4 +4359B28C00D05ADB4EB726FC31B0335E7C2942A851870D3520C5C96A4F1F834D +584D92A454BAE25D79F2984A708C864B853B24A303F4EB132BD9DEAB438BCA65 +78864ECC83C746D63B7CF7B5CF1B9734E102007F9A0954EFB8550C43A9410168 +2D21E28DE211D231EE4A165EE129F47D07186048A152496E4FC9CE844FE45903 +076F6D4FEF780A52BCC56D8435A3949DB75C12F1F62CDFDC521CBCEC2554C460 +F700716A202A10153C800797C00F0162A14B8CB0E9B355938039773407738B57 +6380CAEAC0AA2AD724739796A9485D12ECCC0F3546F46D6040372B6E811212D0 +88758DF06DE11650C52F3C178CBE912B749351F065468DFFDCA9A01E14348D98 +EBBB9A7A168D1C4EEF97AA0C20FE37C3B3CE1CFD53AB00F5C7FA394F2123CFEB +7A1DC68E7BA6467B2578EA2B00847F6BE6E11F77AD6EDAB10AF837551B81D429 +AB185372A6E567B73C56378A023AC24D83BDEC508CEA954A2609F0BF06389A22 +8F8D4ED71E2C0B202B68C0597DCB2421AA163E77CEEEA6908CD7F08B5DBFDD28 +DA55017714ABD1C98B5D5C8E01EAC1FFB4D4D00D7879B6EA44DFCF7C73EB1AD7 +0F8ACCC9A404496F769F5DC79FA1C28FB86F3C863D3B5961406B630D87270C63 +84FB51C5A8060B7E59211E3953A3FA571008D3677E8CED908A8BA2C7A0FBE6FF +ADAC7053ECF03073C33A681065B5013F1F39E4D63CB657FC9DF6763440272B45 +0E908CBA727375DCE5D479B7604510D081F452E30AEE9335635BAC3FC4B4516F +714A5D709BDB673A0E4C4A7CF7833F8011B1632F03B3C5815E4C2BC44502ECFE +5791A5A92A8EA997530DB13A5BB2C9B8DC2E60D18FF029A88F63103AB54E9B52 +D08F82AFA775AEA9E0354C77F3442019698A08D366E88435A5FE1C388CCBDE65 +94A41A384AA4B4E47CA54D2F37B8B80FC3485EA95B33DF87A4A5CF313325C08A +76C669C86AE536AE345D7E5A3052BAA92DBB827FB877A1EE8AB6914F672C37A2 +9469AFD84800A913AB4A1F681E7DF81E93B9C34076B32D03BDD8FFB2036A6035 +86E4CBDC20263AC0A990AFAC2EBD451CAB04EB66542AE984D0E610CA79FC3268 +CABBD8F91E8DB1AD7E81C13B5E9C682C679D48E9DC94DEDDC52A68F76DB57242 +1628F8941AF3B433B8A780C209DFA18AF329E93769DDDAABB87EB1FF71CF2401 +F3162EAB20883AE2423E84E05BD0A4D3A4BD1A3627FEBACF14E1245ABC8B378F +406C6FD1C60F2B02B72DB5449582C0348B4DB66CD1B1800A27FC41DCC0F1B9C4 +E6ED1E83A78C452A4B55AA0A93EBEA6CC4618FEEA937695E6513B7875E4EFCDC +643A87DE5F11B40ADA5D5A3D0F4245D5F8C8CB8D6E22 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.1: CMR10 1.00B +%%CreationDate: 1992 Feb 19 19:54:52 +% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. +11 dict begin +/FontInfo 7 dict dup begin +/version (1.00B) readonly def +/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /CMR10 def +/PaintType 0 def +/FontType 1 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 +readonly def +/FontBBox{-251 -250 1009 969}readonly def +/UniqueID 5000793 def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 +016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 +9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F +D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 +469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 +2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 +87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F +D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 +92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C +295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 +409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C +4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF +2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E +0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E +B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 +24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B +43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF +D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 +5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC +96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 +7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 +0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 +B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D +AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 +97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 +FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5 +20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4 +0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD +F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20 +3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122 +A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379 +5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA77428025D4059BA +2988AC2E3D7246BAAAFB89745F0E38580546045527C8779A254DB08DCC6FB9B9 +0E172209FBE3857AF495A7F2B34BC895A39A30F903DC6E3202D29AC110D868F4 +7184CB78407B8B9D42F6375F67FD4B828592E4A977B9E71854D143CD1A9EDCD1 +767CC2929E071FBA4C3D17500E28A23F697B5D5CC68D5F56EAD14BD504E07182 +3FDC12F5404E74EC1C02AF00C1A6A17F958770ED4A024F5B3644DEFB61F2578E +56013D0B4E7CA3AD255E23DD63369A921D427EEE0E098E8148B16E8A5613A8F8 +A5F1099E15AD16EC554B644DF306F0CF3571055A81F1B464529DB49E919F88E7 +581066BEC4765E31BBE28C245BBF0B74610DBA30C63A71A4F3B60593A6B41C6C +636C980828CFE9A3362FBC02F1967F0F770A4790F90DEF9D56E0A76B0703FC58 +2841E6E8D984FB476D4FEB960FFB6B386EC6CBB9EB83704B0AF63F38C77090A8 +DAA165E6C6BC86601B14F8E9F504A9D578AF05128D8C1BCEA9D21057958D5DCF +63459352EAD6B4A2A666CC5D85855641CB31507F9E30405977B74356FE985A6D +541884CB65A4F5A8D4C82CB9D82846CC510CBD243E98A0011AD37A81047021DF +46F69D7C3DFAF2F10F1F0CCEFBE12EB70420BE90C450975434E223C67D24226E +8B62BCA6BF93B0B1373AF55E4ADD92775B2DF199B6599CB02DB64B2D6160BEBE +449C057B5B2D226E0F5D7CFB5C9A4A7184FB29A595E91252AE787861A6331FC2 +6605C995D55120121CB463473A7CBD22F270D56CA8E0DA99832A468D399CB9F5 +A1CBCF0031D99F3C4F4B78A0944BED5A7B1AE23E3A66EED453917F9296077306 +06CFA772BE60854A30885DC5FB8417E0D3F7AB45ABFE186D877A377F5D17DD35 +0FAB81745294E35A5DCAB20321C6ECAE276B63BB17366867F346CAD53E06AD96 +091CAC75465BCDDFDE9C4364B2A8EF496C4CDF76B058E4BC1F616F6CF62FB60A +64F81BABA7A729B8CF679CEE01B1C985558E8D1493C03B834F3696E5511A1917 +2AE7E16AA8FC516CD2CEDE020BC5777598165B6EF2310F4DBD54FE14071101EB +47F4B2B59778B1EA7DE13ADF46393E07DBE2082C2487944A71CEDD4ED7D3D877 +749D2500636C3996A34EE0CBA770F6B6A655DCB9840AA8236EF3F6182E1C8997 +395077D9DB15B9D0A2DF9A3F6042C94E6E492C965E4E8542AC4AF5B21906B6E8 +4AE2B01C0810E38BFAE99DD83EBFF8E145D09F763B6B134A25A1CC067C6DC1D0 +7286045CE90BA968598D83E5602ED96C72A424848E211C028CB344D95DA04ADE +4C5DADCE9009A72B6EC01E7B5CF8C52BDFD2B416F5E1833F514659D94BB2F452 +EC4F2E65CE71AAF79106A0468D76D283ADD44D7DB5760AA429D61C1DC2E912C7 +9446C19557A1D12E7116B765BE522EA166E8F0B604807215323DC5C2DB1F2E05 +246873CE189E03FA291A961E4AD90563A8F7B0E08A67DE4CB3607C6ECA114DD0 +DCE97976E208615F3CA13FC44041360086A4A173D5441D9C33A38013099F73E9 +0FBC96808F7442FD4D56DF7C4F2D4C9B2301F7CE626B4C6C1617B8F1584DF195 +F92FC6385070EB02BF2541307E4EA34C131815FB9028C118F4B792C5E74EAF2B +2FEAAA4F5CE91829ABEEAD9B4DC623A08AE0D8049DC1FB98349FFBABD1D2B5F7 +B2D58CF489C1116C69B0E39BA3E669B3858004BCD4518C3E0718DC4A64B2EB60 +6502E783FA4B6EBD1A7D112670467B74F8A04DA69311381DC4C26044B4696BEF +EFB07B0BFEB7E3F7713B61706F348EF1AC277E6C43A8DAD97241D9A7C0B97D44 +1032D8AE53999D179CF8D749E383D14DFBD6AD57C6808ECD8BC8A3A14ADD112D +77874CA9C03F752F15DC94D2839AA4638F0F842CA5D8D1617BBDD108CA950AF1 +23A235EC6CF12B1D3F4741AC28C4B2906383A1A5492AC1BAB91FC6C7182DA522 +7098CCF89A5D5093AC0BB825E1D135847F5A710DC831D4FC712C41ED765502D1 +BC4B74CA6F65B776BF110862316382644EA5C79A6E0C49BCB44DD88A536E25B4 +BEBB9CB3A583E579E775BC22B1FB3C1848A7E3B6665942E9AAB756B0522005F1 +BCD665F977B85C37FA97B5FF19D2558A874611364B4318FD659D018498E2C994 +ACB091EFDAA211F3AD8F720489753816FCD5097334D12B02F6C5CD060AB925F8 +E61FA171FC57353144D2946B33E8001D3AB8CEE91F02945934BAD0C06B4757B7 +7CDC8EC97B4FF04B3470D1D4AF486589BA1B55ED9DB471877784FC57398AA686 +E7E220D04C06AAB74E7EBF3103ED1248CB7C9F49643CC27E21F3270E096FA915 +486BD1D3B7CE89DBB225AA0F9D75B951817D41472C7B791CACAC2B36BE2005F2 +04AD42AF90A2EC433F70C085DF6589C50744017EB9BEAD58FC26B1B56C285910 +2B2DBA4870802BA859F275815A7AC1032B05028D3044CE118DE5DCF048713250 +BDFEF7B95E8CE4DD75EC4B97CFA5C5ED5B8F9191E7D2D2313357230E0629C41F +474B1B9F5F6FC94266621F0D2A50CAEBC60AAF6F24D7062FF4FA0948E12A74F7 +238663776C8A8031577FC30FE095DA64C90E29F51807DCA8F4F83780624DDB14 +556472128263E12E16736088DBFEC7085D3628FFB8A35DF8DF5E400E5C18086B +352680C7575B4DD9063CD9BD7372DF56D39061F6A5A5B1FC98FF6DF7E00978C7 +26220733B9D40E4A97EE56A8FF28BA37EF3ADA813230C43F33A7A84041757A27 +2156176B2F668CC4D76516E4E3C356A9EF414D51FD0549A70647AC86B6456A43 +84056088E5119AA4594F6487B75946BE84C510200BBD779D70E8B61C700A939E +3217C49E69985AD039CC7BE4C730732FE2FE01CBE34CB774B16CEE0358BBB56F +C8115E3555D2AA629AA2EEFFD19D729A18ADE2F91B3364818670905186B9B029 +D25C642313375FDFA4D6A3BCF349865E7EDDEE435C61FB30B04B8FBB1378D0D2 +694162AD5E4B4A79C234F469DABA61EB15EF3C3D20D8AB5C01BBB4E724FAE144 +E9A8470BB2699F3ED8E6F7DD946A0879123459B44E642452C64620F18C7B04D0 +AC4296DC67D8FB0B13F180FE00E82FEBEDD7319FC6CBA642489FF2ACF91793F6 +6AB7C3ADC0D0F09A02F42099CEB111C097D73FCFC007422F4EAEBEC99EF05732 +09AAF021324F0B190D026CB0A21838C494A00E4DB00E362A29AA54E05F987D51 +F50E98795962DA5A3D7DE59C89E60554AC31E04AC7DE6FB46C5264FF771987AE +12F9E5DCDB3365BB2AE18CEAA43246845CEB68E938AD726BBDDEDB561CF1D260 +AF3B9787B7B491F1169E118850886319D2F8A5600AF06675862367BCD68C6D2D +27C5DCE0D733566DDD430FB83A4900B131475116B6D123374463B22148CBD831 +4C524195BADDEB0105C6911770FB4875E94ABDDA49E4AC41D8BA10FC28CC2807 +706AEFFE3B12D4FDAEBA50B255FE2213FB623ECBE1A2BF57355768F12B022AE7 +3F18DBBFCE10279DE13A0633737C7794073255DE5E424DF633C700324C8C795B +0037E819A252770267E46B2307CF4791CF6CBC4D857A18B9DC2B5C493F389AB7 +5A859765342A8F71088A9BF7C94A26FF5EA240B798AA3888FD0D3AB7E696D693 +551D3E2678A451027C4BC4A2A774A3335CA803D85A1D205225E9DD2E219B0849 +AAD18F56F7FF65DA30B21DEC14047039178652040A5B3BB9514FE1EDF202660A +24546B62117862181469C192D74F2D5E24483BFDB8173EFA1B62CC8E96553B74 +7BA2A2C763A7DC9E78818FDD67B5C4B13E893A99068383D6A5644DAE0177CA5F +BD2B00031ED86DD51E7DF343539233BC6A8B7D75D8A47CB16E1819E8C749EE07 +4053F56BE02CC04A67B73D25365C1BF41AD384749BA989866D54B8A4F69AA1F9 +C9752774E8C0C917318567EC7AF0B847EAADB75FDC46BC48FCC80D9F5AB0D56F +762404B5190A07AA02C3F8278BC3058CB57A51D338754BD152E956D42158208C +AC56715B72570E91D0F0CE72EAD1E3A9C5895513DA0599AE2B6F2DB678E732A3 +4CC0918D27A93EE94CEBD3A2A2D350A6C116DDF6BF5CBADCBBD83FE3A2CE888E +58F1B8EE470EE81F8EB0E87F30E228616190F4847AA95A77E4D1D85CB463D7EF +A33F63AEAAD1822B739AFA770AFBD394B5745ED510C84A9F2B226AC67A9BC0BA +254B6A69F1A3CDD616DD72DEB93677AC1E2FA973B53DA945BAE7FF61B8677A34 +9B53BCD8D20DB78159BF76ABF5708DD847F97A875F1184EDDB3CB7B8086D8568 +36A6557D675CBD5EA77137336E805BC7886CF89651EE2DA8B7FD3D7FD5944361 +42272408AD91353519F895A302A419DB8533730A51BB40BAEB512029B8817E69 +0B8B130DD9E3EF42C32AC8FDB022D55576EA671EE98D484C268953B3D95E8EAF +3524231212ED7116534D26BFC2D69E621FC08EA38C00BA7EEEA53BD71792276D +20630F4F2CE9C444FDB3F0F03C32F419FAD16C05B80CC74FB0187472A78A019F +2E38BBE6E0D62655A4E09F40980217EB56DDF74F42A52459D261B91A240581EC +EBFD52810A1FA41EF65D2785484B80F1D728597D8669C0D5C09D2816AF24F752 +EA846D2B028077EC6D9830B8CA4ECA7DB77AE637750528395754CC531C905FFF +182B160C780C6EA7AE8F8F42FC07E8B0CB5F9B6AF842C728FAF7F7FC8CB5EFCA +2161C8E0BCDA9B3F100F2FEE71F9BA941DFC5C1A4ACBB3177D2D0A60C7BB23B5 +C8304153EC1DC5A4EDE951FBA3CE223B57CAB15E7AEA03104975990DBA44B971 +F7D52112B6309798DB7ABF51383CB091225A7BB1721ED1A03DB2684F3754A706 +750B6BF629136CE3353DB97BAF71D6CCC5E857A2ABFE104A6445E3392045DD66 +ECD4A5479C18038B5375A0DF3586187ADD6A8F61A51EA1E41FB67FD9D728F3F9 +DB8B04772112E69382A34FB7B2DAAF5E7E653B6BB300D8EE284FB49FFEE69A5D +8ADC239268E0612EED7F08E8A9E2995F10856866A7E739FCF376664B92EFDB91 +F2633033398A215918D9DA74A4F0F09692FDEFD1BC7FC1899580E6C08D8AF26D +6F720E25241E76A87205A65DC8871D32F92056B5BE9438F3D1225FBAE577ABD7 +952C75DDF86C433F1AADD9798344C62BD300663662E35DF041F143DCD6A4248D +094D9727DB6389CB05BAAA752323280E10C99A8A1717D811C8030DD97DF3D98B +9759CB26CC003F574BDDDB8FE1FC1C8197F8B071FD1E7F4BC3E2212471AC384C +8770AFF104742B88F8158EBBB3467B4ACF504F4A3C4EED87245F0811D936B2F4 +5904EBCA5C1224736F5DFA8934DFF8F6AE0DA84DF6B43CDB6A491F36525CA7AA +221CE05922DC7C0ADEDA5D7A992EDD52CBC4CF82580CE15D953A9658B2EC71D9 +E8DC5B3FA8C9534451D457F745DD18C44438A70C7FE457745CDED39FB6F7223D +CC4D063B2940B6FA6645E1D68BBB62A440BAF0341B883B1DA34F340B21703E3F +D9DE3965E40EB9E61ED42EA03455F25BC25112B11E81A917F02866013E77E47E +3F6F92BB76F2EFA8F7B4BCC20772A78345BA34A074CB4B7AE7988563E402872F +B1310D0CB7EBFDF05EAD32944BDC70953DACBAD16E6C72590E403FEDE9A8AEC6 +4520334FB4C53202EA19C5825CE0E8784696AC16C23FCB2A7E8C88417A898594 +7B0A4BAC3B46F6174C9821B3B169E49FB340AB07BB3383868CF6C542A384D610 +6DC6E0C10C26F6FFF27BE7D82936A15A3555AD6B19E84D548D9D58D54998E459 +12CC0C89325E7373588449DAB292DBFECF9872F2C4601B731334B86CAC488F2B +D399EBCE0A084B90FF3F41169E124E6777A0DDD635FB31A2572A19C516451978 +717368FD0E14D446AF7382D424F6750E0D61536D574373B42838E4BDAA34FE52 +625EDFDDCAA6E32952115D7FC1B22229AB7BFA0D31E3F19604A79F0EE9529287 +2498C49610A099F76B0A736AA0B887CB0344CB3F32D9654C3607B6373F053233 +02D960850D39EE00007F83ACA09FDBF3E70EE39A24FC57FD0A3AE046DF02A8C4 +8F2432E78BD517E179DFB16AE0FCA608606C8E4F6BD81FE20C168FB3C3625C42 +64CF2BA9CA83298AECD584157576ADF528832AF12415129BF324A3813C324D89 +D13EB101F6ECCCDA77AFB15AF36F7B48B34D57D7DE23328D8A97CAD0C5A2461D +6535407EF0F907BA3274B4A87D8BCDC9838398EC738949532BC511FEDCA9772E +E7423BEAEECB19FFFDBE73F89138157C87D7726EDCAFAFFE237E3CD466CB668F +D2329976D5BA24E298ED057940C2E87A48D65DE79B4F986A4105289776A137F6 +FEE20222F3F5F049C7F14B330D4627B15BD48EBC734C8F568755515127A7A8F1 +471CF2ACFA2DBA613834DD7E0B2DDD59ABB2382C2B3D1905C39719EAF1EC04F2 +7F731D084DF76B6948D8F2A0571D66E84DD9626785929DEF390982B9A324BC3E +D6D1C5D5FB41F147ADA0BD282387B9DBBD1576E6E128405A4AC575F2F2B83954 +B42E52781AE341371167763940506B4EA4A8B243FA32403020498A12D350CDD4 +E05A59605665A337B38D8F3F34FFCEA5C16CEAEB4C34E670852C80FFF4E3C624 +6220F65BEE999AA487A2D24C58C4CE684B74A3C5E49C01C4CE274B9C4A442CA8 +50973A35ECD40B85E048B1C0FACF78964D60C026C2E2DFB8941A36E0B7B28CE0 +DB5F5A58260716DAB92E187A4E518CD9A93AB5F97CE6ECB8E7523D7B932C99E0 +7A40A73ACCF22F0139925B76E388789F252CCA699209D23B8D341C9C5FF81F0F +A2A10C7F159C45896A244B7EFED4CAFE35FDA8C3D4DDD28F336B09DC2CB8F56B +A7378D2F3D13CCBCE823A81FB84D051734AAE8395EEA9F9CC35E10B3770BF2B7 +827CEC011B2B125A21B9D923152983DF7196F6B54588C258372D5EF51827B2A6 +23934358274D7ED265EC913C596E9545B357606A2CE0F644A38052B6B9BFE3F0 +C973035A7F11BFDF17CB5B3547485C8088551F0A8B739C9E798C15853317FF98 +599A65934B447EB6844727F740985FBB16BC77FBB89622F950B9ECA9F4CF215F +4584CB8C3FABD1F45CE7CFA3123BCFEF5D427E37290DD7E8F5FABF2C1FE63BD3 +8FDE1816F9DCAF432789679CCAA4AC856F8E06A63040CA81FB90E37F3804C7DA +C82A0B8C4B9AB803FF5B5494586955608D9B6472583B38203B18BE0943CF6B67 +3EB41329EE7EB0E7B5ABF722F9E855821BB63EA32FA5D4284D3D0F365B2030C4 +5E855F51A64EFD5827BA4AA5865731C1FBFED2F75BDC40D5448A66F1B0EA7CFB +F893034C42386B15E22A255A218926E1C4001F499C7127FB7DE4AD11B6FF8E53 +BDECEDD7E59F13F614C849FE407F653FF6A4D7F3DC6C260D728B36A7EAD4453C +934B3A6CE00C42F3B5093B9A6783C36F989278C3B2BE8A5909589F0F95937F2D +D2AD01B3C289E9BCBC07CFEB2B0668678CCBEF25C2F939CBE4E332870E705946 +35FDFE97E45D356B6C0AA8164A05D6FFBFEAC2990937E9024861DF345B485B83 +21A1B21A779EED3EE73A7ECDC0C464D1653D76B611A8C76CBC9D2C280EE59347 +71331132D76F5E0D2B3277958B49C7E36E9ADE80E7C9654A68413519E4FF29C8 +A05534C8C1E12A228F022C7AB1B5523FFED08986443074CB7C029D2F535A972F +6E9414811636A915F95B7264505C2DC4531C9C6D8B8399FF96D46A358796EF7C +AB643E601824CFC87692AFF952DA1103AC8C396579F6C3D345263B9C09560DA4 +8369CFD7DD502C3116B270BD74219B39B368EDCE1BA32DF8976850ED46480612 +D069C3731337BB9232F2D641A5ED8611C97716597D6C7FFCF6A42D00432935B0 +95A56030C4CDF19EFB5FDBEE9806744332A18873711076E6EC4FABE9588D1D4C +1771FFCF701E6FDC9CB9BE14C7E91D8FFC898C9A4483FB67176B65E4B517131A +6420B2C2B92C6AF4E3DF7C16F1FCD5041FDA0DB071C902204A219064E00D3829 +94BB53E1468F984777F412A8205DD06F7B9F7CCB61963411B69E39A6B0969684 +0F04A5D4CFE09D9448B91033E8E0DF40BFC7A2C26B391982328FE357D811A7F7 +31DCE0991BC63F286C63072503E3BE5A4FA023FD0C90B60AD076D879D5142C60 +33E9A2F6BECA8FA37EAB6F6AD1C007AD8458CFF7062C0D59FBE2F464CC5F819C +0100DC5B1F492C994C21DB335E31F9028A8405BD2C7C9E6B4E6B1664DB0924C6 +C4C3421D5DBD24AB2364A4FF49301E18CEAAE951D58874020EC0FA0CCC8F38CD +28718F2B31F98160BD68187256DA6E01B5D3CD36BE526EB02090DFC6AFD89C4A +D03F115EDC247B41211A4E289CDE67B424CD665B4D2DD457874D160400F0255B +ADF7EF681C6C52DD9FD13D2780CD10D11D1136A72CA8072CF43CCCCFD4E54FFB +B36EBE90605C4E273D7BD418958EB0B170312CC10B1BF7BC0D8F94BC4FD984DB +937891E06C7F3AC2FBD3C4F916A7D7CCF96C38168A9662326C4AC8860F1CC17D +0A02AA42C73D0D974B3B61A0D81B93DE2641D71272B9F2BCA4B5A1F2AF440BD1 +9DC246A79AEEC9CF26DC34572C5F0FD0433E6684859C9D43F06DC15594298A9C +47D3DD335FE4D21B2B26BA0ABBA0A8DAAFC4FBED4E107C2E680DCDCFA0659E53 +66319DF3D69924E79D9B3123A085245208E712A4F86D023CE0A3BFD16C4F5890 +69DFB64E9E48E4F0AA062AA392F0224511DABF7FEC63B94FA3E5B1D74816257A +3A4DA3AA4A8575DEDEE71B854E004FC2784D7BAB4C84A7DEF212AFE275C29A85 +00BD8F311E3687EB95C20E3FD328A904117E71CFEDD68780A1F595B1BF5755D0 +6CC3C174A3D4D9C4BD0ADB763898043607ADFE2F62DCD913433E02C1C1D1363C +CE328B6C1466839E3C22F30D9353EA0611D68EF070235F731EEE2950C6CFE0C1 +09563F9B9C39EA4526E8CE38FFCB9FDCC762B25AD3189ED8FFA914E59D8DF563 +441C51C304D6587D5B543C25AF3673E532AEFE0C1D2BFFA04C9450E55B223CD7 +446F777B5E52154E6F980E1E7380E5DCB12AA7B1905ECB92E3E7DD250D64C7EC +E2A1FE667B328277A33177655C3E453E10CBB5DE3630E633887E39BC92B29B82 +14ADDC605199C950BCD18C28F2CD834BBCC37ADEAA6139C6765ED40C08FCB1D9 +24CB537F0F0F14F9C89FA111CD84E5A417BF282A65C22F1AF43F7A00CFF754D0 +4CD244FEB1B7299FD69BEE63C0E4899EFA527367CFC4C920C20085483EECC059 +2F66C368808DA656B1C092CB53A9B3E5A5250889BAD55E241EAB6004ACE3431E +BEFCB9BE94C25E1CEF0B3632D3D72279CE5E2F05F75A343CB7658BDC2C120C26 +685800504B05A938C56FC91627652B0D8FAB94F4F57DF2702C85AB021E640DC9 +013F7EC636AD0770A6D90F7289946CF03951E6D92F8066F68F23842E70C0008E +BA986F9DF7A78C0EB30350DD52EAF82D32053C3C8182C51BE3171F9094952C13 +628403CABE67EF308B2492419D94F93E7C0453873A7C6141D12ED6B482A70AD0 +33C572EFC7431EC51A388D0A7FFB1122F6DE4DE70BDC8597B7F7FF220275A8C6 +AA05147874727458E624A5338EBE95A99D1529E7FAF981F4E5B7158D2F6DB7D7 +057756D3E0146EEA649108E6EB17B186FD2314ABB0DEF5A02C75542C3EDF11DC +E5660CAEE7A102627B110ECABEF1F0457E619F429EED4B4D4F2ED19D276B50ED +C53A515750A44A139CE3AF0F54EC7E4D2E9A95E7C5560C37AE2CE8C2069C69B9 +49D82C48629D21CB7976CAF638EDEBB48BCF928211909F9FC6F1EC53557C3CDE +B536D5C2397681C2EEC7B1B45AA6330336C5A1A603B117B328FBF1DCE5DD4984 +CF2EA6BE5AE975AC530AD0AEAA68C6854452A8E152B01CE21A3EF3FBBF814808 +041F415F88F4C0D1B138C6794396D6384BB3B1940D8541072D0E0EF3B072C84F +175E90E9BE167D3623BAA68BAE16EB8D3A37B01EFA248C99BC387EC50FC1FCAE +81F2059B29868ED55DFB5EA982942766466C2912A51B9B245E26704767B05377 +EE575D2723260CF9443EE83D48AF5311D19F3AB2E0B9EA99EE33A9DAA08E6884 +4885BA35B092C033C52547F35CC840FBD7ADE26AB8E5791930A80ED7EBC17F96 +40C4E1F142253C8BEAEB88061D486C8BA3776DF2598C6EE4D22A371B02D2FD20 +402A7F2278DC774236E57CC2E43BAD027D695D04AF02A9668E7092E21FB3F268 +1453AD9C2158B231E5CDCDA5A37A4EA0B408C61EBD2AC7A669270999BB7C3D4A +9590E4DDAC50350CC929557EE6B694EE13BCBF3A8889ED59AB36505F238106E4 +908C678110AFF73227B0C1F6C1B622C76C242DFA0213AA7ADD5C98F344AE0530 +C97EB6B4FD044C1752977AE8577E22DBC0B183711E47A410D9DA539121932A36 +313F9B79F48DBFCA5F6700D89DC9469DEF3C5D0E8A36FCD60A3C2B00748F53A2 +C928B80420610C7FFE1C141C226BAD4468C9439954692DC5BCC7F01562C902C8 +6BA19D25BF6993DADDDE6EFCA7564DBBD28B37D8A3262A08EAF397A48BDF547D +E2B3B20B3AA1F105F092A2189AECE726EF0F7F25D497CEEE57CAE48576453CA3 +369222BF23760E85A714E33821B4B08B3C1159B766BBFC8B87BDC64A3FB8096A +695FB27F7625D20A822A731887F119E45255348442BC5F8C08BEE83B37951225 +70C65307C98895BA0FCFA9DAFC464BAD78A182BEA1DE19B34CE77CC4A14B78F6 +E11C085DE14039B61084E9E83E074722DA3D4772C239E51606648B866874D40D +9B445DB50B497725E2373C268ABE838CFA5FF2DFACD643539A6A9F86C25F0CEB +51429E91FE1AC28B04D9E8FD5E440F59B0FF11BCFC1CC834E42E19C202986947 +08A7FE14B616C5C105C400B88151231E0303D22E1426DF7D586598D1378AF870 +6F590BDB68110428D0561C5E1AE7400BEC60AA1FDB9A189A0BFFEB2312414C95 +187F70F0B327F09B83FCBDCBA8CCCC0E41ECB9AEC489ECAB26666BE8A8AB10FE +5A95F2A0EE3EAAF21D40D5CB3B155A2B9CEC7615D6F267121CBEB3D85C283E9B +36D9B0940DE48B5687FF8E5364C8D7B851AF3F8502B288AF7570965E62029803 +153080441CA754CFF0951056ECAC2C1C58D0EA87B93D3B09A0423E3FDFE1E44B +97550E8AF88B65E672E8B309F526590A438E38E48A14E01530BAAB755721AED7 +00BE9A1AD476F61170D4A1FEBC0FCB1486F75F68F5E8809F735F7C7EE0398BAD +6670E1A678A99F2AE33D639FDB6E504AA9F02B3D875DADCDC965993A86112BB1 +4E06541C8D658E64B26A7B4F38C0BD161D25AD0B0E815C4CAA65D85C998D7DFE +DFE69331D0447ADEAE5E24A9896BFEF8493CEA0FDFB81209DD068EBF24D3E9DB +A91FFAB381BA9B169595C1171F986820E9BB9AF52726340C8A256411D89A777B +2B804FE94DA7D9E9FD0832F22BC354D4D31198712BD3D2A3FA433B0C2C8EC0D9 +B8A0A852C2106A040658AFDA6ACF672F02D432FA4CEF0ED148A6F08645D0C73B +268AD4AAC25EF9DACCD53E4FCF07E2DCD9A32210340D7F4295A187365A4A904D +68960C4E644A40B9F4E3C6EB2154B8456A7F8200CAC41F87A5936D1B230E0431 +F4D65028EAD48BA22CF41815D8CFFAEF0BC411E100A401CCF25AA630782D9C0C +4DCC6834877FF4A0330C2C7EE37C58AEE4A53AC28F0AE02ABF2ED7E65D80061F +905E38EACCB58390375DADD554C98CA2B005579F8E724C97B88F6AE8289EF21C +F351267D586922AFDD20892BF3263F5FBAA4A3E7C16024187FBBED81B557196B +D2EACC985930C0E97539EFA52BE652EC950212E156F8DF4B88D1AF2992B79C5F +D25DCD8099CD2AF75FCDEC084AC81B94D4B09488B6A8DB446741774E11AF113D +DE79BCDE46F1D30EAFADA8401EB76FFF0613F54C508076AC8CE62773DC44DC65 +194083F0305D174A25E9CAB354019D1DD787DCBFC00079AF126E5C75CB4CB10B +CCE3BCBFCFF8470658E234CE47CE610A064C90CEEE64BF4E94CBFF0769EDA6CB +3F60B4F4A12236BD273ADC174DA360C7A302B7154D610C2EBD0439EC2A0AC1BF +708F327C709AC551F72F93318C61E227B2C04BA2F5BEC6913A7D14E684831B80 +F625FD2526552FC2A952112EA17BD97C28C4D5C4A985703206EA7599C7CE5543 +9F06D89FAE65483C61CC99C1B479062F514156462B010FB0C130FC44BCC8B1F3 +6437FEFC5682B9619235BDE023C7FCD389848BB255BA164FCC11B298E6FF81F0 +198FBAE98AAE5094380AEF9C9EBDF7D9DC8E063E01D20CFF3318C0BE4539B03D +454FEE6C426FB9B50EFC5A5D90993C2ABE542ABB07540EFD18DEF8BA9C649452 +0BAAAEE1BA0AA0174616980A1FAA41DBF6045F6D71911826BCBBB85A29C50DFE +81D474562C33133AFA8BCE730A347B7225928AC3393FF04080DD74B685D83C71 +C79974FF1BD93EB1483B4115633F8D22F5740EDDF7C0AB00EA0E5C0E33BB9AB2 +6B25E4783B47E129BBF5315249BAADD06EE754442F58F803F50FDFC3B90E33A1 +F15D292ADA6C5A562474E339A0EDE2AE8C5225E182C0AA5986E34AF85CA30185 +73FDA3B97EA7AC64E1834E4B7BAC07C4404B41D7D327E4A6D11E672AF6B0FD5B +B16BC5C05C3A6021030129C7970EA1B6255E57AEB5DFAE77951667C85E9C7912 +D626DD5EBE8080FAF71916E21E3908CF1187C239AE7F99BAFA6AF6FA9BB8F6FA +10548EDF22519AA6C065B6F36B362FF63AB22C28EB9A2C096AB5C3B3ABF9F0E4 +230B111051268A91099FD425298224BBBF3D82773E80661F46A2108E434E950E +0667FFC199BBDF202A02760561FA2C938D633141C2567A71769553DDBB977E62 +487AE5F58F405E2DF065A1082C64230EF6988F371875E7455AE359D413FC19E1 +618E13423380CF7101C1E5786E437697BCD3AFFDFAD0E2F4988B59AFD74CCA7F +C0849B717EC76D1CDADAE754FF3E2888100F6F8AA5A407565CBAE2519FCAC7A3 +6BA7D2804B55277A96785BAA7007840ABA7097BF029A42F09BBABDA7F618B009 +02B20D0C5166170E49F927ECEA486DBF60D4545C406288BEA9185D29419AF9B1 +DC5B2426047444D704D1C8284DB6C8916028CB559A1A1D993C372432A8FEF201 +8B15EBDF1839FBCC99AF4B2CC70184227739FEEA44F71B17C066BC6E8281BE57 +FA43B781CD0B22DCBB4D45FE5D043F7F77FEBBBD6E901021405E21F369075CC1 +A5EFAE8B1223DA341CDBA4422051DAD575D85B8F21D3D0A23AEF706E6C7889E8 +90BD5507B77214FEC20248907D9CC76F06261EDB9C1872B58D5B24EC75A12637 +46B326DA1CB035F5101A0D61423E929D1492857D8D3472CA79CF864B75E8C884 +CBC59B3F398D2AC1E72EDD7712EB9C771E151DA8F345F49CA9184D793531AC0E +6C61BBF5374CC131D7D132CD9DE327A6466ADBA8ED66CAF4C3619CCCF439036A +C79828F7F6CA8FA0E6BF1156589D5FCA0180A8E40B9BD937C20A3759C4A5D2CD +AF6065B9B04660DA644AC7812348F005614E3E68F34FFD9CE2A8D4BD457EF076 +B53F1AD0855916BB95532FA2191B5AFF57E34028A2438363A281D4A8A17C7271 +73C772DC4E1E13214B8C8FDEE2535C68728AB24D9D1A966B745FF6DB0347B907 +92EAFEF9B76EEDF4A9D21D77E48DA53AE70D4B82C2F170D746667AA7560481D9 +953DC48BD52240ABC2CCA770150E0766F6D2CD68D3C6C98A216CFDAC5F7AA074 +439A23338CCBE958C09B80A1114492669E06A8B59F11E09A06D5CA95F5079CE7 +1F05A6C757F2E7E77063BE425D4F9C231774326C5F474662DA165929D06DC06E +5EB521CCD55445C0D8D309CD4E86DCC01BCBED2461536DD64C8EFABAE3113080 +33756075E86C360F5172C2AE9751E166E095C2768C6F78D2F034D7B8AAEB4AF1 +5AF5455B393ABDA883E40430EADF998233BCFF3FEB60BE426FA32BBF703087D5 +162A205F35C5EE5B495C818576E0A0D0185C46B2261D0A3AE5581AFC867F0421 +33EFA2AAD59FF5F4B28B4237BE6EA30F411C480A5419E88FFFF6F71CFBF524B7 +3373C8779F3D38348202046FF56A9AA81DE74452FB2B4D74FF664484128E9773 +3828C9CBC64ED407B4D249DFD88E4C6059E3A0EF0F78C477D9173A8AAAF3C2C0 +4442D24EE56A41796E1F022625F147350D01A2941005D7D76466C09F72B4C6EC +2ABEC87DCB93686A9490D123996F2E0233A4D5789606C1DF88FA1E2346334FBE +8C2F1D0604EFB1480D7D92C60EF352B98D40E529D1FA9BFC08E65ABE99E9A3A7 +ECBD6640D103D25F7CA7C3746DDE20F8872E34CE5CE1A5D705F26505607B534B +D1E2EFF16A88B21785BCF5C0C7C94EF71D7F5B70C1CD648F79A0D62E8DD798AF +78A6BE13AF22426C6A3F84E74AEDF294FBC6CECC7DA03263BA8D3BECEB51E07E +5183C9714D421273EEA1786FCF2136FB35200F39403247204A93D8DD0E061A70 +FD3FAC8DE2941B0790D1286E70BB164B608F663157B36B92D9FBF4806AC5C85C +83D3AADDA9B5ADC8801F54DFACBD443D0671EFCC98638D5AA83640991C468B02 +050576A22700A7D253C080847012A5D12AFE1F64E9CEB0A8BD9D9835BE9DFD73 +C08F415F9FAC16E7335CFAAD30916DA2208A1A1D92D94CC43FFE83536320607A +AE216F2423F1C44F3EEAE597C614DE23A4F5AD0E0EEC702DDB0B681518AC2661 +83D85D58BA9351FDFAEDCEE6A657F3013D10FB108BEC655DDDD2B292A0DBA305 +76E08D8776153981BD805B191643C49FE7F112ECCF33887E05208CFDA3035E7C +53DE8F2DC368F3EFD64A5FF94EB46372FFC5C3600A5EB79F6D55F0F5EE536255 +564E3D4605CD5513812E00C02E68AE770FC74B5D2B474EB11257CE60B2EE5385 +8D79B59B8E57FEA51662D012044EB1E759424B00D6E3C9B60F760629AA6B3C71 +AE02C0D5E8EEF62B316E200F2A65DFEA797673AB9DBDB269675F4EBE0AEE8A56 +938B7ECFB5D0818831CD99DA461145B2A7733400650880C582B5FE0A7F65373B +9F06931E17B0E338C9749913C4416B1A2948672B5920AC7394BD49B512A96788 +EA25AEB8111D7B1010F78A6F0568BCC2A92E3E13569EDEAE5E6AA4BD2DB61687 +C271F6FA05A7374E156C580483B5AB1C352BB2FF2FA68BFA681E8C4FDEE4D8D2 +A794254B3340FA82B3A4D373D2780C7404F3E1C58EBF35C235D47A67094E2982 +2D2CEFC9D4546127FE445ADDBA25BCEE039D86874BE5D3A8B35C8E6DE6D7C751 +F91DD71BA744782C422C2A4410CCDE106C17BE390D58480565FB9C382AD36D2B +674DC1AD7A72D3E61AC694509ACE0D0CD0BD0DDB3E4C54B026A803A82973D875 +13DCD6A5D33A89893C0E1B03EF1BA703753969925B835D1EA598ED1C464CBBDC +DE0048DF3B5597B9A8B69620721016D72F217EFE031C690E78F55AB9F25D50FF +0A9313DBF049CC299B66741668FB6602A8FDA41791BD90D61C039D8181CF9CDF +E0E400EA339267C6DE2B6787385714C53DBFD8A3B11FA8ACDFD1D9E1DCFB9F00 +823AA131B63CBC3CA7838A410BB79A777E7AFF2E94539E6CC4F644558FAF742A +7D96591496EF10E5B4D9197B6B8A1DF530DE579F6198EAAC693E8E4342283898 +D809C1EEC0EAA25D8F9D2483255F3EABC9FB4E9EE501077C2611A4A9C37304D5 +9DA262A5A272E1FAA9A4691C5A2D095042C4A0E81003B4A3D9C3D53A88DEA774 +1880BEE754D33DFAF8058A7919DB3F3EDC3B565F8E86E231557A4D48FF9722B9 +905631EEE5331EB628B68553279CF12D3B124FDA6C82CC741E45456A5152685D +7656D0373F3BE63445DAE733E6271FF786DC1CEB0F76286F8B1BB3E4EF745C7D +D64916DFD010A1754C6BF0F1545E865924F6FC60B8B36901C9984A2123144EF5 +DF3ED789DFE1C2A9C8C4165771BE0475238D78BC3C4B89E1281B842C9484BCED +9C04781D867F142E4CD8870ABED25BD99CACC7E16762CB89D83C32DAE0BB4A43 +BA2CD338F47DAA89524529F276664C563C23EBED3A46A3A1837BE45FA0D92C74 +7D2F624AC5379325AAD79C73AD35C55952BEB47D938E1E069530AD71A19CC017 +6F215945A8299281E8D603884F30D948F583BDF3D0634511D24EF5F81CB639DB +EF876929DBD5882BE184D9FD1DAEDE8CE9BBBF0650B820B94F8FB1DE9C72317D +A3CB6D4018B5DD3F15658121816266243E5576A9593F6CEB97A3DA96EE7A0913 +C67E9C7E67EA60618250E53A4922B087DCEB67A6FD88A38B95F2905878074EC7 +2EEE2E47986F5B4DE3E734CB12C635435D1F3CB9FB73AB976B4B62B50029D650 +BCCB5CB2C16912C7798DBA5A10E05BE321E0D8141760CD4A71A58615503624CA +D18653A8051F18BDA8530020883188513B44ACB06C51761A69A9454264B4353E +3C691FD15BC6490AACD307018B211C444A3BA2DFBE64B4554589C3EE03985ED6 +19964D980CBF18EF329C905B1562D07A476592161431BB9C13DD616C324856B1 +D99367903981A959D6544C668FF56A11A4E6A8F137CCF811C08760C335EACD7A +896DEB339070364757DA87D674AEC3CF2B73A907972111AD235E3E687BEBEFC4 +1B9E0244FE67A10C1F1F483C25A077440357190D8C23086A468DF5F204C4E77D +A99E44D25F84F187759F801DB1E823042391062DC6CDB515AD7468A21E67BD8D +531DDA55A4484C5737393AC599F7142DCF408D39E6F21FEEA1E255ECAB4880CB +BD30235F6A06D8B85BB96C496BB4945B5D869D03AE23CD53592B1CC9E603D198 +9636D1EEF8CC323D05A4D115DF2050D0336EB847FD254C6DD87DB1C16F957637 +1328D89FD3E824277B47F4D184292023F7164FC817402915AD18EA5FDDC0E568 +484B69C1BD707EE0F17E99F841A003ADA952DA003D7E3015F7CD6671C99866C0 +38AA0004C4EC22083FC499B2D54426D73F355FC40CE9FF0F4FF898D3ACF54CE9 +F5C35329EA8C3D8342C375E94D76746321EC3C2C41CBC5C99111D35BDA763A95 +F3E087E544B8FF99442822D00C64519AFF28A4567239251D7F857CB66C411A92 +3EB1A627B5DF96AE5186F2A2C6DC3599EAE470E9D5E4DD51AA51DB6CE0DF132C +C49E2267E3AE73A37974CAF206FAA471502CA50DD99A02D23E0BD2ADA02DB11A +FAA4F1CC935ED0CC09366A347B5C102485247803980B88F87068DADC477EA546 +BED59BAB0DD6C146EE76891DC7AF56D87C5128C6B026ACFDDD40F9311848F1B0 +3745D94A521C53F96169EB060AA88AC19762B7BA18298A7E6783CFCE246A8162 +EFF4A3FF1D589C7B4F24C60E04F073882A3B7AEE9517DB1673E86353F8C7A2DC +C7450175350658583C38546D7171A7D9A2F95961622E5DE16BE57FDC37FCBEF3 +17D5EFFB641A127B76B0E210782DCB7A6D9C8FF97727B7CB885E77DE90BB77B7 +93E59B9B05EFAD7EA49396A590F926F0E3EED3C3D00B3469C45234E48E5A3C70 +95F6B06783446665A1FF599209988DF2E14C8A4EB6B4DDA0C919A73FBC5DD48F +278AADF0F2DC3B1AD4D5177A751B206455B2B8180A7D0A6CA16A2CFD6F042800 +0A51B62EDF48A50FC30534DE393F56298C446FDA0E2688619D25DDA39512E5C3 +07DBD0AFA890DEF8377901E3D083FD5E041DE516800D366760CF2F60EA788F38 +E31229C576DC3C2ACE277621BF3E1945A8AEE7F64F590C6E9BD7B8182F0E7052 +0B04E382A9D021E2959A4A7B7F0B8153D1815FE44491EFEB187C484CFF9470AB +9760044720C74C13499D52860603439FE20AAFBC968A7085BF7903715A103390 +408DF7BF7F5AABD26E640BC4ACC9AD5A5420EAAE93C01C54D4774ECE5AD5DAC0 +A375696AE02782C54006A6C5E7AB2376DD3CF580DC319BD8AF07556B3198F678 +4690576921D1DA4E8CA6E8D2AB24144BE55C0CAAA29FE540DBEDE0FA19CE4915 +F7FDC6F3D415C163159AA840EDDBF61A32DA2282BB6F7BE3C0B25B97D6F33B9D +ADB359E7FE393FD07F66A90F24CBDF65ACA58991D236BF55E70F0F83EEEFFA7B +BD9280C77836ACA05F62087D87FC851BA3FAA9B4828C1C04DF4874B08134AAC0 +D7375DFE924480A118551247A787F46701484F13B78CBF53C4E2505E9BDB4A6D +46EB367B6C592BEF0C4F0435F6AA1AB16EFE3CFFF2E0EF873878EAEFD8F7BC46 +91442950C720410F21132F1CC1072DD9AA0732E7A808A4B4DB0EF4C0FC4075B5 +3E05559438311C575D06FFE434832932457F14A3B344822DB9251781B4AE7130 +C6BD78F20AE92800782012B65AA2F50E5F586481E2B2555F9E220636BD042219 +6D0ED63BC5A1C9745AEAA322848605D0A21BFF7063668D4424603C3B7BBA7E77 +1A487FDBA58C679B6EC246740FDC50E965504B13EE43757B8D7021C6DEFD5D89 +A6F0CCA97767C20D1B8A3AE2603A32DCAB67CDB24563811976850786CE6555A3 +C4E05C5144F6BB540C67C6AAAB1549C698E67953F6C723072D000128F5972331 +FAF75692D9C468365C2D314617C1A9ED01621C246202A838A5C090722A93C946 +39FE88C132E81ADB3057B068E5AAB73388F11281B4464C70FA539E5DB5600431 +46F3B5F9708F0A702C59D022A3E490BD13F1163841408D5FE0296E3787DC7824 +D7DF4D1F51DD1D691B9116EBD597A15E991686B587C34B99D48DE220E4DE678F +70C18D63A8A928EAF6D4020BB86ED766CED705064CA178108F824E69D23948B3 +918D8990A9DA0D5BC6BB6BFAB120C4116C4E3748BAFC59774D2E2B1E54E28356 +1223B92E55DD1C38C7992EAE97499342C34205EA9D78962228312BC8544C4C35 +64A7B9F0995EF130FCDF4A6AC271B238CCF2F14ACFAF2C52CF5E88D94427B59D +3CA2192E072E60AE68635AA43B4CCD84818F8BA3BE6E7C3A12141B051EC066CE +F22B72F32F7DB4C2DE9641473F2E7DD67B3016360293C495AACB39D0D09EE8A5 +829EA662A480655AF4372BC006D9000553BF51BCD2820759776AF30A58A4CD01 +F909C84B66320F657E59932B16CBB4660F30003F8D537358C07F0534C0EA2E9A +93632315A142C322159D6E8C243767FCD9A6AE5E44608F1C546D6F14988C289E +F724AD9706E1AC8B8B69525F1D9A1EF2123C1E226F34D8CD54B0A5831EFFAC4E +824F342E25FDD64C8095CB7E0B077CAB654DD5CD8410B2B776C750F4A03198C3 +60D50F2091D26CA50C3D1EADD19A4474152013C0A7C4395C43A67DE232D21B96 +44F30F6A33B7A6E515705F50730FAE828CB828A83C6245F29BA4BDB0F2DED3D9 +4D1247CC5844DB55A42D11BD6D5D2A36FE316C0287789955B81B32B2C7BC490F +78021F2667D4F0C866F5FE119A416CC10AD5E0E66BA57EDA546299E6FEC3D74B +C1A0144D3759CE48361B442546425E1A5BADCB653F888EA9005B1BCBBE61F117 +F7DB7003CEB38EC717D97CB107E8C36D5C9CBDA7A64CBA9DCA6F4D37C72A754C +54D7E98B45EAEBF36FEA9617EE21BE9302AE83F8D63ACCC2ED2A930A9A506823 +8D402F62664DCFF4A30AD57E7CCD617EE8D65EA164C3A6258937E76BF1CF6F9E +DE29CC5CC415DA1CAC77E47EA11F0581403207A4BA16C060AF0B7EBBAB4CB949 +EB01F91C29151CDC84940BFF14BB524DEB28A0BC04D3435B9BC2ADCB20FDB237 +4719C73156BFD458ED3203A03C7E2672D96D77D3392455E51664AC15EBCA25A0 +700BB1D41AB6787C8B5B8247445B02394EFADBEEAC50950266C8B5D412590C1F +CE473FBC668B9E34BFB993AEC72FFA4C0404D845AB9A7015617E314CF30EA7FE +D55ABB0566CF07BF9EE798FAA2DAC7DB46AF29BAF4336BA55380CA606784ADBC +1557AA647220FF1545D4932A5F1DC343AA1CEBE547EAF0CBFB3073614D0D9529 +499884742FC1564657BF85E7CDF0B4A808CF72E7795628DC27FB352A88E9EEF9 +A1F87518E565B56ACE1B38268E1A145B3D337DC708E43C5531E392BEE0C88675 +29A7A7F0AF6C8463036B9F0BB3F13EE9D80E7FEEC301136C6B9B8127B0796A56 +7A649DF11FA433BACC73C9119055962D0B4B9D8357E7D85F0AD462E498F492B0 +56A39629217CCFBA0A2D64E614E49CF82D2A07264069FC97A9D3CB23AEA7AF41 +276B91EFBC9D29996E78C35F5C5E2D55F8EF74743CBF70B30F99152C4CCF3B89 +7E63CF273D8A7A144DD378E349057DAC564A504C779F2302CAD97D3DDE96F547 +3C825E38DF9D5B8B7AA92992EC0DA0435C45F5B11A25E8AB8EF8686644046B5D +5EE08DCCB9F0C63C2BBD9F86F9EA6A1A75F430393DBD276D89A46632B5F4806F +E2AC2AF6FA72EB3B63CD97E10A41D74C861DF50B269E9ACFF80AB7103E6FDA0D +221D90E26BE737901DD5360000F4C66930DCAA8F564DEEB7D9B33DEB663A3F0D +B19EEB5F2F137DA03DAA25547C56CAF187C3877C1E272D126D7AF5185C7E4590 +108BD19DB3BA70888E7E24DD0AF9723598E5722716BAAAC7CEC44B42FA3EACD6 +7AC8F81A9EE1551AC9D67A8BC2FC07B40B61CFB0375DF2554B69AF994DC56255 +E7288CC7264487DF62510042005EA32B0152DE4B6DDB72C4C5C5FB8D4C6E0B99 +9583A88B94EBE302AC43874B57D903535068B731E18FD1097B43A18097D19373 +C7BEDCC310BBF683C7A7ED3DF6248219AD63E6A064FF9300CDDC6689213415E8 +2B65787B1D62B3194A64F2B9F4BC98C6F1D0090647288965E5A3AD841A88ED68 +1A0A7C27E6A17FF9AF31881F9A6EAD18688A473D74D9382688938BC9806DCB42 +2537E5897E6E3AC020325942FA482C9EFB6C1BA346C8B0FC3A5E8B8A5B66C8BC +4589DA12816201A2BD7FADC77B30B992CFCA4FEBD70834E20A00F557C2EEDC1F +3A66D6B459C763B39E2C6E5858E4DAC6CFF97C5775B5590C621755ABE64EFCC8 +A3C6B093EEA54ADE8943D533000DA3AA06A0CE15AC5EF05E1892E7AE5A0819FF +C01D58C56F99B67588BC1D35181998C99F13D0B931B3A059D42F6501DF04888E +00BDCC4515D4C10986ABF47697808223FD2D5653BCDEEF74179237BE8E90E832 +F98302AE9F1926A90BD6A7BF826FEBFF898CFDDDDDDDCDBEB8366B95780DF205 +42766E31290F09775D684B4F3102C6F17B8798DD03A07893720F8DAC799001BB +E53E6E249420D739B686CC979EADFE335A71517B505E4088640FB2365FEC3A3A +536EBD10C64F6472F46E6789A9022F61FD39E99A34FEF7F8A77AD8B4277C20E9 +21F6ECF7C0272DF3E8EB1282D80CDA9A7ABBF4553787EDA5D87772DF5F17ABAE +BE0F4485121EF3CA4C2E484F56EBDEC8445FB13BEBC70E427428C746E979C8BE +BA1409FD47C8A8CCAECBD762A2A9EC4DBED06320782CE1D516ECF8A4B4C0F515 +68257E14FDA7CFFC8B2EEE670C3F0867A9D0F2AE01DF1B2E99FAFB707D0C7752 +96E05956C8D4E1FB350EEEF51D557ECF9406DF03DAC8F475389B447BAC94AB39 +1AF3F3EC487506CFCEC37945FBC56226E98BF406AFDD02A0713F7B089D3E7EBC +F11E5ADF5C2953873F8DFAA42AF78360B3D9D03238291736006506D31C121145 +DA6CB0AC8C11B02CD04E1A4C01E4C1B5EF7467BD42160DF83515640D6B0D9BA3 +E8C9F9D3A1010C2AC7F50BD2329AD2BE095525964B1FD4B317A747C91674990C +A0FE282E204A58A3C08AE386CAA8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +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 +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 +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 +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 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 1[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 }86 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 %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi @@ -2534,63 +4220,63 @@ TeXDict begin %%BeginPaperSize: Letter letter %%EndPaperSize - + end %%EndSetup %%Page: 1 1 -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)h -(for)e(Bash)2276 1589 y(Edition)f(3.0,)i(for)g Fs(Bash)e -Ft(V)-8 b(ersion)30 b(3.0-rc1.)3350 1697 y(June)f(2004)150 +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.0,)g(for)f +Fs(Bash)g Ft(V)-8 b(ersion)31 b(3.0.)3367 1697 y(July)f(2004)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 -b(oundation)p 150 5141 3600 17 v eop +b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 -2 1 bop 150 2889 a Ft(This)34 b(text)i(is)f(a)h(brief)e(description)g -(of)h(the)h(features)g(that)g(are)g(presen)m(t)g(in)e(the)i(Bash)f -(shell)f(\(v)m(ersion)150 2999 y(3.0-rc1,)e(26)g(June)d(2004\).)150 -3133 y(This)k(is)h(Edition)f(3.0,)k(last)d(up)s(dated)g(26)h(June)f -(2004,)k(of)d Fq(The)f(GNU)i(Bash)f(Reference)g(Man)m(ual)p -Ft(,)h(for)150 3243 y Fs(Bash)p Ft(,)29 b(V)-8 b(ersion)30 -b(3.0-rc1.)150 3377 y(Cop)m(yrigh)m(t)602 3374 y(c)577 -3377 y Fp(\015)g Ft(1988-2004)k(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 -b(oundation,)31 b(Inc.)150 3512 y(P)m(ermission)f(is)i(gran)m(ted)h(to) -f(mak)m(e)i(and)d(distribute)f(v)m(erbatim)i(copies)g(of)g(this)f(man)m -(ual)h(pro)m(vided)f(the)150 3621 y(cop)m(yrigh)m(t)g(notice)f(and)g -(this)f(p)s(ermission)f(notice)i(are)h(preserv)m(ed)f(on)h(all)e -(copies.)390 3756 y(P)m(ermission)k(is)i(gran)m(ted)g(to)h(cop)m(y)-8 -b(,)38 b(distribute)33 b(and/or)i(mo)s(dify)e(this)h(do)s(cumen)m(t)h +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.0,)c(27)f(July)f +(2004\).)150 3133 y(This)35 b(is)h(Edition)g(3.0,)j(last)d(up)s(dated)f +(27)i(July)e(2004,)k(of)d Fq(The)g(GNU)g(Bash)g(Reference)h(Man)m(ual)p +Ft(,)h(for)150 3243 y Fs(Bash)p Ft(,)29 b(V)-8 b(ersion)31 +b(3.0.)150 3377 y(Cop)m(yrigh)m(t)602 3374 y(c)577 3377 +y Fp(\015)f Ft(1988-2004)k(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 +b(oundation,)32 b(Inc.)150 3512 y(P)m(ermission)g(is)h(gran)m(ted)g(to) +f(mak)m(e)i(and)d(distribute)h(v)m(erbatim)h(copies)g(of)f(this)g(man)m +(ual)h(pro)m(vided)f(the)150 3621 y(cop)m(yrigh)m(t)g(notice)f(and)f +(this)g(p)s(ermission)g(notice)h(are)g(preserv)m(ed)f(on)h(all)g +(copies.)390 3756 y(P)m(ermission)k(is)h(gran)m(ted)f(to)h(cop)m(y)-8 +b(,)38 b(distribute)d(and/or)g(mo)s(dify)f(this)h(do)s(cumen)m(t)g (under)390 3866 y(the)j(terms)g(of)g(the)g(GNU)h(F)-8 -b(ree)39 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)38 -b(1.1)h(or)f(an)m(y)g(later)390 3975 y(v)m(ersion)27 -b(published)c(b)m(y)28 b(the)f(F)-8 b(ree)29 b(Soft)m(w)m(are)f(F)-8 -b(oundation;)29 b(with)d(no)h(In)m(v)-5 b(arian)m(t)27 -b(Sections,)390 4085 y(with)i(the)i(F)-8 b(ron)m(t-Co)m(v)m(er)33 -b(texts)e(b)s(eing)f(\\A)h(GNU)g(Man)m(ual,")g(and)f(with)f(the)i(Bac)m -(k-Co)m(v)m(er)390 4194 y(T)-8 b(exts)33 b(as)g(in)e(\(a\))i(b)s(elo)m -(w.)46 b(A)33 b(cop)m(y)g(of)f(the)h(license)e(is)h(included)d(in)i -(the)i(section)f(en)m(titled)390 4304 y(\\GNU)f(F)-8 -b(ree)32 b(Do)s(cumen)m(tation)f(License.")390 4438 y(\(a\))39 -b(The)f(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)39 b(is:)55 +b(ree)39 b(Do)s(cumen)m(tation)h(License,)g(V)-8 b(ersion)39 +b(1.1)g(or)f(an)m(y)g(later)390 3975 y(v)m(ersion)28 +b(published)d(b)m(y)j(the)f(F)-8 b(ree)29 b(Soft)m(w)m(are)f(F)-8 +b(oundation;)30 b(with)d(no)g(In)m(v)-5 b(arian)m(t)28 +b(Sections,)390 4085 y(with)i(the)h(F)-8 b(ron)m(t-Co)m(v)m(er)33 +b(texts)e(b)s(eing)g(\\A)g(GNU)g(Man)m(ual,")h(and)e(with)g(the)h(Bac)m +(k-Co)m(v)m(er)390 4194 y(T)-8 b(exts)33 b(as)g(in)f(\(a\))h(b)s(elo)m +(w.)47 b(A)33 b(cop)m(y)g(of)f(the)h(license)g(is)g(included)e(in)h +(the)h(section)g(en)m(titled)390 4304 y(\\GNU)e(F)-8 +b(ree)32 b(Do)s(cumen)m(tation)g(License.")390 4438 y(\(a\))39 +b(The)f(FSF's)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)39 b(is:)56 b(\\Y)-8 b(ou)39 b(ha)m(v)m(e)g(freedom)f(to)h(cop)m(y)f(and)g(mo)s -(dify)390 4548 y(this)31 b(GNU)j(Man)m(ual,)f(lik)m(e)f(GNU)h(soft)m(w) -m(are.)49 b(Copies)31 b(published)e(b)m(y)j(the)h(F)-8 -b(ree)34 b(Soft)m(w)m(are)390 4658 y(F)-8 b(oundation)30 -b(raise)g(funds)e(for)j(GNU)g(dev)m(elopmen)m(t.")150 -4902 y(Published)c(b)m(y)j(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 -b(oundation)150 5011 y(59)31 b(T)-8 b(emple)30 b(Place,)h(Suite)e(330,) -150 5121 y(Boston,)j(MA)e(02111-1307)150 5230 y(USA)p -eop +(dify)390 4548 y(this)32 b(GNU)i(Man)m(ual,)g(lik)m(e)g(GNU)f(soft)m(w) +m(are.)49 b(Copies)32 b(published)f(b)m(y)h(the)h(F)-8 +b(ree)34 b(Soft)m(w)m(are)390 4658 y(F)-8 b(oundation)31 +b(raise)g(funds)d(for)j(GNU)g(dev)m(elopmen)m(t.")150 +4902 y(Published)e(b)m(y)h(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 +b(oundation)150 5011 y(59)31 b(T)-8 b(emple)31 b(Place,)h(Suite)e(330,) +150 5121 y(Boston,)i(MA)e(02111-1307)150 5230 y(USA)p +eop end %%Page: -1 3 --1 2 bop 3725 -116 a Ft(i)150 299 y Fo(T)-13 b(able)54 -b(of)g(Con)l(ten)l(ts)150 641 y Fr(1)135 b(In)l(tro)t(duction)15 -b Fn(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f -(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)60 -b Fr(1)449 778 y Ft(1.1)92 b(What)31 b(is)e(Bash?)21 +TeXDict begin -1 2 bop 3725 -116 a Ft(i)150 299 y Fo(T)-13 +b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fr(1)135 b(In)l(tro)t +(duction)15 b Fn(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h +(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) +60 b Fr(1)449 778 y Ft(1.1)92 b(What)31 b(is)f(Bash?)21 b Fm(.)15 b(.)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(.)g(.)g(.)51 b Ft(1)449 888 y(1.2)92 -b(What)31 b(is)e(a)i(shell?)14 b Fm(.)f(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b(What)31 b(is)f(a)h(shell?)14 b Fm(.)h(.)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(.)44 b Ft(1)150 1130 y Fr(2)135 b(De\014nitions)37 b Fn(.)19 @@ -2599,202 +4285,203 @@ b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h b Fr(3)150 1400 y(3)135 b(Basic)45 b(Shell)g(F)-11 b(eatures)12 b Fn(.)20 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f (.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)57 b Fr(5)449 1537 y Ft(3.1)92 -b(Shell)28 b(Syn)m(tax)22 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b(Shell)30 b(Syn)m(tax)22 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(.)g(.)52 -b Ft(5)748 1646 y(3.1.1)93 b(Shell)28 b(Op)s(eration)10 -b Fm(.)k(.)h(.)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(.)g(.)g(.)40 -b Ft(5)748 1756 y(3.1.2)93 b(Quoting)10 b Fm(.)k(.)h(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 +b Ft(5)748 1646 y(3.1.1)93 b(Shell)30 b(Op)s(eration)10 +b Fm(.)15 b(.)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(.)g(.)g(.)40 +b Ft(5)748 1756 y(3.1.2)93 b(Quoting)10 b Fm(.)15 b(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Ft(5)1047 1866 y(3.1.2.1)93 b(Escap)s(e)30 b(Character)24 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)53 b Ft(6)1047 1975 y(3.1.2.2)93 -b(Single)29 b(Quotes)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +b(Single)31 b(Quotes)15 b Fm(.)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(.)45 -b Ft(6)1047 2085 y(3.1.2.3)93 b(Double)30 b(Quotes)15 +b Ft(6)1047 2085 y(3.1.2.3)93 b(Double)31 b(Quotes)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)44 b Ft(6)1047 2194 y(3.1.2.4)93 -b(ANSI-C)30 b(Quoting)18 b Fm(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +b(ANSI-C)30 b(Quoting)18 b Fm(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 -b Ft(6)1047 2304 y(3.1.2.5)93 b(Lo)s(cale-Sp)s(eci\014c)30 -b(T)-8 b(ranslation)11 b Fm(.)j(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)41 b Ft(7)748 2413 y(3.1.3)93 b(Commen)m(ts)25 +b Ft(6)1047 2304 y(3.1.2.5)93 b(Lo)s(cale-Sp)s(eci\014c)32 +b(T)-8 b(ranslation)11 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)41 b Ft(7)748 2413 y(3.1.3)93 b(Commen)m(ts)25 b Fm(.)15 b(.)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(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)55 b Ft(7)449 2523 y(3.2)92 b(Shell)28 b(Commands)23 +g(.)g(.)g(.)55 b Ft(7)449 2523 y(3.2)92 b(Shell)30 b(Commands)23 b Fm(.)14 b(.)h(.)g(.)g(.)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(.)53 b Ft(7)748 2633 y(3.2.1)93 -b(Simple)28 b(Commands)15 b Fm(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b(Simple)30 b(Commands)15 b Fm(.)f(.)h(.)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(.)45 b Ft(8)748 2742 y(3.2.2)93 b(Pip)s(elines)14 -b Fm(.)e(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +b Fm(.)h(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)44 b Ft(8)748 2852 y(3.2.3)93 b(Lists)29 -b(of)i(Commands)23 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)44 b Ft(8)748 2852 y(3.2.3)93 b(Lists)30 +b(of)h(Commands)23 b Fm(.)15 b(.)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(.) 54 b Ft(8)748 2961 y(3.2.4)93 b(Comp)s(ound)28 b(Commands)17 b Fm(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Ft(9)1047 3071 -y(3.2.4.1)93 b(Lo)s(oping)29 b(Constructs)d Fm(.)15 b(.)g(.)g(.)g(.)g +y(3.2.4.1)93 b(Lo)s(oping)30 b(Constructs)c Fm(.)15 b(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 -b Ft(9)1047 3181 y(3.2.4.2)93 b(Conditional)28 b(Constructs)18 +b Ft(9)1047 3181 y(3.2.4.2)93 b(Conditional)31 b(Constructs)18 b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 -b Ft(10)1047 3290 y(3.2.4.3)93 b(Grouping)29 b(Commands)13 +b Ft(10)1047 3290 y(3.2.4.3)93 b(Grouping)30 b(Commands)13 b Fm(.)h(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)42 b Ft(13)449 3400 y(3.3)92 b(Shell)28 b(F)-8 b(unctions)8 -b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +g(.)42 b Ft(13)449 3400 y(3.3)92 b(Shell)30 b(F)-8 b(unctions)8 +b Fm(.)16 b(.)f(.)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(.)38 b Ft(13)449 3509 y(3.4)92 -b(Shell)28 b(P)m(arameters)20 b Fm(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b(Shell)30 b(P)m(arameters)20 b Fm(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)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(.)49 b -Ft(14)748 3619 y(3.4.1)93 b(P)m(ositional)29 b(P)m(arameters)14 +Ft(14)748 3619 y(3.4.1)93 b(P)m(ositional)32 b(P)m(arameters)14 b Fm(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Ft(15)748 3729 -y(3.4.2)93 b(Sp)s(ecial)28 b(P)m(arameters)h Fm(.)15 +y(3.4.2)93 b(Sp)s(ecial)30 b(P)m(arameters)f Fm(.)15 b(.)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(.)57 b Ft(15)449 -3838 y(3.5)92 b(Shell)28 b(Expansions)20 b Fm(.)13 b(.)i(.)g(.)g(.)g(.) +3838 y(3.5)92 b(Shell)30 b(Expansions)20 b Fm(.)14 b(.)h(.)g(.)g(.)g(.) g(.)g(.)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(.)49 -b Ft(16)748 3948 y(3.5.1)93 b(Brace)31 b(Expansion)d +b Ft(16)748 3948 y(3.5.1)93 b(Brace)31 b(Expansion)e Fm(.)15 b(.)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(.)h(.)f(.)58 -b Ft(17)748 4057 y(3.5.2)93 b(Tilde)28 b(Expansion)17 -b Fm(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +b Ft(17)748 4057 y(3.5.2)93 b(Tilde)30 b(Expansion)17 +b Fm(.)e(.)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(.)47 -b Ft(17)748 4167 y(3.5.3)93 b(Shell)28 b(P)m(arameter)j(Expansion)18 -b Fm(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +b Ft(17)748 4167 y(3.5.3)93 b(Shell)30 b(P)m(arameter)h(Expansion)18 +b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)47 b Ft(18)748 4276 y(3.5.4)93 b(Command)29 -b(Substitution)d Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b(Substitution)f Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(21)748 -4386 y(3.5.5)93 b(Arithmetic)29 b(Expansion)12 b Fm(.)i(.)h(.)g(.)g(.)g +4386 y(3.5.5)93 b(Arithmetic)31 b(Expansion)12 b Fm(.)j(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)42 b Ft(21)748 4496 y(3.5.6)93 b(Pro)s(cess)30 -b(Substitution)19 b Fm(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 -b Ft(21)748 4605 y(3.5.7)93 b(W)-8 b(ord)30 b(Splitting)23 -b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b(Substitution)19 b Fm(.)c(.)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(.)49 +b Ft(21)748 4605 y(3.5.7)93 b(W)-8 b(ord)30 b(Splitting)c +Fm(.)15 b(.)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(.)55 -b Ft(22)748 4715 y(3.5.8)93 b(Filename)29 b(Expansion)24 +b Ft(22)748 4715 y(3.5.8)93 b(Filename)31 b(Expansion)25 b Fm(.)15 b(.)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(.)55 b Ft(22)1047 4824 y(3.5.8.1)93 b(P)m(attern)31 b(Matc)m(hing)20 b -Fm(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g +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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +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)22 +g(.)g(.)g(.)44 b Ft(24)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(24)748 5153 -y(3.6.1)93 b(Redirecting)29 b(Input)11 b Fm(.)j(.)h(.)g(.)g(.)g(.)g(.)g +y(3.6.1)93 b(Redirecting)31 b(Input)11 b Fm(.)j(.)h(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)40 b Ft(25)748 5263 y(3.6.2)93 b(Redirecting)29 +g(.)h(.)f(.)g(.)g(.)40 b Ft(25)748 5263 y(3.6.2)93 b(Redirecting)31 b(Output)18 b Fm(.)13 b(.)i(.)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(.)47 -b Ft(25)p eop +b Ft(25)p eop end %%Page: -2 4 --2 3 bop 150 -116 a Ft(ii)2610 b(Bash)31 b(Reference)g(Man)m(ual)748 -83 y(3.6.3)93 b(App)s(ending)27 b(Redirected)j(Output)16 -b Fm(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)45 b Ft(26)748 193 y(3.6.4)93 b(Redirecting)29 b(Standard)g(Output) -g(and)h(Standard)f(Error)954 302 y Fm(.)16 b(.)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(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)54 b Ft(26)748 412 y(3.6.5)93 b(Here)30 -b(Do)s(cumen)m(ts)13 b Fm(.)k(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +TeXDict begin -2 3 bop 150 -116 a Ft(ii)2612 b(Bash)31 +b(Reference)g(Man)m(ual)748 83 y(3.6.3)93 b(App)s(ending)28 +b(Redirected)j(Output)16 b Fm(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Ft(26)748 193 y(3.6.4)93 +b(Redirecting)31 b(Standard)e(Output)g(and)h(Standard)f(Error)954 +302 y Fm(.)16 b(.)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(.) -g(.)g(.)43 b Ft(26)748 521 y(3.6.6)93 b(Here)30 b(Strings)10 -b Fm(.)k(.)h(.)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(.)g(.)g(.)g -(.)39 b Ft(26)748 631 y(3.6.7)93 b(Duplicating)28 b(File)i(Descriptors) -17 b Fm(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)47 b Ft(27)748 741 y(3.6.8)93 b(Mo)m(ving)30 -b(File)g(Descriptors)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 +b Ft(26)748 412 y(3.6.5)93 b(Here)30 b(Do)s(cumen)m(ts)13 +b Fm(.)k(.)e(.)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(.)43 +b Ft(26)748 521 y(3.6.6)93 b(Here)30 b(Strings)10 b Fm(.)15 +b(.)g(.)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(.)g(.)g(.)g(.)39 +b Ft(26)748 631 y(3.6.7)93 b(Duplicating)31 b(File)h(Descriptors)17 +b Fm(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)47 b Ft(27)748 741 y(3.6.8)93 b(Mo)m(ving)31 +b(File)h(Descriptors)15 b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)44 -b Ft(27)748 850 y(3.6.9)93 b(Op)s(ening)28 b(File)h(Descriptors)h(for)g -(Reading)g(and)g(W)-8 b(riting)954 960 y Fm(.)16 b(.)f(.)g(.)g(.)g(.)g +b Ft(27)748 850 y(3.6.9)93 b(Op)s(ening)29 b(File)i(Descriptors)g(for)f +(Reading)h(and)f(W)-8 b(riting)954 960 y Fm(.)16 b(.)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(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Ft(27)449 1069 y(3.7)92 -b(Executing)30 b(Commands)25 b Fm(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +b(Executing)31 b(Commands)25 b Fm(.)15 b(.)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(.)56 b Ft(27)748 1179 y(3.7.1)93 -b(Simple)28 b(Command)h(Expansion)24 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b -Ft(27)748 1289 y(3.7.2)93 b(Command)29 b(Searc)m(h)i(and)e(Execution)13 -b Fm(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42 -b Ft(28)748 1398 y(3.7.3)93 b(Command)29 b(Execution)h(En)m(vironmen)m -(t)18 b Fm(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 +b(Simple)30 b(Command)f(Expansion)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Ft(27)748 +1289 y(3.7.2)93 b(Command)29 b(Searc)m(h)i(and)e(Execution)13 +b Fm(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)42 +b Ft(28)748 1398 y(3.7.3)93 b(Command)29 b(Execution)i(En)m(vironmen)m +(t)18 b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47 b Ft(29)748 1508 y(3.7.4)93 b(En)m(vironmen)m(t)21 b -Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)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(.) -50 b Ft(30)748 1617 y(3.7.5)93 b(Exit)29 b(Status)8 b +50 b Ft(30)748 1617 y(3.7.5)93 b(Exit)30 b(Status)8 b Fm(.)16 b(.)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(.)h(.) f(.)g(.)37 b Ft(30)748 1727 y(3.7.6)93 b(Signals)10 b -Fm(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)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(.)g(.)g(.)g(.)39 b Ft(31)449 1836 y(3.8)92 b(Shell)28 -b(Scripts)21 b Fm(.)14 b(.)h(.)g(.)g(.)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(.)51 +Fm(.)15 b(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)39 b Ft(31)449 1836 y(3.8)92 +b(Shell)30 b(Scripts)21 b Fm(.)15 b(.)g(.)g(.)g(.)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(.)51 b Ft(31)150 2079 y Fr(4)135 b(Shell)45 b(Builtin)g(Commands)38 b Fn(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h -(.)f(.)82 b Fr(33)449 2216 y Ft(4.1)92 b(Bourne)30 b(Shell)e(Builtins) -16 b Fm(.)c(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +(.)f(.)82 b Fr(33)449 2216 y Ft(4.1)92 b(Bourne)30 b(Shell)g(Builtins) +16 b Fm(.)f(.)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(.)45 b Ft(33)449 2325 y(4.2)92 b(Bash)30 b(Builtin)e(Commands)17 +g(.)45 b Ft(33)449 2325 y(4.2)92 b(Bash)30 b(Builtin)h(Commands)17 b Fm(.)d(.)h(.)g(.)g(.)g(.)g(.)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(.)46 -b Ft(39)449 2435 y(4.3)92 b(The)30 b(Set)g(Builtin)22 +b Ft(39)449 2435 y(4.3)92 b(The)30 b(Set)g(Builtin)25 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)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(.)g(.)g(.)g(.)g(.)53 b Ft(50)449 2545 y(4.4)92 -b(Sp)s(ecial)29 b(Builtins)22 b Fm(.)12 b(.)j(.)g(.)g(.)g(.)g(.)g(.)h +b(Sp)s(ecial)31 b(Builtins)22 b Fm(.)15 b(.)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(.)52 b Ft(53)150 2787 y Fr(5)135 b(Shell)45 b(V)-11 b(ariables)10 b Fn(.)21 b(.)e(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)55 b Fr(55)449 -2924 y Ft(5.1)92 b(Bourne)30 b(Shell)e(V)-8 b(ariables)11 -b Fm(.)k(.)g(.)g(.)g(.)g(.)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(.)40 -b Ft(55)449 3034 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)17 -b Fm(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +2924 y Ft(5.1)92 b(Bourne)30 b(Shell)g(V)-8 b(ariables)11 +b Fm(.)17 b(.)e(.)g(.)g(.)g(.)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(.) +40 b Ft(55)449 3034 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)17 +b Fm(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)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(.)g(.)g(.)g(.)g(.)46 b Ft(55)150 3276 y Fr(6)135 b(Bash)44 b(F)-11 b(eatures)31 b Fn(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h (.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) -g(.)h(.)75 b Fr(63)449 3413 y Ft(6.1)92 b(In)m(v)m(oking)30 -b(Bash)f Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +g(.)h(.)75 b Fr(63)449 3413 y Ft(6.1)92 b(In)m(v)m(oking)31 +b(Bash)e Fm(.)15 b(.)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(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(63)449 3523 -y(6.2)92 b(Bash)30 b(Startup)g(Files)24 b Fm(.)15 b(.)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(.)g(.)g(.)55 -b Ft(65)449 3632 y(6.3)92 b(In)m(teractiv)m(e)32 b(Shells)14 -b Fm(.)f(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +y(6.2)92 b(Bash)30 b(Startup)g(Files)c Fm(.)15 b(.)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(.)g(.)g(.)55 +b Ft(65)449 3632 y(6.3)92 b(In)m(teractiv)m(e)33 b(Shells)14 +b Fm(.)h(.)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(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)43 b Ft(67)748 3742 y(6.3.1)93 b(What)31 -b(is)e(an)h(In)m(teractiv)m(e)i(Shell?)20 b Fm(.)13 b(.)i(.)g(.)g(.)g +b(is)f(an)g(In)m(teractiv)m(e)j(Shell?)20 b Fm(.)15 b(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49 -b Ft(67)748 3851 y(6.3.2)93 b(Is)30 b(this)f(Shell)f(In)m(teractiv)m -(e?)10 b Fm(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b Ft(67)748 3851 y(6.3.2)93 b(Is)30 b(this)g(Shell)g(In)m(teractiv)m +(e?)10 b Fm(.)18 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Ft(67)748 -3961 y(6.3.3)93 b(In)m(teractiv)m(e)31 b(Shell)e(Beha)m(vior)22 -b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +3961 y(6.3.3)93 b(In)m(teractiv)m(e)32 b(Shell)f(Beha)m(vior)22 +b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)51 b Ft(67)449 4071 y(6.4)92 b(Bash)30 -b(Conditional)e(Expressions)20 b Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g +b(Conditional)h(Expressions)20 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)49 b Ft(68)449 4180 y(6.5)92 b(Shell)28 b(Arithmetic)f +f(.)49 b Ft(68)449 4180 y(6.5)92 b(Shell)30 b(Arithmetic)f Fm(.)15 b(.)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(.)g(.)h(.)f(.)g(.)57 b Ft(70)449 4290 y(6.6)92 b(Aliases)23 +g(.)g(.)h(.)f(.)g(.)57 b Ft(70)449 4290 y(6.6)92 b(Aliases)25 b Fm(.)15 b(.)g(.)g(.)g(.)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(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 @@ -2802,169 +4489,169 @@ b Ft(71)449 4399 y(6.7)92 b(Arra)m(ys)29 b Fm(.)15 b(.)g(.)g(.)g(.)g(.) g(.)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(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Ft(72)449 4509 y(6.8)92 -b(The)30 b(Directory)h(Stac)m(k)15 b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g +b(The)30 b(Directory)i(Stac)m(k)15 b Fm(.)h(.)f(.)g(.)g(.)g(.)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(.)g(.)44 b Ft(73)748 -4619 y(6.8.1)93 b(Directory)30 b(Stac)m(k)i(Builtins)10 -b Fm(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Ft(73)449 4728 y(6.9)92 -b(Con)m(trolling)28 b(the)j(Prompt)15 b Fm(.)g(.)g(.)g(.)g(.)g(.)g(.)g +4619 y(6.8.1)93 b(Directory)31 b(Stac)m(k)h(Builtins)10 +b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Ft(73)449 4728 y(6.9)92 +b(Con)m(trolling)31 b(the)g(Prompt)15 b Fm(.)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(.)h(.)f(.)g(.)g(.)g(.)44 b Ft(74)449 4838 y(6.10)92 -b(The)30 b(Restricted)h(Shell)11 b Fm(.)i(.)i(.)g(.)g(.)g(.)g(.)g(.)g +b(The)30 b(Restricted)i(Shell)11 b Fm(.)k(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)40 b Ft(76)449 4947 y(6.11)92 b(Bash)31 b(POSIX)e(Mo)s(de)16 b Fm(.)f(.)g(.)g(.)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(.)45 b -Ft(76)p eop +Ft(76)p eop end %%Page: -3 5 --3 4 bop 3674 -116 a Ft(iii)150 83 y Fr(7)135 b(Job)45 -b(Con)l(trol)32 b Fn(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.) -76 b Fr(79)449 220 y Ft(7.1)92 b(Job)30 b(Con)m(trol)g(Basics)23 -b Fm(.)15 b(.)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(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)52 b Ft(79)449 330 y(7.2)92 b(Job)30 b(Con)m(trol)g -(Builtins)12 b Fm(.)g(.)j(.)g(.)g(.)g(.)g(.)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(.)41 b Ft(80)449 439 y(7.3)92 b(Job)30 -b(Con)m(trol)g(V)-8 b(ariables)28 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)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(.)58 b Ft(81)150 682 -y Fr(8)135 b(Command)45 b(Line)g(Editing)38 b Fn(.)19 -b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)81 b Fr(83)449 819 y Ft(8.1)92 b(In)m(tro)s(duction)29 -b(to)i(Line)e(Editing)22 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) +TeXDict begin -3 4 bop 3674 -116 a Ft(iii)150 83 y Fr(7)135 +b(Job)45 b(Con)l(trol)32 b Fn(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.) +h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f +(.)h(.)f(.)76 b Fr(79)449 220 y Ft(7.1)92 b(Job)30 b(Con)m(trol)h +(Basics)23 b Fm(.)16 b(.)f(.)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(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)52 b Ft(79)449 330 y(7.2)92 b(Job)30 +b(Con)m(trol)h(Builtins)12 b Fm(.)j(.)g(.)g(.)g(.)g(.)g(.)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(.)41 b Ft(80)449 439 y(7.3)92 +b(Job)30 b(Con)m(trol)h(V)-8 b(ariables)30 b Fm(.)15 +b(.)g(.)g(.)g(.)g(.)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(.)58 +b Ft(81)150 682 y Fr(8)135 b(Command)45 b(Line)g(Editing)38 +b Fn(.)19 b(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h +(.)f(.)h(.)81 b Fr(83)449 819 y Ft(8.1)92 b(In)m(tro)s(duction)30 +b(to)h(Line)f(Editing)24 b Fm(.)15 b(.)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 -(.)53 b Ft(83)449 928 y(8.2)92 b(Readline)29 b(In)m(teraction)15 -b Fm(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +(.)53 b Ft(83)449 928 y(8.2)92 b(Readline)31 b(In)m(teraction)15 +b Fm(.)i(.)e(.)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(.)h(.)f(.)g(.)g(.)g -(.)g(.)44 b Ft(83)748 1038 y(8.2.1)93 b(Readline)29 b(Bare)i(Essen)m -(tials)23 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)44 b Ft(83)748 1038 y(8.2.1)93 b(Readline)31 b(Bare)g(Essen)m +(tials)25 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Ft(83)748 -1147 y(8.2.2)93 b(Readline)29 b(Mo)m(v)m(emen)m(t)j(Commands)13 +1147 y(8.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)h(Commands)13 b Fm(.)h(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -42 b Ft(84)748 1257 y(8.2.3)93 b(Readline)29 b(Killing)e(Commands)20 +42 b Ft(84)748 1257 y(8.2.3)93 b(Readline)31 b(Killing)g(Commands)20 b Fm(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)50 b Ft(84)748 1367 y(8.2.4)93 b(Readline)29 +(.)g(.)g(.)g(.)50 b Ft(84)748 1367 y(8.2.4)93 b(Readline)31 b(Argumen)m(ts)23 b Fm(.)15 b(.)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(.)53 -b Ft(85)748 1476 y(8.2.5)93 b(Searc)m(hing)29 b(for)i(Commands)e(in)g -(the)h(History)25 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 -b Ft(85)449 1586 y(8.3)92 b(Readline)29 b(Init)g(File)e +b Ft(85)748 1476 y(8.2.5)93 b(Searc)m(hing)30 b(for)h(Commands)e(in)h +(the)g(History)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 +b Ft(85)449 1586 y(8.3)92 b(Readline)31 b(Init)f(File)f Fm(.)15 b(.)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(.)h(.)f(.) -g(.)g(.)g(.)g(.)56 b Ft(86)748 1695 y(8.3.1)93 b(Readline)29 -b(Init)g(File)g(Syn)m(tax)12 b Fm(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g +g(.)g(.)g(.)g(.)56 b Ft(86)748 1695 y(8.3.1)93 b(Readline)31 +b(Init)f(File)h(Syn)m(tax)12 b Fm(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41 -b Ft(86)748 1805 y(8.3.2)93 b(Conditional)27 b(Init)j(Constructs)f +b Ft(86)748 1805 y(8.3.2)93 b(Conditional)30 b(Init)h(Constructs)e Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)59 b Ft(91)748 1914 y(8.3.3)93 b(Sample)29 -b(Init)g(File)21 b Fm(.)15 b(.)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(.)51 b Ft(92)449 2024 y(8.4)92 b(Bindable)29 b(Readline)g -(Commands)12 b Fm(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41 -b Ft(95)748 2134 y(8.4.1)93 b(Commands)29 b(F)-8 b(or)31 -b(Mo)m(ving)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Ft(95)748 -2243 y(8.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)d(The)i -(History)18 b Fm(.)d(.)g(.)g(.)g(.)g(.)g(.)47 b Ft(95)748 -2353 y(8.4.3)93 b(Commands)29 b(F)-8 b(or)31 b(Changing)e(T)-8 -b(ext)30 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)58 b Ft(96)748 2462 y(8.4.4)93 b(Killing)27 -b(And)i(Y)-8 b(anking)17 b Fm(.)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(.)46 -b Ft(98)748 2572 y(8.4.5)93 b(Sp)s(ecifying)27 b(Numeric)j(Argumen)m +(.)g(.)g(.)g(.)59 b Ft(91)748 1914 y(8.3.3)93 b(Sample)30 +b(Init)g(File)21 b Fm(.)c(.)e(.)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(.)51 b Ft(92)449 2024 y(8.4)92 b(Bindable)31 b(Readline)g(Commands)12 +b Fm(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)41 b Ft(95)748 +2134 y(8.4.1)93 b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)d +Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56 b Ft(95)748 2243 y(8.4.2)93 +b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f(History)18 +b Fm(.)e(.)f(.)g(.)g(.)g(.)g(.)47 b Ft(95)748 2353 y(8.4.3)93 +b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)30 +b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f +(.)58 b Ft(96)748 2462 y(8.4.4)93 b(Killing)31 b(And)e(Y)-8 +b(anking)17 b Fm(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)46 +b Ft(98)748 2572 y(8.4.5)93 b(Sp)s(ecifying)29 b(Numeric)i(Argumen)m (ts)25 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)54 b Ft(99)748 2682 y(8.4.6)93 b(Letting)30 -b(Readline)f(T)m(yp)s(e)h(F)-8 b(or)31 b(Y)-8 b(ou)19 +(.)g(.)g(.)54 b Ft(99)748 2682 y(8.4.6)93 b(Letting)31 +b(Readline)g(T)m(yp)s(e)f(F)-8 b(or)31 b(Y)-8 b(ou)19 b Fm(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) 49 b Ft(99)748 2791 y(8.4.7)93 b(Keyb)s(oard)29 b(Macros)10 b Fm(.)16 b(.)f(.)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(.)40 -b Ft(100)748 2901 y(8.4.8)93 b(Some)30 b(Miscellaneous)f(Commands)12 +b Ft(100)748 2901 y(8.4.8)93 b(Some)30 b(Miscellaneous)i(Commands)12 b Fm(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)42 -b Ft(101)449 3010 y(8.5)92 b(Readline)29 b(vi)g(Mo)s(de)d +b Ft(101)449 3010 y(8.5)92 b(Readline)31 b(vi)f(Mo)s(de)c Fm(.)15 b(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)55 b Ft(103)449 3120 y(8.6)92 b(Programmable)30 -b(Completion)12 b Fm(.)h(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)55 b Ft(103)449 3120 y(8.6)92 b(Programmable)31 +b(Completion)12 b Fm(.)j(.)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(.)41 -b Ft(103)449 3230 y(8.7)92 b(Programmable)30 b(Completion)f(Builtins)12 -b Fm(.)g(.)j(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +b Ft(103)449 3230 y(8.7)92 b(Programmable)31 b(Completion)g(Builtins)12 +b Fm(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)42 b Ft(105)150 3472 y Fr(9)135 b(Using)45 b(History)h(In)l(teractiv)l(ely)14 b Fn(.)22 b(.)d(.)h(.)f(.)g(.)h(.)f (.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)58 b Fr(109)449 3609 y -Ft(9.1)92 b(Bash)30 b(History)g(F)-8 b(acilities)11 b -Fm(.)k(.)g(.)g(.)g(.)g(.)g(.)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(.)41 -b Ft(109)449 3719 y(9.2)92 b(Bash)30 b(History)g(Builtins)9 -b Fm(.)k(.)i(.)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(.)h(.)f(.)38 -b Ft(109)449 3828 y(9.3)92 b(History)30 b(Expansion)d +Ft(9.1)92 b(Bash)30 b(History)h(F)-8 b(acilities)11 b +Fm(.)19 b(.)c(.)g(.)g(.)g(.)g(.)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(.)41 +b Ft(109)449 3719 y(9.2)92 b(Bash)30 b(History)h(Builtins)9 +b Fm(.)16 b(.)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(.)h(.)f(.) +38 b Ft(109)449 3828 y(9.3)92 b(History)31 b(Expansion)d Fm(.)15 b(.)g(.)g(.)g(.)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(.) g(.)g(.)58 b Ft(111)748 3938 y(9.3.1)93 b(Ev)m(en)m(t)31 -b(Designators)21 b Fm(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 -b Ft(111)748 4047 y(9.3.2)93 b(W)-8 b(ord)30 b(Designators)f +b(Designators)21 b Fm(.)c(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 +b Ft(111)748 4047 y(9.3.2)93 b(W)-8 b(ord)30 b(Designators)g Fm(.)15 b(.)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(.)58 b Ft(112)748 -4157 y(9.3.3)93 b(Mo)s(di\014ers)26 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g +4157 y(9.3.3)93 b(Mo)s(di\014ers)27 b Fm(.)15 b(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)57 b Ft(113)150 4399 y Fr(10)135 b(Installing)46 b(Bash)30 b Fn(.)20 b(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f (.)h(.)f(.)g(.)h(.)f(.)h(.)74 b Fr(115)449 4536 y Ft(10.1)92 -b(Basic)31 b(Installation)26 b Fm(.)15 b(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Ft(115)449 -4646 y(10.2)92 b(Compilers)28 b(and)i(Options)22 b Fm(.)14 -b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b(Basic)32 b(Installation)d Fm(.)15 b(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Ft(115)449 4646 +y(10.2)92 b(Compilers)30 b(and)g(Options)22 b Fm(.)15 +b(.)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(.)h(.)51 -b Ft(115)449 4755 y(10.3)92 b(Compiling)28 b(F)-8 b(or)31 -b(Multiple)d(Arc)m(hitectures)12 b Fm(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g +b Ft(115)449 4755 y(10.3)92 b(Compiling)31 b(F)-8 b(or)31 +b(Multiple)g(Arc)m(hitectures)12 b Fm(.)k(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)41 b Ft(116)449 -4865 y(10.4)92 b(Installation)29 b(Names)22 b Fm(.)16 +4865 y(10.4)92 b(Installation)32 b(Names)22 b Fm(.)16 b(.)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(.)h(.)f(.)g(.)g(.)51 -b Ft(116)449 4975 y(10.5)92 b(Sp)s(ecifying)28 b(the)j(System)f(T)m(yp) +b Ft(116)449 4975 y(10.5)92 b(Sp)s(ecifying)30 b(the)h(System)f(T)m(yp) s(e)11 b Fm(.)k(.)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(.)41 b Ft(116)449 -5084 y(10.6)92 b(Sharing)29 b(Defaults)21 b Fm(.)15 b(.)g(.)g(.)g(.)g +5084 y(10.6)92 b(Sharing)30 b(Defaults)21 b Fm(.)16 b(.)f(.)g(.)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(.)51 -b Ft(117)449 5194 y(10.7)92 b(Op)s(eration)29 b(Con)m(trols)12 -b Fm(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +b Ft(117)449 5194 y(10.7)92 b(Op)s(eration)30 b(Con)m(trols)12 +b Fm(.)k(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)41 b Ft(117)449 5303 y(10.8)92 b(Optional)29 b(F)-8 +(.)41 b Ft(117)449 5303 y(10.8)92 b(Optional)31 b(F)-8 b(eatures)17 b Fm(.)g(.)e(.)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(.)g(.) -g(.)g(.)g(.)g(.)g(.)47 b Ft(117)p eop +g(.)g(.)g(.)g(.)g(.)47 b Ft(117)p eop end %%Page: -4 6 --4 5 bop 150 -116 a Ft(iv)2588 b(Bash)31 b(Reference)g(Man)m(ual)150 -83 y Fr(App)t(endix)44 b(A)99 b(Rep)t(orting)46 b(Bugs)12 -b Fn(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.) -56 b Fr(123)150 353 y(App)t(endix)44 b(B)105 b(Ma)7 b(jor)46 -b(Di\013erences)g(F)-11 b(rom)45 b(The)f(Bourne)419 486 -y(Shell)17 b Fn(.)j(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g -(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.) -f(.)h(.)f(.)61 b Fr(125)449 623 y Ft(B.1)92 b(Implemen)m(tation)29 -b(Di\013erences)i(F)-8 b(rom)31 b(The)f(SVR4.2)h(Shell)21 -b Fm(.)13 b(.)i(.)g(.)g(.)50 b Ft(129)150 865 y Fr(App)t(endix)44 -b(C)104 b(Cop)l(ying)46 b(This)e(Man)l(ual)27 b Fn(.)20 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)71 b Fr(131)449 1002 -y Ft(C.1)91 b(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)f(License)26 -b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)56 b Ft(131)748 1112 y(C.1.1)92 b(ADDENDUM:)32 -b(Ho)m(w)f(to)h(use)e(this)f(License)h(for)g(y)m(our)930 -1221 y(do)s(cumen)m(ts)c Fm(.)15 b(.)g(.)g(.)g(.)g(.)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(.)g(.)g(.)56 b Ft(137)150 1464 -y Fr(Index)45 b(of)g(Shell)g(Builtin)h(Commands)27 b -Fn(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)71 +TeXDict begin -4 5 bop 150 -116 a Ft(iv)2589 b(Bash)31 +b(Reference)g(Man)m(ual)150 83 y Fr(App)t(endix)44 b(A)99 +b(Rep)t(orting)46 b(Bugs)12 b Fn(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f +(.)h(.)f(.)g(.)h(.)f(.)h(.)56 b Fr(123)150 353 y(App)t(endix)44 +b(B)105 b(Ma)7 b(jor)46 b(Di\013erences)g(F)-11 b(rom)45 +b(The)f(Bourne)419 486 y(Shell)17 b Fn(.)j(.)f(.)h(.)f(.)h(.)f(.)g(.)h +(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) +h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)61 b Fr(125)449 623 +y Ft(B.1)92 b(Implemen)m(tation)31 b(Di\013erences)h(F)-8 +b(rom)31 b(The)f(SVR4.2)h(Shell)21 b Fm(.)15 b(.)g(.)g(.)g(.)50 +b Ft(129)150 865 y Fr(App)t(endix)44 b(C)104 b(Cop)l(ying)46 +b(This)e(Man)l(ual)27 b Fn(.)20 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)71 +b Fr(131)449 1002 y Ft(C.1)91 b(GNU)31 b(F)-8 b(ree)32 +b(Do)s(cumen)m(tation)g(License)27 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)56 +b Ft(131)748 1112 y(C.1.1)92 b(ADDENDUM:)32 b(Ho)m(w)f(to)h(use)e(this) +g(License)h(for)f(y)m(our)930 1221 y(do)s(cumen)m(ts)c +Fm(.)15 b(.)g(.)g(.)g(.)g(.)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(.)g(.)g(.)56 b Ft(137)150 1464 y Fr(Index)45 b(of)g(Shell)g(Builtin)h +(Commands)27 b Fn(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)71 b Fr(139)150 1733 y(Index)45 b(of)g(Shell)g(Reserv)l(ed)h(W)-11 b(ords)41 b Fn(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h (.)85 b Fr(141)150 2003 y(P)l(arameter)47 b(and)d(V)-11 @@ -2974,582 +4661,583 @@ b(Index)36 b Fn(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h (.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)80 b Fr(145)150 2543 y(Concept)45 b(Index)18 b Fn(.)i(.)f(.)h(.)f(.)g(.)h (.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.) -h(.)f(.)g(.)h(.)f(.)h(.)62 b Fr(147)p eop +h(.)f(.)g(.)h(.)f(.)h(.)62 b Fr(147)p eop end %%Page: 1 7 -1 6 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2591 -b(1)150 299 y Fo(1)80 b(In)l(tro)t(duction)150 675 y -Fr(1.1)68 b(What)45 b(is)g(Bash?)275 923 y Ft(Bash)29 -b(is)g(the)g(shell,)g(or)g(command)g(language)h(in)m(terpreter,)g(for)f -(the)h Fl(gnu)f Ft(op)s(erating)g(system.)40 b(The)150 -1033 y(name)33 b(is)f(an)h(acron)m(ym)g(for)g(the)g(`)p +TeXDict begin 1 6 bop 150 -116 a Ft(Chapter)30 b(1:)41 +b(In)m(tro)s(duction)2592 b(1)150 299 y Fo(1)80 b(In)l(tro)t(duction) +150 675 y Fr(1.1)68 b(What)45 b(is)g(Bash?)275 923 y +Ft(Bash)29 b(is)h(the)f(shell,)i(or)e(command)g(language)i(in)m +(terpreter,)g(for)e(the)h Fl(gnu)f Ft(op)s(erating)h(system.)40 +b(The)150 1033 y(name)33 b(is)g(an)g(acron)m(ym)g(for)g(the)g(`)p Fs(Bourne-Again)27 b(SHell)p Ft(',)32 b(a)i(pun)d(on)i(Stephen)f -(Bourne,)h(the)g(author)150 1142 y(of)f(the)f(direct)g(ancestor)i(of)e -(the)h(curren)m(t)f(Unix)f(shell)g Fs(sh)p Ft(,)h(whic)m(h)f(app)s -(eared)h(in)f(the)i(Sev)m(en)m(th)g(Edition)150 1252 -y(Bell)e(Labs)g(Researc)m(h)h(v)m(ersion)f(of)g(Unix.)275 -1391 y(Bash)f(is)f(largely)h(compatible)f(with)g Fs(sh)h -Ft(and)g(incorp)s(orates)f(useful)g(features)h(from)g(the)g(Korn)g -(shell)150 1500 y Fs(ksh)37 b Ft(and)h(the)g(C)g(shell)e -Fs(csh)p Ft(.)64 b(It)38 b(is)f(in)m(tended)g(to)i(b)s(e)f(a)g -(conforman)m(t)h(implemen)m(tation)e(of)h(the)g Fl(ieee)150 -1610 y(posix)44 b Ft(Shell)f(and)i(T)-8 b(o)s(ols)45 -b(sp)s(eci\014cation)e(\()p Fl(ieee)i Ft(W)-8 b(orking)46 -b(Group)e(1003.2\).)88 b(It)45 b(o\013ers)h(functional)150 -1719 y(impro)m(v)m(emen)m(ts)31 b(o)m(v)m(er)g Fs(sh)f -Ft(for)g(b)s(oth)g(in)m(teractiv)m(e)h(and)f(programming)f(use.)275 -1858 y(While)g(the)i Fl(gnu)f Ft(op)s(erating)g(system)h(pro)m(vides)e -(other)i(shells,)e(including)e(a)k(v)m(ersion)f(of)h -Fs(csh)p Ft(,)f(Bash)150 1968 y(is)i(the)i(default)e(shell.)47 -b(Lik)m(e)33 b(other)h Fl(gnu)f Ft(soft)m(w)m(are,)i(Bash)f(is)e(quite) -h(p)s(ortable.)48 b(It)33 b(curren)m(tly)f(runs)g(on)150 -2077 y(nearly)27 b(ev)m(ery)h(v)m(ersion)f(of)g(Unix)g(and)f(a)i(few)f -(other)h(op)s(erating)f(systems)g Fp(\000)g Ft(indep)s(enden)m -(tly-supp)s(orted)150 2187 y(p)s(orts)j(exist)g(for)g -Fl(ms-dos)p Ft(,)f Fl(os/2)p Ft(,)i(and)f(Windo)m(ws)f(platforms.)150 +(Bourne,)h(the)g(author)150 1142 y(of)f(the)f(direct)h(ancestor)h(of)e +(the)h(curren)m(t)f(Unix)g(shell)h Fs(sh)p Ft(,)f(whic)m(h)g(app)s +(eared)g(in)g(the)h(Sev)m(en)m(th)g(Edition)150 1252 +y(Bell)g(Labs)e(Researc)m(h)h(v)m(ersion)g(of)f(Unix.)275 +1391 y(Bash)f(is)g(largely)i(compatible)f(with)f Fs(sh)g +Ft(and)g(incorp)s(orates)g(useful)g(features)g(from)g(the)g(Korn)g +(shell)150 1500 y Fs(ksh)37 b Ft(and)h(the)g(C)g(shell)g +Fs(csh)p Ft(.)64 b(It)38 b(is)g(in)m(tended)g(to)h(b)s(e)f(a)g +(conforman)m(t)h(implemen)m(tation)h(of)e(the)g Fl(ieee)150 +1610 y(posix)44 b Ft(Shell)h(and)g(T)-8 b(o)s(ols)46 +b(sp)s(eci\014cation)f(\()p Fl(ieee)g Ft(W)-8 b(orking)47 +b(Group)d(1003.2\).)88 b(It)45 b(o\013ers)h(functional)150 +1719 y(impro)m(v)m(emen)m(ts)32 b(o)m(v)m(er)f Fs(sh)f +Ft(for)g(b)s(oth)g(in)m(teractiv)m(e)j(and)d(programming)g(use.)275 +1858 y(While)h(the)g Fl(gnu)f Ft(op)s(erating)h(system)g(pro)m(vides)f +(other)h(shells,)g(including)f(a)h(v)m(ersion)g(of)g +Fs(csh)p Ft(,)f(Bash)150 1968 y(is)j(the)h(default)f(shell.)49 +b(Lik)m(e)34 b(other)g Fl(gnu)f Ft(soft)m(w)m(are,)i(Bash)f(is)f(quite) +h(p)s(ortable.)49 b(It)33 b(curren)m(tly)g(runs)f(on)150 +2077 y(nearly)c(ev)m(ery)g(v)m(ersion)g(of)f(Unix)h(and)e(a)i(few)f +(other)h(op)s(erating)g(systems)f Fp(\000)g Ft(indep)s(enden)m +(tly-supp)s(orted)150 2187 y(p)s(orts)j(exist)h(for)f +Fl(ms-dos)p Ft(,)f Fl(os/2)p Ft(,)i(and)f(Windo)m(ws)g(platforms.)150 2455 y Fr(1.2)68 b(What)45 b(is)g(a)h(shell?)275 2703 -y Ft(A)m(t)41 b(its)e(base,)k(a)e(shell)d(is)h(simply)f(a)j(macro)f +y Ft(A)m(t)41 b(its)f(base,)j(a)e(shell)f(is)g(simply)g(a)h(macro)f (pro)s(cessor)g(that)h(executes)g(commands.)70 b(The)40 -b(term)150 2813 y(macro)29 b(pro)s(cessor)f(means)g(functionalit)m(y)f -(where)h(text)i(and)e(sym)m(b)s(ols)f(are)h(expanded)g(to)h(create)h -(larger)150 2922 y(expressions.)275 3061 y(A)k(Unix)g(shell)f(is)g(b)s -(oth)h(a)h(command)g(in)m(terpreter)f(and)g(a)h(programming)e -(language.)54 b(As)35 b(a)g(com-)150 3170 y(mand)30 b(in)m(terpreter,)h -(the)h(shell)d(pro)m(vides)h(the)i(user)e(in)m(terface)i(to)g(the)f -(ric)m(h)g(set)h(of)f Fl(gnu)g Ft(utilities.)40 b(The)150 -3280 y(programming)25 b(language)i(features)g(allo)m(w)f(these)h -(utilitites)d(to)j(b)s(e)f(com)m(bined.)39 b(Files)25 -b(con)m(taining)h(com-)150 3390 y(mands)j(can)i(b)s(e)e(created,)j(and) -d(b)s(ecome)i(commands)f(themselv)m(es.)41 b(These)30 +b(term)150 2813 y(macro)29 b(pro)s(cessor)f(means)g(functionalit)m(y)i +(where)e(text)i(and)e(sym)m(b)s(ols)g(are)g(expanded)g(to)h(create)h +(larger)150 2922 y(expressions.)275 3061 y(A)k(Unix)h(shell)g(is)f(b)s +(oth)g(a)h(command)g(in)m(terpreter)g(and)f(a)h(programming)f +(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) +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)f(directories)g(suc)m(h)h(as)g(`)p -Fs(/bin)p Ft(',)g(allo)m(wing)f(users)g(or)h(groups)f(to)150 -3609 y(establish)f(custom)h(en)m(vironmen)m(ts)g(to)h(automate)h(their) -e(common)g(tasks.)275 3748 y(Shells)h(ma)m(y)j(b)s(e)f(used)g(in)m -(teractiv)m(ely)h(or)g(non-in)m(teractiv)m(ely)-8 b(.)51 -b(In)33 b(in)m(teractiv)m(e)h(mo)s(de,)h(they)e(accept)150 -3857 y(input)20 b(t)m(yp)s(ed)i(from)g(the)h(k)m(eyb)s(oard.)37 -b(When)22 b(executing)h(non-in)m(teractiv)m(ely)-8 b(,)24 -b(shells)d(execute)i(commands)150 3967 y(read)30 b(from)g(a)h(\014le.) -275 4105 y(A)41 b(shell)e(allo)m(ws)h(execution)i(of)f -Fl(gnu)g Ft(commands,)i(b)s(oth)e(sync)m(hronously)e(and)i(async)m -(hronously)-8 b(.)150 4215 y(The)29 b(shell)e(w)m(aits)j(for)f(sync)m -(hronous)f(commands)h(to)h(complete)g(b)s(efore)f(accepting)g(more)h -(input;)e(asyn-)150 4325 y(c)m(hronous)22 b(commands)h(con)m(tin)m(ue)g -(to)g(execute)h(in)d(parallel)g(with)h(the)g(shell)f(while)g(it)h -(reads)h(and)f(executes)150 4434 y(additional)32 b(commands.)50 -b(The)33 b Fq(redirection)f Ft(constructs)i(p)s(ermit)e(\014ne-grained) -g(con)m(trol)i(of)g(the)g(input)150 4544 y(and)40 b(output)f(of)i -(those)f(commands.)70 b(Moreo)m(v)m(er,)45 b(the)c(shell)d(allo)m(ws)h -(con)m(trol)i(o)m(v)m(er)h(the)e(con)m(ten)m(ts)i(of)150 -4653 y(commands')30 b(en)m(vironmen)m(ts.)275 4792 y(Shells)i(also)j -(pro)m(vide)g(a)g(small)f(set)h(of)g(built-in)d(commands)j(\()p -Fq(builtins)t Ft(\))d(implemen)m(ting)h(function-)150 -4902 y(alit)m(y)j(imp)s(ossible)d(or)j(incon)m(v)m(enien)m(t)h(to)g -(obtain)f(via)g(separate)h(utilities.)57 b(F)-8 b(or)37 -b(example,)h Fs(cd)p Ft(,)f Fs(break)p Ft(,)150 5011 +(system)g(commands)g(in)g(directories)h(suc)m(h)f(as)g(`)p +Fs(/bin)p Ft(',)g(allo)m(wing)i(users)d(or)h(groups)f(to)150 +3609 y(establish)h(custom)f(en)m(vironmen)m(ts)h(to)g(automate)h(their) +f(common)f(tasks.)275 3748 y(Shells)j(ma)m(y)h(b)s(e)f(used)g(in)m +(teractiv)m(ely)k(or)d(non-in)m(teractiv)m(ely)-8 b(.)54 +b(In)33 b(in)m(teractiv)m(e)j(mo)s(de,)f(they)e(accept)150 +3857 y(input)21 b(t)m(yp)s(ed)h(from)g(the)h(k)m(eyb)s(oard.)37 +b(When)22 b(executing)i(non-in)m(teractiv)m(ely)-8 b(,)27 +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 +(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) +g(con)m(trol)i(of)f(the)g(input)150 4544 y(and)40 b(output)f(of)i +(those)f(commands.)70 b(Moreo)m(v)m(er,)45 b(the)c(shell)f(allo)m(ws)h +(con)m(trol)h(o)m(v)m(er)g(the)e(con)m(ten)m(ts)i(of)150 +4653 y(commands')30 b(en)m(vironmen)m(ts.)275 4792 y(Shells)k(also)i +(pro)m(vide)g(a)f(small)h(set)f(of)g(built-in)g(commands)g(\()p +Fq(builtins)t Ft(\))g(implemen)m(ting)h(function-)150 +4902 y(alit)m(y)i(imp)s(ossible)e(or)g(incon)m(v)m(enien)m(t)j(to)e +(obtain)g(via)g(separate)g(utilities.)61 b(F)-8 b(or)37 +b(example,)i Fs(cd)p Ft(,)e Fs(break)p Ft(,)150 5011 y Fs(continue)p Ft(,)43 b(and)f Fs(exec)p Ft(\))g(cannot)h(b)s(e)e -(implemen)m(ted)g(outside)h(of)g(the)h(shell)d(b)s(ecause)j(they)f -(directly)150 5121 y(manipulate)35 b(the)i(shell)d(itself.)59 +(implemen)m(ted)i(outside)g(of)f(the)h(shell)f(b)s(ecause)h(they)f +(directly)150 5121 y(manipulate)37 b(the)g(shell)f(itself.)61 b(The)36 b Fs(history)p Ft(,)g Fs(getopts)p Ft(,)g Fs(kill)p -Ft(,)h(or)g Fs(pwd)f Ft(builtins,)e(among)k(others,)150 -5230 y(could)32 b(b)s(e)g(implemen)m(ted)f(in)h(separate)h(utilities,)e -(but)h(they)h(are)h(more)f(con)m(v)m(enien)m(t)g(to)h(use)e(as)h -(builtin)150 5340 y(commands.)40 b(All)29 b(of)i(the)f(shell)f -(builtins)e(are)k(describ)s(ed)d(in)h(subsequen)m(t)h(sections.)p -eop +Ft(,)h(or)g Fs(pwd)f Ft(builtins,)h(among)h(others,)150 +5230 y(could)33 b(b)s(e)f(implemen)m(ted)h(in)g(separate)g(utilities,)i +(but)d(they)h(are)h(more)f(con)m(v)m(enien)m(t)h(to)g(use)e(as)h +(builtin)150 5340 y(commands.)40 b(All)31 b(of)g(the)f(shell)h +(builtins)f(are)h(describ)s(ed)e(in)h(subsequen)m(t)g(sections.)p +eop end %%Page: 2 8 -2 7 bop 150 -116 a Ft(2)2617 b(Bash)31 b(Reference)g(Man)m(ual)275 -299 y(While)37 b(executing)i(commands)f(is)f(essen)m(tial,)k(most)e(of) -g(the)g(p)s(o)m(w)m(er)f(\(and)g(complexit)m(y\))h(of)g(shells)150 -408 y(is)33 b(due)g(to)i(their)e(em)m(b)s(edded)g(programming)g -(languages.)51 b(Lik)m(e)34 b(an)m(y)g(high-lev)m(el)f(language,)j(the) -e(shell)150 518 y(pro)m(vides)29 b(v)-5 b(ariables,)30 -b(\015o)m(w)g(con)m(trol)h(constructs,)g(quoting,)f(and)g(functions.) -275 653 y(Shells)19 b(o\013er)k(features)f(geared)h(sp)s(eci\014cally)d -(for)i(in)m(teractiv)m(e)h(use)f(rather)g(than)g(to)h(augmen)m(t)g(the) -f(pro-)150 762 y(gramming)31 b(language.)47 b(These)32 -b(in)m(teractiv)m(e)h(features)f(include)e(job)i(con)m(trol,)i(command) -d(line)g(editing,)150 872 y(command)f(history)f(and)h(aliases.)40 -b(Eac)m(h)31 b(of)g(these)g(features)f(is)g(describ)s(ed)e(in)h(this)g -(man)m(ual.)p eop +TeXDict begin 2 7 bop 150 -116 a Ft(2)2617 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(While)39 b(executing)h(commands)e(is) +g(essen)m(tial,)43 b(most)c(of)g(the)g(p)s(o)m(w)m(er)f(\(and)g +(complexit)m(y\))j(of)e(shells)150 408 y(is)34 b(due)f(to)i(their)f(em) +m(b)s(edded)f(programming)h(languages.)52 b(Lik)m(e)35 +b(an)m(y)f(high-lev)m(el)i(language,)h(the)d(shell)150 +518 y(pro)m(vides)c(v)-5 b(ariables,)32 b(\015o)m(w)e(con)m(trol)i +(constructs,)f(quoting,)g(and)f(functions.)275 653 y(Shells)21 +b(o\013er)i(features)f(geared)h(sp)s(eci\014cally)g(for)f(in)m +(teractiv)m(e)j(use)d(rather)g(than)g(to)h(augmen)m(t)g(the)f(pro-)150 +762 y(gramming)32 b(language.)48 b(These)32 b(in)m(teractiv)m(e)j +(features)d(include)g(job)g(con)m(trol,)j(command)c(line)i(editing,)150 +872 y(command)d(history)g(and)g(aliases.)42 b(Eac)m(h)31 +b(of)g(these)g(features)f(is)h(describ)s(ed)e(in)h(this)g(man)m(ual.)p +eop end %%Page: 3 9 -3 8 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(De\014nitions)2660 -b(3)150 299 y Fo(2)80 b(De\014nitions)275 527 y Ft(These)30 -b(de\014nitions)e(are)i(used)g(throughout)g(the)g(remainder)f(of)i -(this)e(man)m(ual.)150 684 y Fs(POSIX)240 b Ft(A)41 b(family)e(of)i(op) -s(en)g(system)g(standards)f(based)g(on)h(Unix.)71 b(Bash)41 -b(is)f(concerned)h(with)630 794 y Fl(posix)30 b Ft(1003.2,)j(the)d -(Shell)f(and)g(T)-8 b(o)s(ols)30 b(Standard.)150 950 -y Fs(blank)240 b Ft(A)30 b(space)h(or)g(tab)f(c)m(haracter.)150 -1107 y Fs(builtin)144 b Ft(A)35 b(command)g(that)g(is)f(implemen)m(ted) -f(in)m(ternally)g(b)m(y)i(the)g(shell)e(itself,)i(rather)f(than)h(b)m -(y)630 1217 y(an)30 b(executable)h(program)f(somewhere)h(in)e(the)h -(\014le)g(system.)150 1374 y Fs(control)e(operator)630 -1484 y Ft(A)c Fs(word)e Ft(that)i(p)s(erforms)f(a)h(con)m(trol)g -(function.)37 b(It)24 b(is)e(a)i Fs(newline)e Ft(or)i(one)g(of)f(the)h -(follo)m(wing:)630 1593 y(`)p Fs(||)p Ft(',)31 b(`)p -Fs(&&)p Ft(',)f(`)p Fs(&)p Ft(',)h(`)p Fs(;)p Ft(',)g(`)p -Fs(;;)p Ft(',)f(`)p Fs(|)p Ft(',)h(`)p Fs(\()p Ft(',)g(or)f(`)p -Fs(\))p Ft('.)150 1750 y Fs(exit)f(status)630 1860 y -Ft(The)f(v)-5 b(alue)28 b(returned)f(b)m(y)h(a)h(command)f(to)h(its)f -(caller.)39 b(The)28 b(v)-5 b(alue)28 b(is)f(restricted)h(to)i(eigh)m -(t)630 1969 y(bits,)g(so)g(the)h(maxim)m(um)e(v)-5 b(alue)30 -b(is)f(255.)150 2126 y Fs(field)240 b Ft(A)27 b(unit)f(of)h(text)h -(that)g(is)e(the)h(result)f(of)h(one)h(of)f(the)g(shell)e(expansions.) -39 b(After)27 b(expansion,)630 2236 y(when)e(executing)g(a)h(command,)h -(the)f(resulting)d(\014elds)h(are)i(used)f(as)h(the)g(command)f(name) -630 2346 y(and)30 b(argumen)m(ts.)150 2503 y Fs(filename)96 -b Ft(A)30 b(string)g(of)g(c)m(haracters)i(used)e(to)h(iden)m(tify)e(a)h -(\014le.)150 2659 y Fs(job)336 b Ft(A)31 b(set)h(of)f(pro)s(cesses)g -(comprising)e(a)i(pip)s(eline,)d(and)j(an)m(y)g(pro)s(cesses)g -(descended)g(from)f(it,)630 2769 y(that)h(are)g(all)e(in)g(the)i(same)f -(pro)s(cess)g(group.)150 2926 y Fs(job)f(control)630 -3036 y Ft(A)22 b(mec)m(hanism)f(b)m(y)g(whic)m(h)g(users)g(can)h -(selectiv)m(ely)f(stop)h(\(susp)s(end\))e(and)h(restart)i(\(resume\)) -630 3145 y(execution)31 b(of)f(pro)s(cesses.)150 3302 -y Fs(metacharacter)630 3412 y Ft(A)25 b(c)m(haracter)i(that,)g(when)d -(unquoted,)i(separates)g(w)m(ords.)38 b(A)26 b(metac)m(haracter)i(is)c -(a)h Fs(blank)630 3521 y Ft(or)30 b(one)h(of)g(the)f(follo)m(wing)f(c)m -(haracters:)42 b(`)p Fs(|)p Ft(',)31 b(`)p Fs(&)p Ft(',)g(`)p -Fs(;)p Ft(',)g(`)p Fs(\()p Ft(',)f(`)p Fs(\))p Ft(',)h(`)p -Fs(<)p Ft(',)g(or)f(`)p Fs(>)p Ft('.)150 3678 y Fs(name)288 -b Ft(A)37 b Fs(word)f Ft(consisting)g(solely)h(of)g(letters,)i(n)m(um)m -(b)s(ers,)f(and)f(underscores,)h(and)f(b)s(eginning)630 -3788 y(with)22 b(a)h(letter)g(or)g(underscore.)38 b Fs(Name)p -Ft(s)22 b(are)h(used)f(as)i(shell)d(v)-5 b(ariable)22 -b(and)g(function)g(names.)630 3898 y(Also)30 b(referred)g(to)h(as)f(an) -h Fs(identifier)p Ft(.)150 4055 y Fs(operator)96 b Ft(A)38 -b Fs(control)28 b(operator)36 b Ft(or)h(a)i Fs(redirection)27 -b(operator)p Ft(.)61 b(See)38 b(Section)f(3.6)i([Redirec-)630 -4164 y(tions],)30 b(page)h(24,)h(for)e(a)h(list)e(of)h(redirection)f -(op)s(erators.)150 4321 y Fs(process)f(group)630 4431 -y Ft(A)i(collection)h(of)f(related)g(pro)s(cesses)h(eac)m(h)g(ha)m -(ving)f(the)h(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)f(iden)m(tifer) -g(that)i(represen)m(ts)f(a)h Fs(process)d(group)h Ft(during)f(its)i -(lifetime.)150 4854 y Fs(reserved)e(word)630 4964 y Ft(A)h -Fs(word)e Ft(that)i(has)f(a)h(sp)s(ecial)e(meaning)g(to)i(the)g(shell.) -38 b(Most)30 b(reserv)m(ed)e(w)m(ords)g(in)m(tro)s(duce)630 -5073 y(shell)h(\015o)m(w)h(con)m(trol)h(constructs,)g(suc)m(h)f(as)g +TeXDict begin 3 8 bop 150 -116 a Ft(Chapter)30 b(2:)41 +b(De\014nitions)2662 b(3)150 299 y Fo(2)80 b(De\014nitions)275 +527 y Ft(These)30 b(de\014nitions)g(are)g(used)g(throughout)g(the)g +(remainder)g(of)h(this)f(man)m(ual.)150 684 y Fs(POSIX)240 +b Ft(A)41 b(family)g(of)g(op)s(en)g(system)g(standards)f(based)g(on)h +(Unix.)72 b(Bash)41 b(is)g(concerned)g(with)630 794 y +Fl(posix)30 b Ft(1003.2,)j(the)d(Shell)h(and)e(T)-8 b(o)s(ols)31 +b(Standard.)150 950 y Fs(blank)240 b Ft(A)30 b(space)h(or)g(tab)f(c)m +(haracter.)150 1107 y Fs(builtin)144 b Ft(A)35 b(command)g(that)g(is)g +(implemen)m(ted)g(in)m(ternally)h(b)m(y)f(the)g(shell)g(itself,)i +(rather)d(than)h(b)m(y)630 1217 y(an)30 b(executable)i(program)e +(somewhere)h(in)f(the)g(\014le)h(system.)150 1374 y Fs(control)d +(operator)630 1484 y Ft(A)c Fs(word)e Ft(that)i(p)s(erforms)f(a)h(con)m +(trol)h(function.)38 b(It)24 b(is)f(a)h Fs(newline)e +Ft(or)i(one)g(of)f(the)h(follo)m(wing:)630 1593 y(`)p +Fs(||)p Ft(',)31 b(`)p Fs(&&)p Ft(',)f(`)p Fs(&)p Ft(',)h(`)p +Fs(;)p Ft(',)g(`)p Fs(;;)p Ft(',)f(`)p Fs(|)p Ft(',)h(`)p +Fs(\()p Ft(',)g(or)f(`)p Fs(\))p Ft('.)150 1750 y Fs(exit)f(status)630 +1860 y Ft(The)f(v)-5 b(alue)29 b(returned)e(b)m(y)h(a)h(command)f(to)h +(its)g(caller.)41 b(The)28 b(v)-5 b(alue)29 b(is)f(restricted)h(to)h +(eigh)m(t)630 1969 y(bits,)h(so)f(the)h(maxim)m(um)f(v)-5 +b(alue)31 b(is)f(255.)150 2126 y Fs(field)240 b Ft(A)27 +b(unit)g(of)g(text)h(that)g(is)f(the)g(result)g(of)g(one)h(of)f(the)g +(shell)g(expansions.)40 b(After)27 b(expansion,)630 2236 +y(when)e(executing)h(a)g(command,)h(the)f(resulting)f(\014elds)g(are)h +(used)f(as)h(the)g(command)f(name)630 2346 y(and)30 b(argumen)m(ts.)150 +2503 y Fs(filename)96 b Ft(A)30 b(string)h(of)f(c)m(haracters)i(used)e +(to)h(iden)m(tify)g(a)f(\014le.)150 2659 y Fs(job)336 +b Ft(A)31 b(set)h(of)f(pro)s(cesses)g(comprising)g(a)g(pip)s(eline,)g +(and)g(an)m(y)g(pro)s(cesses)g(descended)g(from)f(it,)630 +2769 y(that)h(are)g(all)g(in)f(the)h(same)f(pro)s(cess)g(group.)150 +2926 y Fs(job)f(control)630 3036 y Ft(A)22 b(mec)m(hanism)g(b)m(y)f +(whic)m(h)h(users)f(can)h(selectiv)m(ely)i(stop)e(\(susp)s(end\))e(and) +h(restart)i(\(resume\))630 3145 y(execution)32 b(of)e(pro)s(cesses.)150 +3302 y Fs(metacharacter)630 3412 y Ft(A)25 b(c)m(haracter)i(that,)g +(when)d(unquoted,)i(separates)g(w)m(ords.)38 b(A)26 b(metac)m(haracter) +i(is)d(a)g Fs(blank)630 3521 y Ft(or)30 b(one)h(of)g(the)f(follo)m +(wing)i(c)m(haracters:)42 b(`)p Fs(|)p Ft(',)31 b(`)p +Fs(&)p Ft(',)g(`)p Fs(;)p Ft(',)g(`)p Fs(\()p Ft(',)f(`)p +Fs(\))p Ft(',)h(`)p Fs(<)p Ft(',)g(or)f(`)p Fs(>)p Ft('.)150 +3678 y Fs(name)288 b Ft(A)37 b Fs(word)f Ft(consisting)i(solely)h(of)e +(letters,)j(n)m(um)m(b)s(ers,)e(and)f(underscores,)h(and)f(b)s +(eginning)630 3788 y(with)23 b(a)g(letter)h(or)f(underscore.)38 +b Fs(Name)p Ft(s)22 b(are)h(used)f(as)i(shell)f(v)-5 +b(ariable)24 b(and)e(function)h(names.)630 3898 y(Also)31 +b(referred)f(to)h(as)f(an)h Fs(identifier)p Ft(.)150 +4055 y Fs(operator)96 b Ft(A)38 b Fs(control)28 b(operator)36 +b Ft(or)h(a)i Fs(redirection)27 b(operator)p Ft(.)61 +b(See)38 b(Section)g(3.6)h([Redirec-)630 4164 y(tions],)31 +b(page)g(24,)h(for)e(a)h(list)g(of)f(redirection)h(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 5340 y Ft(A)h(synon)m(ym)g(for)g Fs(exit)g(status)p Ft(.)p -eop +eop end %%Page: 4 10 -4 9 bop 150 -116 a Ft(4)2617 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fs(signal)192 b Ft(A)40 b(mec)m(hanism)g(b)m(y)f(whic)m(h)g(a)i -(pro)s(cess)e(ma)m(y)i(b)s(e)e(noti\014ed)g(b)m(y)h(the)h(k)m(ernel)e -(of)h(an)g(ev)m(en)m(t)630 408 y(o)s(ccurring)29 b(in)g(the)i(system.) -150 568 y Fs(special)d(builtin)630 677 y Ft(A)e(shell)f(builtin)e -(command)j(that)h(has)f(b)s(een)f(classi\014ed)g(as)h(sp)s(ecial)f(b)m -(y)h(the)h Fl(posix)e Ft(1003.2)630 787 y(standard.)150 -946 y Fs(token)240 b Ft(A)38 b(sequence)h(of)f(c)m(haracters)h -(considered)e(a)i(single)e(unit)f(b)m(y)i(the)h(shell.)62 -b(It)38 b(is)f(either)h(a)630 1056 y Fs(word)29 b Ft(or)i(an)f -Fs(operator)p Ft(.)150 1215 y Fs(word)288 b Ft(A)30 b -Fs(token)f Ft(that)i(is)f(not)g(an)h Fs(operator)p Ft(.)p -eop +TeXDict begin 4 9 bop 150 -116 a Ft(4)2617 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(signal)192 b Ft(A)40 +b(mec)m(hanism)h(b)m(y)e(whic)m(h)h(a)h(pro)s(cess)e(ma)m(y)i(b)s(e)e +(noti\014ed)h(b)m(y)g(the)h(k)m(ernel)f(of)g(an)g(ev)m(en)m(t)630 +408 y(o)s(ccurring)30 b(in)g(the)h(system.)150 568 y +Fs(special)d(builtin)630 677 y Ft(A)e(shell)h(builtin)f(command)g(that) +h(has)f(b)s(een)f(classi\014ed)i(as)f(sp)s(ecial)h(b)m(y)f(the)h +Fl(posix)e Ft(1003.2)630 787 y(standard.)150 946 y Fs(token)240 +b Ft(A)38 b(sequence)h(of)f(c)m(haracters)h(considered)f(a)h(single)g +(unit)e(b)m(y)h(the)h(shell.)64 b(It)38 b(is)g(either)h(a)630 +1056 y Fs(word)29 b Ft(or)i(an)f Fs(operator)p Ft(.)150 +1215 y Fs(word)288 b Ft(A)30 b Fs(token)f Ft(that)i(is)g(not)f(an)h +Fs(operator)p Ft(.)p eop end %%Page: 5 11 -5 10 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2292 b(5)150 299 y Fo(3)80 b(Basic)55 -b(Shell)f(F)-13 b(eatures)275 544 y Ft(Bash)27 b(is)f(an)h(acron)m(ym)h -(for)f(`)p Fs(Bourne-Again)g(SHell)p Ft('.)39 b(The)26 -b(Bourne)h(shell)f(is)g(the)h(traditional)f(Unix)150 -653 y(shell)32 b(originally)f(written)h(b)m(y)h(Stephen)g(Bourne.)50 -b(All)32 b(of)i(the)f(Bourne)h(shell)d(builtin)f(commands)k(are)150 -763 y(a)m(v)-5 b(ailable)29 b(in)e(Bash,)j(The)f(rules)f(for)h(ev)-5 -b(aluation)29 b(and)f(quoting)h(are)g(tak)m(en)i(from)d(the)i -Fl(posix)e Ft(sp)s(eci\014ca-)150 872 y(tion)i(for)g(the)h(`standard')f -(Unix)f(shell.)275 1010 y(This)h(c)m(hapter)j(brie\015y)d(summarizes)h -(the)i(shell's)d(`building)f(blo)s(c)m(ks':)44 b(commands,)32 -b(con)m(trol)h(struc-)150 1120 y(tures,)38 b(shell)c(functions,)i -(shell)f Fm(p)-5 b(ar)g(ameters)p Ft(,)41 b(shell)34 -b(expansions,)j Fm(r)-5 b(e)g(dir)g(e)g(ctions)p Ft(,)40 -b(whic)m(h)35 b(are)i(a)f(w)m(a)m(y)h(to)150 1230 y(direct)30 -b(input)e(and)i(output)g(from)g(and)g(to)h(named)f(\014les,)f(and)h(ho) -m(w)g(the)h(shell)e(executes)i(commands.)150 1496 y Fr(3.1)68 -b(Shell)45 b(Syn)l(tax)275 1744 y Ft(When)32 b(the)h(shell)e(reads)i -(input,)f(it)g(pro)s(ceeds)g(through)h(a)g(sequence)g(of)g(op)s -(erations.)47 b(If)33 b(the)g(input)150 1853 y(indicates)c(the)h(b)s -(eginning)d(of)j(a)g(commen)m(t,)h(the)f(shell)e(ignores)h(the)h -(commen)m(t)h(sym)m(b)s(ol)e(\(`)p Fs(#)p Ft('\),)i(and)e(the)150 -1963 y(rest)i(of)f(that)h(line.)275 2101 y(Otherwise,)g(roughly)f(sp)s -(eaking,)i(the)g(shell)e(reads)i(its)f(input)f(and)i(divides)d(the)k -(input)d(in)m(to)h(w)m(ords)150 2210 y(and)23 b(op)s(erators,)j(emplo)m -(ying)c(the)i(quoting)g(rules)e(to)i(select)h(whic)m(h)d(meanings)h(to) -i(assign)e(v)-5 b(arious)22 b(w)m(ords)150 2320 y(and)30 -b(c)m(haracters.)275 2458 y(The)38 b(shell)f(then)h(parses)g(these)h -(tok)m(ens)h(in)m(to)e(commands)h(and)f(other)h(constructs,)i(remo)m(v) -m(es)f(the)150 2568 y(sp)s(ecial)29 b(meaning)g(of)h(certain)g(w)m -(ords)g(or)g(c)m(haracters,)i(expands)d(others,)h(redirects)g(input)e -(and)h(output)150 2677 y(as)d(needed,)g(executes)g(the)g(sp)s -(eci\014ed)d(command,)k(w)m(aits)e(for)g(the)g(command's)g(exit)h -(status,)g(and)f(mak)m(es)150 2787 y(that)31 b(exit)f(status)h(a)m(v)-5 -b(ailable)30 b(for)g(further)f(insp)s(ection)f(or)j(pro)s(cessing.)150 +TeXDict begin 5 10 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(5)150 299 +y Fo(3)80 b(Basic)54 b(Shell)e(F)-13 b(eatures)275 544 +y Ft(Bash)27 b(is)g(an)g(acron)m(ym)h(for)f(`)p Fs(Bourne-Again)g +(SHell)p Ft('.)39 b(The)26 b(Bourne)h(shell)h(is)f(the)g(traditional)i +(Unix)150 653 y(shell)34 b(originally)h(written)e(b)m(y)g(Stephen)g +(Bourne.)50 b(All)34 b(of)g(the)f(Bourne)h(shell)f(builtin)g(commands)h +(are)150 763 y(a)m(v)-5 b(ailable)32 b(in)c(Bash,)i(The)f(rules)g(for)g +(ev)-5 b(aluation)31 b(and)d(quoting)i(are)f(tak)m(en)i(from)d(the)i +Fl(posix)e Ft(sp)s(eci\014ca-)150 872 y(tion)j(for)f(the)h(`standard')f +(Unix)g(shell.)275 1010 y(This)h(c)m(hapter)i(brie\015y)e(summarizes)h +(the)h(shell's)f(`building)g(blo)s(c)m(ks':)45 b(commands,)32 +b(con)m(trol)i(struc-)150 1120 y(tures,)k(shell)e(functions,)h(shell)g +Fm(p)-5 b(ar)g(ameters)p Ft(,)41 b(shell)36 b(expansions,)i +Fm(r)-5 b(e)g(dir)g(e)g(ctions)p Ft(,)40 b(whic)m(h)c(are)h(a)f(w)m(a)m +(y)h(to)150 1230 y(direct)31 b(input)e(and)h(output)g(from)g(and)g(to)h +(named)f(\014les,)g(and)g(ho)m(w)g(the)h(shell)g(executes)g(commands.) +150 1496 y Fr(3.1)68 b(Shell)45 b(Syn)l(tax)275 1744 +y Ft(When)32 b(the)h(shell)g(reads)g(input,)g(it)g(pro)s(ceeds)f +(through)h(a)g(sequence)g(of)g(op)s(erations.)48 b(If)33 +b(the)g(input)150 1853 y(indicates)e(the)f(b)s(eginning)f(of)h(a)g +(commen)m(t,)h(the)f(shell)g(ignores)g(the)g(commen)m(t)h(sym)m(b)s(ol) +f(\(`)p Fs(#)p Ft('\),)h(and)e(the)150 1963 y(rest)i(of)f(that)h(line.) +275 2101 y(Otherwise,)h(roughly)f(sp)s(eaking,)i(the)f(shell)g(reads)g +(its)g(input)f(and)h(divides)f(the)i(input)e(in)m(to)h(w)m(ords)150 +2210 y(and)23 b(op)s(erators,)j(emplo)m(ying)e(the)g(quoting)h(rules)e +(to)h(select)i(whic)m(h)d(meanings)h(to)h(assign)f(v)-5 +b(arious)23 b(w)m(ords)150 2320 y(and)30 b(c)m(haracters.)275 +2458 y(The)38 b(shell)h(then)f(parses)g(these)h(tok)m(ens)h(in)m(to)f +(commands)g(and)f(other)h(constructs,)i(remo)m(v)m(es)f(the)150 +2568 y(sp)s(ecial)31 b(meaning)f(of)g(certain)h(w)m(ords)f(or)g(c)m +(haracters,)i(expands)d(others,)h(redirects)h(input)e(and)g(output)150 +2677 y(as)d(needed,)g(executes)g(the)g(sp)s(eci\014ed)e(command,)j(w)m +(aits)f(for)f(the)g(command's)g(exit)i(status,)f(and)f(mak)m(es)150 +2787 y(that)31 b(exit)g(status)g(a)m(v)-5 b(ailable)33 +b(for)d(further)f(insp)s(ection)h(or)h(pro)s(cessing.)150 3018 y Fk(3.1.1)63 b(Shell)41 b(Op)s(eration)275 3266 -y Ft(The)28 b(follo)m(wing)f(is)h(a)h(brief)e(description)g(of)i(the)g -(shell's)e(op)s(eration)i(when)e(it)i(reads)f(and)g(executes)j(a)150 -3375 y(command.)40 b(Basically)-8 b(,)31 b(the)f(shell)f(do)s(es)h(the) -h(follo)m(wing:)199 3513 y(1.)61 b(Reads)42 b(its)g(input)e(from)i(a)g -(\014le)g(\(see)h(Section)f(3.8)h([Shell)d(Scripts],)k(page)f(31\),)k -(from)41 b(a)i(string)330 3623 y(supplied)24 b(as)k(an)f(argumen)m(t)g -(to)h(the)g(`)p Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)g(option)g(\(see)h -(Section)g(6.1)g([In)m(v)m(oking)f(Bash],)330 3732 y(page)k(63\),)h(or) +y Ft(The)28 b(follo)m(wing)i(is)f(a)g(brief)f(description)h(of)g(the)g +(shell's)g(op)s(eration)h(when)d(it)j(reads)e(and)g(executes)j(a)150 +3375 y(command.)40 b(Basically)-8 b(,)34 b(the)c(shell)h(do)s(es)f(the) +h(follo)m(wing:)199 3513 y(1.)61 b(Reads)42 b(its)h(input)e(from)h(a)g +(\014le)h(\(see)g(Section)g(3.8)g([Shell)f(Scripts],)j(page)e(31\),)k +(from)41 b(a)i(string)330 3623 y(supplied)26 b(as)i(an)f(argumen)m(t)g +(to)h(the)g(`)p Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)i(option)f(\(see)g +(Section)h(6.1)f([In)m(v)m(oking)g(Bash],)330 3732 y(page)j(63\),)h(or) e(from)g(the)h(user's)f(terminal.)199 3869 y(2.)61 b(Breaks)43 -b(the)g(input)e(in)m(to)h(w)m(ords)g(and)g(op)s(erators,)k(ob)s(eying)c -(the)h(quoting)f(rules)f(describ)s(ed)f(in)330 3978 y(Section)26 -b(3.1.2)j([Quoting],)e(page)g(6.)40 b(These)26 b(tok)m(ens)i(are)f +b(the)g(input)f(in)m(to)h(w)m(ords)f(and)g(op)s(erators,)k(ob)s(eying)d +(the)g(quoting)g(rules)f(describ)s(ed)f(in)330 3978 y(Section)27 +b(3.1.2)i([Quoting],)f(page)f(6.)40 b(These)26 b(tok)m(ens)i(are)f (separated)g(b)m(y)f Fs(metacharacters)p Ft(.)36 b(Alias)330 -4088 y(expansion)29 b(is)h(p)s(erformed)e(b)m(y)j(this)e(step)h(\(see)i -(Section)e(6.6)h([Aliases],)g(page)g(71\).)199 4224 y(3.)61 -b(P)m(arses)35 b(the)g(tok)m(ens)g(in)m(to)g(simple)d(and)i(comp)s -(ound)f(commands)h(\(see)h(Section)g(3.2)g([Shell)e(Com-)330 -4334 y(mands],)d(page)h(8\).)199 4470 y(4.)61 b(P)m(erforms)40 -b(the)h(v)-5 b(arious)39 b(shell)g(expansions)g(\(see)i(Section)f(3.5)h -([Shell)e(Expansions],)i(page)g(16\),)330 4580 y(breaking)34 -b(the)h(expanded)g(tok)m(ens)h(in)m(to)f(lists)e(of)i(\014lenames)g -(\(see)h(Section)e(3.5.8)j([Filename)e(Ex-)330 4689 y(pansion],)29 -b(page)i(22\))h(and)e(commands)g(and)g(argumen)m(ts.)199 -4826 y(5.)61 b(P)m(erforms)36 b(an)m(y)i(necessary)f(redirections)e -(\(see)j(Section)e(3.6)i([Redirections],)g(page)g(24\))g(and)e(re-)330 -4935 y(mo)m(v)m(es)c(the)e(redirection)f(op)s(erators)i(and)f(their)f -(op)s(erands)g(from)h(the)h(argumen)m(t)f(list.)199 5071 -y(6.)61 b(Executes)31 b(the)g(command)f(\(see)h(Section)f(3.7)i -([Executing)e(Commands],)g(page)h(28\).)199 5208 y(7.)61 -b(Optionally)37 b(w)m(aits)i(for)g(the)g(command)g(to)h(complete)f(and) -g(collects)g(its)g(exit)g(status)g(\(see)h(Sec-)330 5317 -y(tion)30 b(3.7.5)i([Exit)e(Status],)h(page)g(30\).)p -eop +4088 y(expansion)30 b(is)h(p)s(erformed)d(b)m(y)j(this)f(step)g(\(see)i +(Section)f(6.6)g([Aliases],)i(page)e(71\).)199 4224 y(3.)61 +b(P)m(arses)35 b(the)g(tok)m(ens)g(in)m(to)h(simple)e(and)g(comp)s +(ound)f(commands)h(\(see)h(Section)h(3.2)f([Shell)g(Com-)330 +4334 y(mands],)30 b(page)h(8\).)199 4470 y(4.)61 b(P)m(erforms)40 +b(the)h(v)-5 b(arious)40 b(shell)h(expansions)f(\(see)h(Section)g(3.5)g +([Shell)g(Expansions],)h(page)f(16\),)330 4580 y(breaking)35 +b(the)g(expanded)g(tok)m(ens)h(in)m(to)g(lists)f(of)g(\014lenames)h +(\(see)g(Section)f(3.5.8)i([Filename)g(Ex-)330 4689 y(pansion],)30 +b(page)h(22\))h(and)e(commands)g(and)g(argumen)m(ts.)199 +4826 y(5.)61 b(P)m(erforms)36 b(an)m(y)i(necessary)f(redirections)g +(\(see)h(Section)f(3.6)h([Redirections],)i(page)e(24\))g(and)e(re-)330 +4935 y(mo)m(v)m(es)c(the)e(redirection)h(op)s(erators)g(and)f(their)g +(op)s(erands)f(from)h(the)h(argumen)m(t)f(list.)199 5071 +y(6.)61 b(Executes)31 b(the)g(command)f(\(see)h(Section)g(3.7)h +([Executing)f(Commands],)f(page)h(28\).)199 5208 y(7.)61 +b(Optionally)40 b(w)m(aits)g(for)f(the)g(command)g(to)h(complete)g(and) +f(collects)i(its)f(exit)g(status)f(\(see)h(Sec-)330 5317 +y(tion)31 b(3.7.5)h([Exit)f(Status],)g(page)g(30\).)p +eop end %%Page: 6 12 -6 11 bop 150 -116 a Ft(6)2617 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fk(3.1.2)63 b(Quoting)275 543 y Ft(Quoting)23 b(is)g(used)g(to)h -(remo)m(v)m(e)i(the)e(sp)s(ecial)e(meaning)h(of)h(certain)g(c)m -(haracters)i(or)d(w)m(ords)h(to)g(the)g(shell.)150 653 -y(Quoting)j(can)g(b)s(e)g(used)f(to)j(disable)c(sp)s(ecial)h(treatmen)m -(t)j(for)e(sp)s(ecial)f(c)m(haracters,)k(to)e(prev)m(en)m(t)g(reserv)m -(ed)150 762 y(w)m(ords)i(from)g(b)s(eing)f(recognized)h(as)h(suc)m(h,)f -(and)g(to)h(prev)m(en)m(t)g(parameter)g(expansion.)275 -897 y(Eac)m(h)22 b(of)g(the)g(shell)e(metac)m(haracters)k(\(see)f -(Chapter)e(2)i([De\014nitions],)f(page)h(3\))g(has)e(sp)s(ecial)g -(meaning)150 1006 y(to)40 b(the)g(shell)d(and)i(m)m(ust)g(b)s(e)g -(quoted)g(if)g(it)g(is)f(to)i(represen)m(t)g(itself.)66 -b(When)39 b(the)h(command)f(history)150 1116 y(expansion)e(facilities)g -(are)h(b)s(eing)f(used,)j(the)e Fq(history)g(expansion)f -Ft(c)m(haracter,)42 b(usually)36 b(`)p Fs(!)p Ft(',)k(m)m(ust)f(b)s(e) -150 1225 y(quoted)27 b(to)g(prev)m(en)m(t)g(history)e(expansion.)38 -b(See)27 b(Section)f(9.1)i([Bash)e(History)g(F)-8 b(acilities],)27 -b(page)g(109,)i(for)150 1335 y(more)i(details)e(concerning)h(history)f -(expansion.)275 1469 y(There)37 b(are)h(three)f(quoting)g(mec)m -(hanisms:)55 b(the)38 b Fq(escap)s(e)g(c)m(haracter)p -Ft(,)j(single)36 b(quotes,)k(and)d(double)150 1579 y(quotes.)150 +TeXDict begin 6 11 bop 150 -116 a Ft(6)2617 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fk(3.1.2)63 b(Quoting)275 +543 y Ft(Quoting)24 b(is)g(used)f(to)h(remo)m(v)m(e)i(the)e(sp)s(ecial) +g(meaning)g(of)g(certain)h(c)m(haracters)h(or)d(w)m(ords)h(to)g(the)g +(shell.)150 653 y(Quoting)k(can)f(b)s(e)g(used)f(to)j(disable)e(sp)s +(ecial)h(treatmen)m(t)h(for)e(sp)s(ecial)h(c)m(haracters,)i(to)e(prev)m +(en)m(t)g(reserv)m(ed)150 762 y(w)m(ords)i(from)g(b)s(eing)g +(recognized)h(as)g(suc)m(h,)f(and)g(to)h(prev)m(en)m(t)g(parameter)g +(expansion.)275 897 y(Eac)m(h)22 b(of)g(the)g(shell)g(metac)m +(haracters)i(\(see)f(Chapter)e(2)i([De\014nitions],)h(page)f(3\))g(has) +e(sp)s(ecial)i(meaning)150 1006 y(to)40 b(the)g(shell)f(and)g(m)m(ust)g +(b)s(e)g(quoted)g(if)h(it)g(is)f(to)h(represen)m(t)g(itself.)68 +b(When)39 b(the)h(command)f(history)150 1116 y(expansion)f(facilities)j +(are)d(b)s(eing)g(used,)i(the)e Fq(history)h(expansion)f +Ft(c)m(haracter,)k(usually)c(`)p Fs(!)p Ft(',)i(m)m(ust)f(b)s(e)150 +1225 y(quoted)27 b(to)g(prev)m(en)m(t)g(history)f(expansion.)39 +b(See)27 b(Section)g(9.1)h([Bash)e(History)h(F)-8 b(acilities],)31 +b(page)c(109,)i(for)150 1335 y(more)i(details)g(concerning)g(history)f +(expansion.)275 1469 y(There)37 b(are)h(three)f(quoting)h(mec)m +(hanisms:)56 b(the)38 b Fq(escap)s(e)g(c)m(haracter)p +Ft(,)j(single)d(quotes,)i(and)d(double)150 1579 y(quotes.)150 1803 y Fk(3.1.2.1)63 b(Escap)s(e)41 b(Character)275 2047 -y Ft(A)27 b(non-quoted)g(bac)m(kslash)g(`)p Fs(\\)p Ft(')g(is)f(the)i +y Ft(A)27 b(non-quoted)g(bac)m(kslash)h(`)p Fs(\\)p Ft(')f(is)g(the)h (Bash)f(escap)s(e)g(c)m(haracter.)42 b(It)27 b(preserv)m(es)g(the)g -(literal)f(v)-5 b(alue)27 b(of)150 2157 y(the)g(next)g(c)m(haracter)h -(that)f(follo)m(ws,)g(with)e(the)i(exception)f(of)h Fs(newline)p -Ft(.)38 b(If)26 b(a)h Fs(\\newline)d Ft(pair)h(app)s(ears,)150 -2267 y(and)30 b(the)h(bac)m(kslash)f(itself)f(is)h(not)h(quoted,)g(the) -f Fs(\\newline)f Ft(is)g(treated)j(as)f(a)g(line)e(con)m(tin)m(uation)h -(\(that)150 2376 y(is,)g(it)g(is)f(remo)m(v)m(ed)i(from)f(the)h(input)d -(stream)j(and)f(e\013ectiv)m(ely)h(ignored\).)150 2600 -y Fk(3.1.2.2)63 b(Single)42 b(Quotes)275 2844 y Ft(Enclosing)34 -b(c)m(haracters)k(in)c(single)h(quotes)i(\(`)p Fs(')p -Ft('\))f(preserv)m(es)h(the)f(literal)e(v)-5 b(alue)36 -b(of)g(eac)m(h)h(c)m(haracter)150 2954 y(within)22 b(the)j(quotes.)39 -b(A)25 b(single)f(quote)h(ma)m(y)g(not)g(o)s(ccur)g(b)s(et)m(w)m(een)g -(single)f(quotes,)i(ev)m(en)g(when)d(preceded)150 3064 +(literal)i(v)-5 b(alue)28 b(of)150 2157 y(the)f(next)g(c)m(haracter)h +(that)f(follo)m(ws,)i(with)d(the)h(exception)g(of)g Fs(newline)p +Ft(.)38 b(If)26 b(a)h Fs(\\newline)d Ft(pair)i(app)s(ears,)150 +2267 y(and)k(the)h(bac)m(kslash)g(itself)g(is)g(not)g(quoted,)g(the)f +Fs(\\newline)f Ft(is)h(treated)i(as)f(a)g(line)g(con)m(tin)m(uation)h +(\(that)150 2376 y(is,)f(it)g(is)f(remo)m(v)m(ed)h(from)f(the)h(input)e +(stream)i(and)f(e\013ectiv)m(ely)j(ignored\).)150 2600 +y Fk(3.1.2.2)63 b(Single)42 b(Quotes)275 2844 y Ft(Enclosing)36 +b(c)m(haracters)i(in)d(single)i(quotes)g(\(`)p Fs(')p +Ft('\))f(preserv)m(es)h(the)f(literal)h(v)-5 b(alue)37 +b(of)f(eac)m(h)h(c)m(haracter)150 2954 y(within)24 b(the)h(quotes.)39 +b(A)25 b(single)h(quote)f(ma)m(y)g(not)g(o)s(ccur)g(b)s(et)m(w)m(een)g +(single)h(quotes,)g(ev)m(en)g(when)d(preceded)150 3064 y(b)m(y)30 b(a)h(bac)m(kslash.)150 3288 y Fk(3.1.2.3)63 -b(Double)42 b(Quotes)275 3532 y Ft(Enclosing)34 b(c)m(haracters)k(in)d -(double)g(quotes)i(\(`)p Fs(")p Ft('\))g(preserv)m(es)f(the)g(literal)f -(v)-5 b(alue)36 b(of)g(all)f(c)m(haracters)150 3641 y(within)30 -b(the)j(quotes,)h(with)d(the)i(exception)g(of)f(`)p Fs($)p +b(Double)42 b(Quotes)275 3532 y Ft(Enclosing)36 b(c)m(haracters)i(in)e +(double)g(quotes)h(\(`)p Fs(")p Ft('\))g(preserv)m(es)f(the)g(literal)i +(v)-5 b(alue)37 b(of)f(all)h(c)m(haracters)150 3641 y(within)32 +b(the)h(quotes,)h(with)e(the)h(exception)h(of)e(`)p Fs($)p Ft(',)i(`)p Fs(`)p Ft(',)f(and)f(`)p Fs(\\)p Ft('.)48 b(The)32 b(c)m(haracters)i(`)p Fs($)p Ft(')f(and)f(`)p -Fs(`)p Ft(')g(retain)150 3751 y(their)j(sp)s(ecial)g(meaning)h(within)e -(double)h(quotes)i(\(see)g(Section)f(3.5)h([Shell)e(Expansions],)h -(page)h(16\).)150 3861 y(The)30 b(bac)m(kslash)g(retains)f(its)h(sp)s -(ecial)f(meaning)g(only)h(when)f(follo)m(w)m(ed)h(b)m(y)g(one)h(of)f -(the)h(follo)m(wing)d(c)m(har-)150 3970 y(acters:)54 +Fs(`)p Ft(')g(retain)150 3751 y(their)k(sp)s(ecial)h(meaning)g(within)f +(double)g(quotes)h(\(see)g(Section)g(3.5)g([Shell)g(Expansions],)g +(page)g(16\).)150 3861 y(The)30 b(bac)m(kslash)h(retains)f(its)h(sp)s +(ecial)g(meaning)f(only)h(when)e(follo)m(w)m(ed)j(b)m(y)e(one)h(of)f +(the)h(follo)m(wing)g(c)m(har-)150 3970 y(acters:)54 b(`)p Fs($)p Ft(',)39 b(`)p Fs(`)p Ft(',)g(`)p Fs(")p Ft(',)g(`)p Fs(\\)p Ft(',)f(or)f Fs(newline)p Ft(.)58 -b(Within)35 b(double)g(quotes,)k(bac)m(kslashes)e(that)g(are)g(follo)m +b(Within)37 b(double)f(quotes,)j(bac)m(kslashes)f(that)f(are)g(follo)m (w)m(ed)150 4080 y(b)m(y)28 b(one)g(of)g(these)g(c)m(haracters)i(are)e -(remo)m(v)m(ed.)41 b(Bac)m(kslashes)29 b(preceding)e(c)m(haracters)i -(without)e(a)h(sp)s(ecial)150 4189 y(meaning)i(are)i(left)e(unmo)s -(di\014ed.)40 b(A)31 b(double)f(quote)h(ma)m(y)h(b)s(e)e(quoted)i -(within)c(double)i(quotes)h(b)m(y)g(pre-)150 4299 y(ceding)k(it)g(with) -f(a)i(bac)m(kslash.)55 b(When)36 b(command)f(history)f(is)h(b)s(eing)f -(used,)i(the)f(double)f(quote)i(ma)m(y)150 4408 y(not)31 -b(b)s(e)e(used)h(to)h(quote)g(the)g(history)e(expansion)g(c)m -(haracter.)275 4543 y(The)41 b(sp)s(ecial)f(parameters)h(`)p -Fs(*)p Ft(')h(and)f(`)p Fs(@)p Ft(')h(ha)m(v)m(e)g(sp)s(ecial)e -(meaning)h(when)g(in)f(double)g(quotes)i(\(see)150 4653 -y(Section)30 b(3.5.3)i([Shell)d(P)m(arameter)j(Expansion],)d(page)i +(remo)m(v)m(ed.)41 b(Bac)m(kslashes)30 b(preceding)e(c)m(haracters)h +(without)f(a)g(sp)s(ecial)150 4189 y(meaning)j(are)h(left)f(unmo)s +(di\014ed.)41 b(A)31 b(double)g(quote)g(ma)m(y)h(b)s(e)e(quoted)i +(within)e(double)h(quotes)g(b)m(y)g(pre-)150 4299 y(ceding)36 +b(it)g(with)f(a)h(bac)m(kslash.)56 b(When)36 b(command)f(history)g(is)h +(b)s(eing)f(used,)h(the)f(double)g(quote)h(ma)m(y)150 +4408 y(not)31 b(b)s(e)e(used)h(to)h(quote)g(the)g(history)f(expansion)g +(c)m(haracter.)275 4543 y(The)41 b(sp)s(ecial)h(parameters)f(`)p +Fs(*)p Ft(')h(and)f(`)p Fs(@)p Ft(')h(ha)m(v)m(e)g(sp)s(ecial)g +(meaning)g(when)f(in)g(double)g(quotes)h(\(see)150 4653 +y(Section)31 b(3.5.3)h([Shell)f(P)m(arameter)h(Expansion],)e(page)h (18\).)150 4877 y Fk(3.1.2.4)63 b(ANSI-C)40 b(Quoting)275 5121 y Ft(W)-8 b(ords)33 b(of)h(the)g(form)f Fs($')p Fj(string)11 b Fs(')31 b Ft(are)j(treated)g(sp)s(ecially)-8 -b(.)49 b(The)33 b(w)m(ord)g(expands)g(to)i Fq(string)p -Ft(,)e(with)150 5230 y(bac)m(kslash-escap)s(ed)43 b(c)m(haracters)i -(replaced)e(as)h(sp)s(eci\014ed)e(b)m(y)h(the)g(ANSI)g(C)g(standard.)79 -b(Bac)m(kslash)150 5340 y(escap)s(e)31 b(sequences,)g(if)e(presen)m(t,) -i(are)g(deco)s(ded)f(as)g(follo)m(ws:)p eop +b(.)52 b(The)33 b(w)m(ord)g(expands)g(to)i Fq(string)p +Ft(,)f(with)150 5230 y(bac)m(kslash-escap)s(ed)44 b(c)m(haracters)h +(replaced)f(as)g(sp)s(eci\014ed)f(b)m(y)g(the)g(ANSI)g(C)g(standard.)79 +b(Bac)m(kslash)150 5340 y(escap)s(e)31 b(sequences,)g(if)f(presen)m(t,) +h(are)g(deco)s(ded)f(as)g(follo)m(ws:)p eop end %%Page: 7 13 -7 12 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2292 b(7)150 299 y Fs(\\a)384 -b Ft(alert)30 b(\(b)s(ell\))150 487 y Fs(\\b)384 b Ft(bac)m(kspace)150 -675 y Fs(\\e)g Ft(an)30 b(escap)s(e)h(c)m(haracter)h(\(not)f(ANSI)f -(C\))150 862 y Fs(\\f)384 b Ft(form)30 b(feed)150 1050 -y Fs(\\n)384 b Ft(newline)150 1238 y Fs(\\r)g Ft(carriage)31 -b(return)150 1426 y Fs(\\t)384 b Ft(horizon)m(tal)30 -b(tab)150 1614 y Fs(\\v)384 b Ft(v)m(ertical)30 b(tab)150 -1802 y Fs(\\\\)384 b Ft(bac)m(kslash)150 1989 y Fs(\\')g -Ft(single)29 b(quote)150 2177 y Fs(\\)p Fj(nnn)288 b -Ft(the)31 b(eigh)m(t-bit)f(c)m(haracter)i(whose)e(v)-5 -b(alue)30 b(is)f(the)i(o)s(ctal)f(v)-5 b(alue)30 b Fq(nnn)f +TeXDict begin 7 12 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(7)150 299 +y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))150 487 y Fs(\\b)384 +b Ft(bac)m(kspace)150 675 y Fs(\\e)g Ft(an)30 b(escap)s(e)h(c)m +(haracter)h(\(not)f(ANSI)f(C\))150 862 y Fs(\\f)384 b +Ft(form)30 b(feed)150 1050 y Fs(\\n)384 b Ft(newline)150 +1238 y Fs(\\r)g Ft(carriage)32 b(return)150 1426 y Fs(\\t)384 +b Ft(horizon)m(tal)32 b(tab)150 1614 y Fs(\\v)384 b Ft(v)m(ertical)32 +b(tab)150 1802 y Fs(\\\\)384 b Ft(bac)m(kslash)150 1989 +y Fs(\\')g Ft(single)31 b(quote)150 2177 y Fs(\\)p Fj(nnn)288 +b Ft(the)31 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5 +b(alue)31 b(is)f(the)h(o)s(ctal)g(v)-5 b(alue)31 b Fq(nnn)e Ft(\(one)i(to)g(three)g(digits\))150 2365 y Fs(\\x)p -Fj(HH)288 b Ft(the)36 b(eigh)m(t-bit)g(c)m(haracter)h(whose)f(v)-5 -b(alue)35 b(is)g(the)h(hexadecimal)f(v)-5 b(alue)35 b +Fj(HH)288 b Ft(the)36 b(eigh)m(t-bit)i(c)m(haracter)f(whose)f(v)-5 +b(alue)36 b(is)g(the)g(hexadecimal)h(v)-5 b(alue)36 b Fq(HH)46 b Ft(\(one)37 b(or)f(t)m(w)m(o)630 2475 y(hex)30 b(digits\))150 2662 y Fs(\\c)p Fj(x)336 b Ft(a)31 b(con)m(trol-)p -Fq(x)37 b Ft(c)m(haracter)150 2865 y(The)30 b(expanded)f(result)h(is)f -(single-quoted,)h(as)h(if)e(the)h(dollar)f(sign)h(had)f(not)i(b)s(een)f +Fq(x)38 b Ft(c)m(haracter)150 2865 y(The)30 b(expanded)f(result)i(is)f +(single-quoted,)i(as)f(if)f(the)g(dollar)h(sign)g(had)e(not)i(b)s(een)f (presen)m(t.)150 3146 y Fk(3.1.2.5)63 b(Lo)s(cale-Sp)s(eci\014c)41 -b(T)-10 b(ranslation)275 3418 y Ft(A)30 b(double-quoted)g(string)f -(preceded)h(b)m(y)h(a)g(dollar)e(sign)g(\(`)p Fs($)p -Ft('\))j(will)27 b(cause)32 b(the)e(string)g(to)h(b)s(e)f(trans-)150 -3528 y(lated)i(according)g(to)h(the)f(curren)m(t)g(lo)s(cale.)45 -b(If)32 b(the)g(curren)m(t)g(lo)s(cale)g(is)f Fs(C)h -Ft(or)g Fs(POSIX)p Ft(,)f(the)h(dollar)f(sign)g(is)150 -3637 y(ignored.)40 b(If)30 b(the)g(string)g(is)f(translated)h(and)g -(replaced,)g(the)h(replacemen)m(t)f(is)g(double-quoted.)275 -3800 y(Some)20 b(systems)h(use)f(the)h(message)h(catalog)g(selected)f -(b)m(y)g(the)g Fs(LC_MESSAGES)c Ft(shell)i(v)-5 b(ariable.)37 -b(Others)150 3910 y(create)i(the)e(name)g(of)g(the)g(message)h(catalog) -h(from)e(the)g(v)-5 b(alue)36 b(of)h(the)h Fs(TEXTDOMAIN)c -Ft(shell)h(v)-5 b(ariable,)150 4019 y(p)s(ossibly)29 -b(adding)h(a)h(su\016x)g(of)h(`)p Fs(.mo)p Ft('.)43 b(If)31 -b(y)m(ou)h(use)f(the)h Fs(TEXTDOMAIN)c Ft(v)-5 b(ariable,)31 -b(y)m(ou)h(ma)m(y)g(need)f(to)h(set)150 4129 y(the)22 -b Fs(TEXTDOMAINDIR)d Ft(v)-5 b(ariable)21 b(to)i(the)f(lo)s(cation)g -(of)g(the)h(message)g(catalog)h(\014les.)37 b(Still)20 -b(others)i(use)g(b)s(oth)150 4238 y(v)-5 b(ariables)29 -b(in)g(this)g(fashion:)40 b Fs(TEXTDOMAINDIR)p Ft(/)p +b(T)-10 b(ranslation)275 3418 y Ft(A)30 b(double-quoted)h(string)f +(preceded)g(b)m(y)h(a)g(dollar)g(sign)f(\(`)p Fs($)p +Ft('\))i(will)e(cause)i(the)e(string)h(to)g(b)s(e)f(trans-)150 +3528 y(lated)j(according)g(to)g(the)f(curren)m(t)g(lo)s(cale.)47 +b(If)32 b(the)g(curren)m(t)g(lo)s(cale)i(is)e Fs(C)g +Ft(or)g Fs(POSIX)p Ft(,)f(the)h(dollar)h(sign)f(is)150 +3637 y(ignored.)41 b(If)30 b(the)g(string)h(is)f(translated)h(and)f +(replaced,)h(the)g(replacemen)m(t)g(is)g(double-quoted.)275 +3800 y(Some)20 b(systems)h(use)f(the)h(message)h(catalog)h(selected)f +(b)m(y)f(the)g Fs(LC_MESSAGES)c Ft(shell)k(v)-5 b(ariable.)39 +b(Others)150 3910 y(create)g(the)e(name)g(of)g(the)g(message)h(catalog) +i(from)d(the)g(v)-5 b(alue)37 b(of)g(the)h Fs(TEXTDOMAIN)c +Ft(shell)j(v)-5 b(ariable,)150 4019 y(p)s(ossibly)31 +b(adding)g(a)g(su\016x)g(of)h(`)p Fs(.mo)p Ft('.)43 b(If)31 +b(y)m(ou)h(use)f(the)h Fs(TEXTDOMAIN)c Ft(v)-5 b(ariable,)33 +b(y)m(ou)f(ma)m(y)g(need)f(to)h(set)150 4129 y(the)22 +b Fs(TEXTDOMAINDIR)d Ft(v)-5 b(ariable)23 b(to)g(the)f(lo)s(cation)i +(of)e(the)h(message)g(catalog)i(\014les.)38 b(Still)23 +b(others)f(use)g(b)s(oth)150 4238 y(v)-5 b(ariables)31 +b(in)f(this)g(fashion:)41 b Fs(TEXTDOMAINDIR)p Ft(/)p Fs(LC_MESSAGES)p Ft(/LC)p 2528 4238 28 4 v 34 w(MESSA)m(GES/)p Fs(TEXTDOMAIN)p Ft(.mo.)150 4520 y Fk(3.1.3)63 b(Commen)m(ts)275 -4792 y Ft(In)34 b(a)j(non-in)m(teractiv)m(e)f(shell,)f(or)h(an)f(in)m -(teractiv)m(e)i(shell)d(in)g(whic)m(h)h(the)g Fs(interactive_comments) -150 4902 y Ft(option)i(to)h(the)f Fs(shopt)f Ft(builtin)e(is)i(enabled) -g(\(see)i(Section)g(4.2)g([Bash)f(Builtins],)g(page)h(39\),)j(a)c(w)m -(ord)150 5011 y(b)s(eginning)24 b(with)h(`)p Fs(#)p Ft(')h(causes)h -(that)f(w)m(ord)g(and)g(all)f(remaining)g(c)m(haracters)i(on)f(that)h -(line)e(to)i(b)s(e)f(ignored.)150 5121 y(An)43 b(in)m(teractiv)m(e)h -(shell)e(without)g(the)h Fs(interactive_comments)38 b -Ft(option)43 b(enabled)f(do)s(es)h(not)g(allo)m(w)150 +4792 y Ft(In)34 b(a)j(non-in)m(teractiv)m(e)h(shell,)f(or)f(an)f(in)m +(teractiv)m(e)k(shell)d(in)f(whic)m(h)h(the)f Fs(interactive_comments) +150 4902 y Ft(option)j(to)g(the)f Fs(shopt)f Ft(builtin)h(is)g(enabled) +g(\(see)h(Section)h(4.2)f([Bash)f(Builtins],)j(page)e(39\),)j(a)c(w)m +(ord)150 5011 y(b)s(eginning)26 b(with)g(`)p Fs(#)p Ft(')g(causes)h +(that)f(w)m(ord)g(and)g(all)h(remaining)g(c)m(haracters)g(on)f(that)h +(line)g(to)g(b)s(e)f(ignored.)150 5121 y(An)43 b(in)m(teractiv)m(e)j +(shell)e(without)f(the)g Fs(interactive_comments)38 b +Ft(option)44 b(enabled)f(do)s(es)g(not)g(allo)m(w)150 5230 y(commen)m(ts.)56 b(The)34 b Fs(interactive_comments)c -Ft(option)k(is)g(on)h(b)m(y)g(default)f(in)g(in)m(teractiv)m(e)i -(shells.)53 b(See)150 5340 y(Section)29 b(6.3)g([In)m(teractiv)m(e)i -(Shells],)c(page)j(67,)g(for)e(a)i(description)c(of)j(what)g(mak)m(es)h -(a)f(shell)e(in)m(teractiv)m(e.)p eop +Ft(option)35 b(is)g(on)g(b)m(y)g(default)g(in)g(in)m(teractiv)m(e)j +(shells.)55 b(See)150 5340 y(Section)30 b(6.3)f([In)m(teractiv)m(e)j +(Shells],)d(page)h(67,)g(for)e(a)i(description)e(of)h(what)g(mak)m(es)h +(a)f(shell)g(in)m(teractiv)m(e.)p eop end %%Page: 8 14 -8 13 bop 150 -116 a Ft(8)2617 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fr(3.2)68 b(Shell)45 b(Commands)275 553 y Ft(A)32 -b(simple)e(shell)g(command)i(suc)m(h)g(as)h Fs(echo)c(a)h(b)g(c)i -Ft(consists)f(of)i(the)f(command)g(itself)f(follo)m(w)m(ed)h(b)m(y)150 -663 y(argumen)m(ts,)f(separated)g(b)m(y)f(spaces.)275 -808 y(More)h(complex)g(shell)e(commands)i(are)g(comp)s(osed)g(of)g -(simple)e(commands)i(arranged)g(together)h(in)150 917 -y(a)f(v)-5 b(ariet)m(y)31 b(of)g(w)m(a)m(ys:)41 b(in)30 -b(a)h(pip)s(eline)c(in)i(whic)m(h)g(the)i(output)f(of)h(one)f(command)h -(b)s(ecomes)f(the)h(input)e(of)150 1027 y(a)i(second,)f(in)g(a)g(lo)s -(op)g(or)g(conditional)f(construct,)i(or)f(in)f(some)i(other)g -(grouping.)150 1272 y Fk(3.2.1)63 b(Simple)40 b(Commands)275 -1526 y Ft(A)26 b(simple)f(command)i(is)e(the)i(kind)e(of)i(command)g +TeXDict begin 8 13 bop 150 -116 a Ft(8)2617 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(3.2)68 b(Shell)45 +b(Commands)275 553 y Ft(A)32 b(simple)g(shell)g(command)g(suc)m(h)g(as) +h Fs(echo)c(a)h(b)g(c)i Ft(consists)g(of)h(the)f(command)g(itself)h +(follo)m(w)m(ed)h(b)m(y)150 663 y(argumen)m(ts,)d(separated)g(b)m(y)f +(spaces.)275 808 y(More)h(complex)h(shell)f(commands)g(are)g(comp)s +(osed)g(of)g(simple)g(commands)g(arranged)g(together)h(in)150 +917 y(a)f(v)-5 b(ariet)m(y)32 b(of)f(w)m(a)m(ys:)41 b(in)31 +b(a)g(pip)s(eline)f(in)g(whic)m(h)g(the)h(output)f(of)h(one)f(command)h +(b)s(ecomes)f(the)h(input)f(of)150 1027 y(a)h(second,)f(in)h(a)f(lo)s +(op)h(or)f(conditional)i(construct,)f(or)f(in)g(some)h(other)g +(grouping.)150 1272 y Fk(3.2.1)63 b(Simple)41 b(Commands)275 +1526 y Ft(A)26 b(simple)h(command)g(is)f(the)h(kind)f(of)h(command)g (encoun)m(tered)g(most)g(often.)40 b(It's)27 b(just)f(a)i(sequence)150 1636 y(of)f(w)m(ords)f(separated)h(b)m(y)g Fs(blank)p -Ft(s,)f(terminated)g(b)m(y)h(one)g(of)g(the)g(shell's)e(con)m(trol)i -(op)s(erators)g(\(see)h(Chap-)150 1745 y(ter)34 b(2)g([De\014nitions],) -g(page)h(3\).)51 b(The)34 b(\014rst)f(w)m(ord)g(generally)g(sp)s -(eci\014es)f(a)j(command)e(to)i(b)s(e)e(executed,)150 -1855 y(with)c(the)i(rest)f(of)h(the)f(w)m(ords)g(b)s(eing)f(that)i +Ft(s,)f(terminated)h(b)m(y)g(one)g(of)g(the)g(shell's)g(con)m(trol)h +(op)s(erators)f(\(see)h(Chap-)150 1745 y(ter)34 b(2)g([De\014nitions],) +i(page)f(3\).)51 b(The)34 b(\014rst)f(w)m(ord)g(generally)i(sp)s +(eci\014es)e(a)i(command)e(to)i(b)s(e)e(executed,)150 +1855 y(with)d(the)h(rest)f(of)h(the)f(w)m(ords)g(b)s(eing)g(that)h (command's)f(argumen)m(ts.)275 2000 y(The)h(return)h(status)g(\(see)i -(Section)e(3.7.5)i([Exit)e(Status],)i(page)f(30\))g(of)g(a)g(simple)d -(command)i(is)g(its)150 2109 y(exit)37 b(status)g(as)g(pro)m(vided)e(b) -m(y)i(the)g Fl(posix)f Ft(1003.1)j Fs(waitpid)c Ft(function,)i(or)g -(128)p Fs(+)p Fq(n)g Ft(if)f(the)h(command)150 2219 y(w)m(as)31 -b(terminated)f(b)m(y)g(signal)f Fq(n)p Ft(.)150 2463 +(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(30\))g(of)g(a)g(simple)f +(command)g(is)h(its)150 2109 y(exit)38 b(status)f(as)g(pro)m(vided)f(b) +m(y)h(the)g Fl(posix)f Ft(1003.1)j Fs(waitpid)c Ft(function,)j(or)f +(128)p Fs(+)p Fq(n)g Ft(if)g(the)g(command)150 2219 y(w)m(as)31 +b(terminated)g(b)m(y)f(signal)h Fq(n)p Ft(.)150 2463 y Fk(3.2.2)63 b(Pip)s(elines)275 2718 y Ft(A)30 b Fs(pipeline)e -Ft(is)i(a)g(sequence)h(of)g(simple)d(commands)i(separated)h(b)m(y)f(`)p -Fs(|)p Ft('.)275 2863 y(The)f(format)i(for)f(a)h(pip)s(eline)c(is)390 +Ft(is)j(a)f(sequence)h(of)g(simple)f(commands)g(separated)h(b)m(y)f(`)p +Fs(|)p Ft('.)275 2863 y(The)f(format)i(for)f(a)h(pip)s(eline)f(is)390 3007 y Fs([time)46 b([-p]])h([!])g Fj(command1)56 b Fs([|)47 b Fj(command2)56 b Fs(...)o(])150 3152 y Ft(The)36 b(output)h(of)g(eac) -m(h)h(command)e(in)g(the)h(pip)s(eline)c(is)j(connected)i(via)e(a)h -(pip)s(e)e(to)j(the)f(input)e(of)i(the)150 3262 y(next)31 -b(command.)40 b(That)30 b(is,)g(eac)m(h)i(command)e(reads)g(the)g -(previous)f(command's)h(output.)275 3407 y(The)36 b(reserv)m(ed)g(w)m -(ord)g Fs(time)g Ft(causes)h(timing)e(statistics)h(to)h(b)s(e)f(prin)m -(ted)f(for)h(the)h(pip)s(eline)c(once)k(it)150 3516 y(\014nishes.)50 -b(The)34 b(statistics)g(curren)m(tly)f(consist)h(of)g(elapsed)g(\(w)m -(all-clo)s(c)m(k\))g(time)g(and)g(user)f(and)h(system)150 -3626 y(time)h(consumed)g(b)m(y)g(the)h(command's)f(execution.)56 -b(The)35 b(`)p Fs(-p)p Ft(')h(option)e(c)m(hanges)j(the)f(output)f -(format)150 3735 y(to)i(that)f(sp)s(eci\014ed)e(b)m(y)i +m(h)h(command)e(in)h(the)g(pip)s(eline)f(is)h(connected)h(via)f(a)g +(pip)s(e)f(to)i(the)f(input)f(of)h(the)150 3262 y(next)31 +b(command.)40 b(That)30 b(is,)h(eac)m(h)h(command)e(reads)g(the)g +(previous)g(command's)g(output.)275 3407 y(The)36 b(reserv)m(ed)g(w)m +(ord)g Fs(time)g Ft(causes)h(timing)g(statistics)h(to)f(b)s(e)f(prin)m +(ted)g(for)g(the)h(pip)s(eline)f(once)h(it)150 3516 y(\014nishes.)51 +b(The)34 b(statistics)i(curren)m(tly)e(consist)h(of)f(elapsed)h(\(w)m +(all-clo)s(c)m(k\))i(time)e(and)f(user)f(and)h(system)150 +3626 y(time)i(consumed)f(b)m(y)g(the)h(command's)f(execution.)57 +b(The)35 b(`)p Fs(-p)p Ft(')h(option)f(c)m(hanges)i(the)f(output)f +(format)150 3735 y(to)i(that)f(sp)s(eci\014ed)f(b)m(y)h Fl(posix)p Ft(.)57 b(The)35 b Fs(TIMEFORMAT)e Ft(v)-5 -b(ariable)35 b(ma)m(y)i(b)s(e)e(set)h(to)h(a)f(format)g(string)f(that) -150 3845 y(sp)s(eci\014es)28 b(ho)m(w)h(the)g(timing)e(information)h -(should)e(b)s(e)j(displa)m(y)m(ed.)39 b(See)29 b(Section)g(5.2)h([Bash) -f(V)-8 b(ariables],)150 3955 y(page)29 b(55,)h(for)e(a)g(description)f -(of)h(the)g(a)m(v)-5 b(ailable)28 b(formats.)40 b(The)28 +b(ariable)37 b(ma)m(y)g(b)s(e)e(set)h(to)h(a)f(format)g(string)g(that) +150 3845 y(sp)s(eci\014es)29 b(ho)m(w)g(the)g(timing)g(information)h +(should)d(b)s(e)i(displa)m(y)m(ed.)41 b(See)29 b(Section)h(5.2)g([Bash) +f(V)-8 b(ariables],)150 3955 y(page)29 b(55,)h(for)e(a)g(description)h +(of)f(the)g(a)m(v)-5 b(ailable)31 b(formats.)40 b(The)28 b(use)g(of)g Fs(time)f Ft(as)i(a)f(reserv)m(ed)h(w)m(ord)f(p)s(er-)150 -4064 y(mits)f(the)h(timing)e(of)i(shell)e(builtins,)f(shell)h -(functions,)h(and)g(pip)s(elines.)37 b(An)27 b(external)h -Fs(time)e Ft(command)150 4174 y(cannot)31 b(time)f(these)h(easily)-8 -b(.)275 4318 y(If)24 b(the)h(pip)s(eline)d(is)i(not)h(executed)h(async) -m(hronously)e(\(see)i(Section)f(3.2.3)i([Lists],)f(page)f(9\),)i(the)f -(shell)150 4428 y(w)m(aits)k(for)g(all)g(commands)g(in)f(the)h(pip)s -(eline)d(to)k(complete.)275 4573 y(Eac)m(h)25 b(command)g(in)f(a)h(pip) -s(eline)d(is)i(executed)i(in)e(its)g(o)m(wn)i(subshell)c(\(see)k -(Section)f(3.7.3)i([Command)150 4682 y(Execution)35 b(En)m(vironmen)m -(t],)i(page)f(29\).)58 b(The)36 b(exit)f(status)h(of)g(a)g(pip)s(eline) -d(is)h(the)i(exit)g(status)g(of)g(the)150 4792 y(last)31 -b(command)g(in)f(the)h(pip)s(eline,)d(unless)i(the)h -Fs(pipefail)e Ft(option)i(is)f(enabled)g(\(see)i(Section)f(4.3)h([The) -150 4902 y(Set)i(Builtin],)g(page)h(50\).)53 b(If)34 -b Fs(pipefail)e Ft(is)h(enabled,)h(the)h(pip)s(eline's)c(return)i -(status)h(is)g(the)g(v)-5 b(alue)34 b(of)150 5011 y(the)e(last)g -(\(righ)m(tmost\))h(command)f(to)h(exit)f(with)e(a)j(non-zero)f -(status,)h(or)f(zero)h(if)e(all)g(commands)h(exit)150 -5121 y(successfully)-8 b(.)65 b(If)38 b(the)h(reserv)m(ed)g(w)m(ord)g -(`)p Fs(!)p Ft(')g(precedes)g(the)g(pip)s(eline,)e(the)j(exit)e(status) -h(is)f(the)h(logical)150 5230 y(negation)g(of)g(the)f(exit)h(status)g -(as)f(describ)s(ed)f(ab)s(o)m(v)m(e.)66 b(The)38 b(shell)f(w)m(aits)i -(for)f(all)f(commands)i(in)e(the)150 5340 y(pip)s(eline)27 -b(to)k(terminate)f(b)s(efore)g(returning)f(a)i(v)-5 b(alue.)p -eop +4064 y(mits)g(the)g(timing)g(of)g(shell)g(builtins,)g(shell)g +(functions,)g(and)f(pip)s(elines.)40 b(An)27 b(external)i +Fs(time)d Ft(command)150 4174 y(cannot)31 b(time)g(these)g(easily)-8 +b(.)275 4318 y(If)24 b(the)h(pip)s(eline)g(is)g(not)g(executed)h(async) +m(hronously)f(\(see)h(Section)g(3.2.3)h([Lists],)g(page)e(9\),)i(the)f +(shell)150 4428 y(w)m(aits)31 b(for)f(all)i(commands)e(in)g(the)g(pip)s +(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) +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 +(page)e(50\).)53 b(If)34 b Fs(pipefail)e Ft(is)i(enabled,)h(the)g(pip)s +(eline's)f(return)f(status)h(is)h(the)f(v)-5 b(alue)35 +b(of)150 5011 y(the)d(last)h(\(righ)m(tmost\))h(command)e(to)h(exit)g +(with)e(a)i(non-zero)f(status,)h(or)f(zero)h(if)f(all)h(commands)f +(exit)150 5121 y(successfully)-8 b(.)67 b(If)38 b(the)h(reserv)m(ed)g +(w)m(ord)g(`)p Fs(!)p Ft(')g(precedes)g(the)g(pip)s(eline,)h(the)g +(exit)f(status)g(is)g(the)g(logical)150 5230 y(negation)h(of)f(the)f +(exit)i(status)f(as)f(describ)s(ed)g(ab)s(o)m(v)m(e.)66 +b(The)38 b(shell)h(w)m(aits)h(for)e(all)h(commands)g(in)f(the)150 +5340 y(pip)s(eline)30 b(to)h(terminate)g(b)s(efore)f(returning)g(a)h(v) +-5 b(alue.)p eop end %%Page: 9 15 -9 14 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2292 b(9)150 299 y Fk(3.2.3)63 -b(Lists)41 b(of)g(Commands)275 547 y Ft(A)29 b Fs(list)f -Ft(is)h(a)g(sequence)h(of)g(one)f(or)h(more)f(pip)s(elines)d(separated) -k(b)m(y)f(one)h(of)f(the)h(op)s(erators)g(`)p Fs(;)p -Ft(',)g(`)p Fs(&)p Ft(',)150 657 y(`)p Fs(&&)p Ft(',)h(or)f(`)p -Fs(||)p Ft(',)g(and)g(optionally)f(terminated)h(b)m(y)g(one)h(of)f(`)p -Fs(;)p Ft(',)h(`)p Fs(&)p Ft(',)g(or)f(a)h Fs(newline)p -Ft(.)275 795 y(Of)23 b(these)h(list)e(op)s(erators,)k(`)p -Fs(&&)p Ft(')d(and)g(`)p Fs(||)p Ft(')h(ha)m(v)m(e)h(equal)e -(precedence,)j(follo)m(w)m(ed)d(b)m(y)h(`)p Fs(;)p Ft(')g(and)f(`)p -Fs(&)p Ft(',)i(whic)m(h)150 905 y(ha)m(v)m(e)32 b(equal)d(precedence.) -275 1044 y(A)g(sequence)h(of)g(one)g(or)g(more)g(newlines)d(ma)m(y)j -(app)s(ear)f(in)g(a)h Fs(list)e Ft(to)j(delimit)c(commands,)j(equiv-) -150 1153 y(alen)m(t)h(to)g(a)g(semicolon.)275 1292 y(If)c(a)h(command)f -(is)g(terminated)g(b)m(y)h(the)g(con)m(trol)g(op)s(erator)g(`)p -Fs(&)p Ft(',)h(the)e(shell)f(executes)j(the)f(command)150 -1401 y(async)m(hronously)f(in)h(a)h(subshell.)37 b(This)27 -b(is)h(kno)m(wn)g(as)h(executing)g(the)g(command)g(in)e(the)i -Fq(bac)m(kground)p Ft(.)150 1511 y(The)f(shell)f(do)s(es)h(not)h(w)m -(ait)f(for)g(the)h(command)f(to)i(\014nish,)c(and)i(the)h(return)e -(status)i(is)f(0)h(\(true\).)40 b(When)150 1621 y(job)g(con)m(trol)g -(is)g(not)g(activ)m(e)h(\(see)g(Chapter)f(7)h([Job)f(Con)m(trol],)i -(page)f(79\),)j(the)d(standard)e(input)f(for)150 1730 -y(async)m(hronous)43 b(commands,)k(in)c(the)g(absence)i(of)f(an)m(y)g -(explicit)e(redirections,)k(is)c(redirected)h(from)150 +TeXDict begin 9 14 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(9)150 299 +y Fk(3.2.3)63 b(Lists)41 b(of)h(Commands)275 547 y Ft(A)29 +b Fs(list)f Ft(is)i(a)f(sequence)h(of)g(one)f(or)h(more)f(pip)s(elines) +g(separated)h(b)m(y)f(one)h(of)f(the)h(op)s(erators)g(`)p +Fs(;)p Ft(',)g(`)p Fs(&)p Ft(',)150 657 y(`)p Fs(&&)p +Ft(',)h(or)f(`)p Fs(||)p Ft(',)g(and)g(optionally)i(terminated)f(b)m(y) +f(one)h(of)f(`)p Fs(;)p Ft(',)h(`)p Fs(&)p Ft(',)g(or)f(a)h +Fs(newline)p Ft(.)275 795 y(Of)23 b(these)h(list)g(op)s(erators,)i(`)p +Fs(&&)p Ft(')d(and)g(`)p Fs(||)p Ft(')h(ha)m(v)m(e)h(equal)f +(precedence,)i(follo)m(w)m(ed)f(b)m(y)f(`)p Fs(;)p Ft(')g(and)f(`)p +Fs(&)p Ft(',)i(whic)m(h)150 905 y(ha)m(v)m(e)32 b(equal)e(precedence.) +275 1044 y(A)f(sequence)h(of)g(one)g(or)g(more)g(newlines)f(ma)m(y)h +(app)s(ear)f(in)h(a)g Fs(list)e Ft(to)j(delimit)f(commands,)g(equiv-) +150 1153 y(alen)m(t)i(to)f(a)g(semicolon.)275 1292 y(If)c(a)h(command)f +(is)h(terminated)g(b)m(y)g(the)g(con)m(trol)h(op)s(erator)f(`)p +Fs(&)p Ft(',)h(the)e(shell)h(executes)h(the)f(command)150 +1401 y(async)m(hronously)g(in)h(a)g(subshell.)39 b(This)28 +b(is)h(kno)m(wn)f(as)h(executing)h(the)f(command)g(in)f(the)h +Fq(bac)m(kground)p Ft(.)150 1511 y(The)f(shell)h(do)s(es)f(not)h(w)m +(ait)g(for)f(the)h(command)f(to)i(\014nish,)d(and)h(the)h(return)e +(status)i(is)g(0)g(\(true\).)40 b(When)150 1621 y(job)g(con)m(trol)h +(is)g(not)f(activ)m(e)i(\(see)f(Chapter)f(7)h([Job)f(Con)m(trol],)j +(page)e(79\),)j(the)d(standard)e(input)g(for)150 1730 +y(async)m(hronous)k(commands,)k(in)d(the)f(absence)i(of)f(an)m(y)g +(explicit)h(redirections,)j(is)43 b(redirected)h(from)150 1840 y Fs(/dev/null)p Ft(.)275 1979 y(Commands)19 b(separated)j(b)m(y)f -(a)g(`)p Fs(;)p Ft(')g(are)h(executed)g(sequen)m(tially;)h(the)e(shell) -e(w)m(aits)i(for)g(eac)m(h)h(command)150 2088 y(to)31 -b(terminate)g(in)e(turn.)39 b(The)30 b(return)f(status)i(is)e(the)i -(exit)f(status)h(of)g(the)f(last)g(command)g(executed.)275 -2227 y(The)f(con)m(trol)i(op)s(erators)f(`)p Fs(&&)p -Ft(')g(and)g(`)p Fs(||)p Ft(')g(denote)h Fl(and)e Ft(lists)g(and)h -Fl(or)f Ft(lists,)g(resp)s(ectiv)m(ely)-8 b(.)41 b(An)30 -b Fl(and)150 2336 y Ft(list)f(has)h(the)h(form)390 2475 +(a)g(`)p Fs(;)p Ft(')g(are)h(executed)g(sequen)m(tially;)k(the)21 +b(shell)g(w)m(aits)h(for)f(eac)m(h)h(command)150 2088 +y(to)31 b(terminate)h(in)e(turn.)39 b(The)30 b(return)f(status)i(is)f +(the)h(exit)g(status)g(of)g(the)f(last)h(command)f(executed.)275 +2227 y(The)f(con)m(trol)j(op)s(erators)e(`)p Fs(&&)p +Ft(')g(and)g(`)p Fs(||)p Ft(')g(denote)h Fl(and)e Ft(lists)i(and)f +Fl(or)f Ft(lists,)i(resp)s(ectiv)m(ely)-8 b(.)43 b(An)30 +b Fl(and)150 2336 y Ft(list)h(has)f(the)h(form)390 2475 y Fj(command1)56 b Fs(&&)47 b Fj(command2)150 2614 y -Fq(command2)38 b Ft(is)29 b(executed)j(if,)d(and)h(only)f(if,)h -Fq(command1)38 b Ft(returns)29 b(an)h(exit)g(status)h(of)g(zero.)275 -2752 y(An)f Fl(or)f Ft(list)g(has)h(the)h(form)390 2891 +Fq(command2)38 b Ft(is)30 b(executed)i(if,)e(and)g(only)g(if,)h +Fq(command1)38 b Ft(returns)29 b(an)h(exit)h(status)g(of)g(zero.)275 +2752 y(An)f Fl(or)f Ft(list)i(has)f(the)h(form)390 2891 y Fj(command1)56 b Fs(||)47 b Fj(command2)150 3030 y -Fq(command2)38 b Ft(is)29 b(executed)j(if,)d(and)h(only)f(if,)h -Fq(command1)38 b Ft(returns)29 b(a)i(non-zero)g(exit)f(status.)275 -3168 y(The)i(return)g(status)i(of)f Fl(and)f Ft(and)h -Fl(or)f Ft(lists)g(is)g(the)h(exit)g(status)h(of)f(the)g(last)g -(command)g(executed)150 3278 y(in)c(the)i(list.)150 3510 -y Fk(3.2.4)63 b(Comp)s(ound)41 b(Commands)275 3759 y -Ft(Comp)s(ound)f(commands)i(are)h(the)g(shell)e(programming)g +Fq(command2)38 b Ft(is)30 b(executed)i(if,)e(and)g(only)g(if,)h +Fq(command1)38 b Ft(returns)29 b(a)i(non-zero)g(exit)g(status.)275 +3168 y(The)h(return)g(status)i(of)f Fl(and)f Ft(and)h +Fl(or)f Ft(lists)i(is)f(the)g(exit)h(status)g(of)f(the)g(last)h +(command)f(executed)150 3278 y(in)d(the)h(list.)150 3510 +y Fk(3.2.4)63 b(Comp)s(ound)42 b(Commands)275 3759 y +Ft(Comp)s(ound)e(commands)i(are)h(the)g(shell)g(programming)f (constructs.)77 b(Eac)m(h)44 b(construct)e(b)s(egins)150 -3868 y(with)c(a)h(reserv)m(ed)g(w)m(ord)f(or)h(con)m(trol)g(op)s -(erator)g(and)g(is)f(terminated)g(b)m(y)h(a)g(corresp)s(onding)e -(reserv)m(ed)150 3978 y(w)m(ord)42 b(or)h(op)s(erator.)77 -b(An)m(y)42 b(redirections)f(\(see)j(Section)e(3.6)i([Redirections],)h -(page)e(24\))g(asso)s(ciated)150 4087 y(with)25 b(a)h(comp)s(ound)f -(command)h(apply)f(to)i(all)e(commands)h(within)d(that)k(comp)s(ound)e -(command)h(unless)150 4197 y(explicitly)i(o)m(v)m(erridden.)275 -4336 y(Bash)45 b(pro)m(vides)g(lo)s(oping)f(constructs,)49 -b(conditional)44 b(commands,)50 b(and)44 b(mec)m(hanisms)h(to)h(group) -150 4445 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150 +3868 y(with)d(a)g(reserv)m(ed)g(w)m(ord)f(or)h(con)m(trol)h(op)s +(erator)f(and)g(is)g(terminated)g(b)m(y)g(a)g(corresp)s(onding)f +(reserv)m(ed)150 3978 y(w)m(ord)k(or)h(op)s(erator.)77 +b(An)m(y)42 b(redirections)h(\(see)h(Section)f(3.6)h([Redirections],)j +(page)c(24\))g(asso)s(ciated)150 4087 y(with)26 b(a)g(comp)s(ound)f +(command)h(apply)g(to)h(all)g(commands)f(within)f(that)i(comp)s(ound)e +(command)h(unless)150 4197 y(explicitly)32 b(o)m(v)m(erridden.)275 +4336 y(Bash)45 b(pro)m(vides)h(lo)s(oping)g(constructs,)j(conditional)e +(commands,)j(and)44 b(mec)m(hanisms)i(to)g(group)150 +4445 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150 4678 y Fk(3.2.4.1)63 b(Lo)s(oping)43 b(Constructs)275 -4926 y Ft(Bash)30 b(supp)s(orts)f(the)h(follo)m(wing)f(lo)s(oping)g -(constructs.)275 5065 y(Note)35 b(that)f(wherev)m(er)g(a)g(`)p -Fs(;)p Ft(')g(app)s(ears)f(in)g(the)h(description)e(of)i(a)g(command's) -g(syn)m(tax,)i(it)d(ma)m(y)i(b)s(e)150 5174 y(replaced)30 -b(with)f(one)i(or)f(more)g(newlines.)150 5340 y Fs(until)240 -b Ft(The)30 b(syn)m(tax)h(of)f(the)h Fs(until)e Ft(command)h(is:)p -eop +4926 y Ft(Bash)30 b(supp)s(orts)f(the)h(follo)m(wing)i(lo)s(oping)f +(constructs.)275 5065 y(Note)k(that)f(wherev)m(er)g(a)g(`)p +Fs(;)p Ft(')g(app)s(ears)f(in)h(the)g(description)g(of)g(a)g(command's) +g(syn)m(tax,)i(it)e(ma)m(y)h(b)s(e)150 5174 y(replaced)c(with)f(one)h +(or)f(more)g(newlines.)150 5340 y Fs(until)240 b Ft(The)30 +b(syn)m(tax)h(of)f(the)h Fs(until)e Ft(command)h(is:)p +eop end %%Page: 10 16 -10 15 bop 150 -116 a Ft(10)2572 b(Bash)31 b(Reference)g(Man)m(ual)870 -299 y Fs(until)46 b Fj(test-commands)11 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)g(as)g -Fq(test-commands)46 b Ft(has)41 b(an)g(exit)g(status)630 -543 y(whic)m(h)c(is)h(not)h(zero.)67 b(The)38 b(return)f(status)j(is)d -(the)i(exit)g(status)g(of)g(the)g(last)f(command)630 -653 y(executed)31 b(in)e Fq(consequen)m(t-commands)p -Ft(,)j(or)e(zero)h(if)f(none)g(w)m(as)h(executed.)150 +TeXDict begin 10 15 bop 150 -116 a Ft(10)2572 b(Bash)31 +b(Reference)g(Man)m(ual)870 299 y Fs(until)46 b Fj(test-commands)11 +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 +(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 Fs(while)e Ft(command)h(is:)870 948 y Fs(while)46 b Fj(test-commands)11 b Fs(;)44 b(do)j Fj(consequent-commands)11 b Fs(;)42 b(done)630 1083 y Ft(Execute)g Fq(consequen)m(t-commands)k -Ft(as)41 b(long)g(as)g Fq(test-commands)46 b Ft(has)41 -b(an)g(exit)g(status)630 1193 y(of)34 b(zero.)53 b(The)34 -b(return)f(status)h(is)g(the)g(exit)g(status)h(of)f(the)g(last)g -(command)g(executed)h(in)630 1302 y Fq(consequen)m(t-commands)p -Ft(,)c(or)g(zero)g(if)e(none)h(w)m(as)h(executed.)150 +Ft(as)41 b(long)h(as)f Fq(test-commands)46 b Ft(has)41 +b(an)g(exit)h(status)630 1193 y(of)34 b(zero.)53 b(The)34 +b(return)f(status)h(is)h(the)f(exit)h(status)g(of)f(the)g(last)h +(command)f(executed)h(in)630 1302 y Fq(consequen)m(t-commands)p +Ft(,)c(or)g(zero)g(if)f(none)g(w)m(as)h(executed.)150 1463 y Fs(for)336 b Ft(The)30 b(syn)m(tax)h(of)f(the)h Fs(for)e Ft(command)i(is:)870 1598 y Fs(for)47 b Fj(name)57 b Fs([in)47 b Fj(words)57 b Fs(...)o(];)47 b(do)g Fj(commands)11 b Fs(;)45 b(done)630 1733 y Ft(Expand)31 b Fq(w)m(ords)p Ft(,)j(and)e(execute)i Fq(commands)i Ft(once)d(for)g(eac)m(h)h(mem)m(b) -s(er)e(in)f(the)i(resultan)m(t)630 1842 y(list,)27 b(with)g +s(er)e(in)g(the)h(resultan)m(t)630 1842 y(list,)c(with)f Fq(name)33 b Ft(b)s(ound)26 b(to)j(the)f(curren)m(t)g(mem)m(b)s(er.)40 -b(If)27 b(`)p Fs(in)j Fj(words)11 b Ft(')27 b(is)g(not)h(presen)m(t,)h +b(If)27 b(`)p Fs(in)j Fj(words)11 b Ft(')27 b(is)h(not)g(presen)m(t,)h (the)630 1952 y Fs(for)g Ft(command)g(executes)i(the)e -Fq(commands)k Ft(once)d(for)f(eac)m(h)i(p)s(ositional)c(parameter)j -(that)630 2061 y(is)c(set,)i(as)f(if)f(`)p Fs(in)k("$@")p -Ft(')c(had)g(b)s(een)g(sp)s(eci\014ed)f(\(see)j(Section)e(3.4.2)j([Sp)s -(ecial)c(P)m(arameters],)630 2171 y(page)e(15\).)39 b(The)21 -b(return)g(status)h(is)f(the)h(exit)g(status)g(of)g(the)g(last)f -(command)h(that)g(executes.)630 2281 y(If)i(there)h(are)h(no)e(items)h -(in)e(the)i(expansion)f(of)h Fq(w)m(ords)p Ft(,)h(no)f(commands)f(are)h -(executed,)j(and)630 2390 y(the)j(return)e(status)i(is)e(zero.)630 -2525 y(An)h(alternate)h(form)f(of)h(the)f Fs(for)g Ft(command)g(is)f +Fq(commands)k Ft(once)d(for)f(eac)m(h)i(p)s(ositional)f(parameter)g +(that)630 2061 y(is)d(set,)h(as)f(if)g(`)p Fs(in)j("$@")p +Ft(')c(had)g(b)s(een)g(sp)s(eci\014ed)g(\(see)i(Section)f(3.4.2)i([Sp)s +(ecial)e(P)m(arameters],)630 2171 y(page)c(15\).)39 b(The)21 +b(return)g(status)h(is)g(the)g(exit)h(status)f(of)g(the)g(last)g +(command)g(that)g(executes.)630 2281 y(If)i(there)h(are)h(no)e(items)i +(in)e(the)h(expansion)g(of)g Fq(w)m(ords)p Ft(,)h(no)f(commands)f(are)h +(executed,)j(and)630 2390 y(the)j(return)e(status)i(is)f(zero.)630 +2525 y(An)g(alternate)i(form)e(of)h(the)f Fs(for)g Ft(command)g(is)g (also)h(supp)s(orted:)870 2660 y Fs(for)47 b(\(\()g Fj(expr1)57 b Fs(;)47 b Fj(expr2)57 b Fs(;)48 b Fj(expr3)57 b Fs(\)\))47 b(;)g(do)g Fj(commands)57 b Fs(;)47 b(done)630 2795 y -Ft(First,)37 b(the)g(arithmetic)f(expression)f Fq(expr1)43 -b Ft(is)35 b(ev)-5 b(aluated)37 b(according)f(to)h(the)g(rules)e(de-) -630 2905 y(scrib)s(ed)40 b(b)s(elo)m(w)h(\(see)i(Section)f(6.5)h -([Shell)e(Arithmetic],)j(page)f(70\).)77 b(The)42 b(arithmetic)630 -3014 y(expression)32 b Fq(expr2)41 b Ft(is)33 b(then)g(ev)-5 -b(aluated)34 b(rep)s(eatedly)f(un)m(til)f(it)h(ev)-5 -b(aluates)34 b(to)h(zero.)51 b(Eac)m(h)630 3124 y(time)22 -b Fq(expr2)30 b Ft(ev)-5 b(aluates)24 b(to)f(a)g(non-zero)h(v)-5 -b(alue,)24 b Fq(commands)i Ft(are)d(executed)g(and)g(the)g(arith-)630 -3233 y(metic)28 b(expression)f Fq(expr3)36 b Ft(is)27 -b(ev)-5 b(aluated.)40 b(If)28 b(an)m(y)h(expression)e(is)g(omitted,)i -(it)f(b)s(eha)m(v)m(es)h(as)630 3343 y(if)h(it)h(ev)-5 -b(aluates)31 b(to)h(1.)44 b(The)30 b(return)g(v)-5 b(alue)31 -b(is)f(the)h(exit)g(status)h(of)f(the)g(last)g(command)g(in)630 -3453 y Fq(list)g Ft(that)g(is)e(executed,)j(or)e(false)g(if)g(an)m(y)g -(of)h(the)f(expressions)f(is)h(in)m(v)-5 b(alid.)275 -3613 y(The)26 b Fs(break)g Ft(and)h Fs(continue)e Ft(builtins)f(\(see)k -(Section)g(4.1)g([Bourne)g(Shell)d(Builtins],)h(page)i(33\))g(ma)m(y) -150 3723 y(b)s(e)i(used)f(to)i(con)m(trol)g(lo)s(op)f(execution.)150 +Ft(First,)38 b(the)f(arithmetic)h(expression)e Fq(expr1)43 +b Ft(is)36 b(ev)-5 b(aluated)38 b(according)f(to)g(the)g(rules)f(de-) +630 2905 y(scrib)s(ed)41 b(b)s(elo)m(w)h(\(see)h(Section)g(6.5)g +([Shell)g(Arithmetic],)j(page)d(70\).)77 b(The)42 b(arithmetic)630 +3014 y(expression)33 b Fq(expr2)41 b Ft(is)34 b(then)f(ev)-5 +b(aluated)35 b(rep)s(eatedly)f(un)m(til)g(it)g(ev)-5 +b(aluates)35 b(to)g(zero.)51 b(Eac)m(h)630 3124 y(time)23 +b Fq(expr2)30 b Ft(ev)-5 b(aluates)25 b(to)e(a)g(non-zero)h(v)-5 +b(alue,)25 b Fq(commands)h Ft(are)d(executed)g(and)g(the)g(arith-)630 +3233 y(metic)29 b(expression)f Fq(expr3)36 b Ft(is)28 +b(ev)-5 b(aluated.)41 b(If)28 b(an)m(y)h(expression)f(is)g(omitted,)i +(it)f(b)s(eha)m(v)m(es)g(as)630 3343 y(if)i(it)h(ev)-5 +b(aluates)32 b(to)g(1.)44 b(The)30 b(return)g(v)-5 b(alue)32 +b(is)f(the)g(exit)h(status)g(of)f(the)g(last)h(command)f(in)630 +3453 y Fq(list)i Ft(that)e(is)f(executed,)i(or)e(false)h(if)g(an)m(y)f +(of)h(the)f(expressions)g(is)h(in)m(v)-5 b(alid.)275 +3613 y(The)26 b Fs(break)g Ft(and)h Fs(continue)e Ft(builtins)i(\(see)h +(Section)h(4.1)f([Bourne)g(Shell)f(Builtins],)i(page)f(33\))g(ma)m(y) +150 3723 y(b)s(e)i(used)f(to)i(con)m(trol)h(lo)s(op)f(execution.)150 3949 y Fk(3.2.4.2)63 b(Conditional)42 b(Constructs)150 4193 y Fs(if)384 b Ft(The)30 b(syn)m(tax)h(of)f(the)h Fs(if)f Ft(command)g(is:)870 4328 y Fs(if)47 b Fj(test-commands)11 @@ -3558,2185 +5246,2194 @@ b Fs(;)870 4547 y([elif)46 b Fj(more-test-commands)11 b Fs(;)42 b(then)965 4657 y Fj(more-consequents)11 b Fs(;])870 4767 y([else)46 b Fj(alternate-consequents)11 b Fs(;])870 4876 y(fi)630 5011 y Ft(The)53 b Fq(test-commands)58 -b Ft(list)52 b(is)h(executed,)60 b(and)53 b(if)f(its)h(return)f(status) -i(is)e(zero,)61 b(the)630 5121 y Fq(consequen)m(t-commands)44 -b Ft(list)39 b(is)g(executed.)70 b(If)40 b Fq(test-commands)k +b Ft(list)c(is)g(executed,)60 b(and)53 b(if)g(its)h(return)e(status)i +(is)f(zero,)61 b(the)630 5121 y Fq(consequen)m(t-commands)44 +b Ft(list)d(is)f(executed.)70 b(If)40 b Fq(test-commands)k Ft(returns)39 b(a)h(non-zero)630 5230 y(status,)45 b(eac)m(h)e -Fs(elif)d Ft(list)g(is)h(executed)i(in)d(turn,)k(and)d(if)f(its)h(exit) -h(status)g(is)e(zero,)46 b(the)630 5340 y(corresp)s(onding)36 -b Fq(more-consequen)m(ts)42 b Ft(is)37 b(executed)h(and)f(the)h -(command)g(completes.)62 b(If)p eop +Fs(elif)d Ft(list)i(is)g(executed)h(in)e(turn,)j(and)d(if)g(its)h(exit) +h(status)f(is)f(zero,)46 b(the)630 5340 y(corresp)s(onding)37 +b Fq(more-consequen)m(ts)42 b Ft(is)c(executed)g(and)f(the)h(command)g +(completes.)63 b(If)p eop end %%Page: 11 17 -11 16 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(11)630 299 y(`)p Fs(else)29 -b Fj(alternate-consequents)11 b Ft(')23 b(is)29 b(presen)m(t,)g(and)g -(the)g(\014nal)f(command)g(in)g(the)h(\014nal)630 408 -y Fs(if)44 b Ft(or)g Fs(elif)f Ft(clause)h(has)g(a)h(non-zero)g(exit)f -(status,)k(then)c Fq(alternate-consequen)m(ts)50 b Ft(is)630 -518 y(executed.)55 b(The)34 b(return)g(status)h(is)e(the)i(exit)g -(status)g(of)g(the)g(last)f(command)h(executed,)630 628 -y(or)30 b(zero)i(if)d(no)h(condition)f(tested)i(true.)150 +TeXDict begin 11 16 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(11)630 299 +y(`)p Fs(else)29 b Fj(alternate-consequents)11 b Ft(')23 +b(is)30 b(presen)m(t,)f(and)g(the)g(\014nal)g(command)f(in)h(the)g +(\014nal)630 408 y Fs(if)44 b Ft(or)g Fs(elif)f Ft(clause)i(has)f(a)h +(non-zero)g(exit)g(status,)j(then)c Fq(alternate-consequen)m(ts)51 +b Ft(is)630 518 y(executed.)k(The)34 b(return)g(status)h(is)f(the)h +(exit)h(status)f(of)g(the)g(last)g(command)g(executed,)630 +628 y(or)30 b(zero)i(if)e(no)g(condition)h(tested)g(true.)150 784 y Fs(case)288 b Ft(The)30 b(syn)m(tax)h(of)f(the)h Fs(case)e Ft(command)h(is:)870 917 y Fs(case)47 b Fj(word)57 b Fs(in)47 b([)g([\(])g Fj(pattern)57 b Fs([|)47 b Fj(pattern)11 b Fs(]...)l(\))48 b Fj(command-list)55 b Fs(;;]...)46 -b(esac)630 1050 y(case)34 b Ft(will)e(selectiv)m(ely)i(execute)i(the)f -Fq(command-list)h Ft(corresp)s(onding)c(to)k(the)e(\014rst)g +b(esac)630 1050 y(case)34 b Ft(will)h(selectiv)m(ely)i(execute)f(the)f +Fq(command-list)j Ft(corresp)s(onding)33 b(to)j(the)e(\014rst)g Fq(pat-)630 1160 y(tern)40 b Ft(that)i(matc)m(hes)g Fq(w)m(ord)p -Ft(.)71 b(The)40 b(`)p Fs(|)p Ft(')h(is)f(used)g(to)h(separate)h(m)m -(ultiple)c(patterns,)44 b(and)630 1270 y(the)31 b(`)p -Fs(\))p Ft(')h(op)s(erator)f(terminates)g(a)h(pattern)f(list.)42 -b(A)31 b(list)f(of)i(patterns)f(and)f(an)h(asso)s(ciated)630 -1379 y(command-list)e(is)g(kno)m(wn)h(as)g(a)h Fq(clause)p -Ft(.)40 b(Eac)m(h)31 b(clause)f(m)m(ust)g(b)s(e)f(terminated)h(with)f -(`)p Fs(;;)p Ft('.)630 1489 y(The)e Fq(w)m(ord)j Ft(undergo)s(es)d -(tilde)f(expansion,)h(parameter)g(expansion,)g(command)h(substitu-)630 -1598 y(tion,)38 b(arithmetic)e(expansion,)h(and)g(quote)g(remo)m(v)-5 -b(al)37 b(b)s(efore)f(matc)m(hing)h(is)f(attempted.)630 -1708 y(Eac)m(h)e Fq(pattern)f Ft(undergo)s(es)g(tilde)f(expansion,)h -(parameter)h(expansion,)f(command)g(sub-)630 1817 y(stitution,)c(and)h -(arithmetic)g(expansion.)630 1951 y(There)g(ma)m(y)g(b)s(e)f(an)h -(arbitrary)f(n)m(um)m(b)s(er)g(of)h Fs(case)f Ft(clauses,)h(eac)m(h)h -(terminated)f(b)m(y)f(a)i(`)p Fs(;;)p Ft('.)630 2060 -y(The)f(\014rst)f(pattern)i(that)g(matc)m(hes)g(determines)f(the)g -(command-list)g(that)h(is)e(executed.)630 2193 y(Here)35 -b(is)f(an)h(example)g(using)e Fs(case)h Ft(in)f(a)i(script)f(that)i -(could)e(b)s(e)g(used)g(to)h(describ)s(e)f(one)630 2303 -y(in)m(teresting)c(feature)h(of)f(an)g(animal:)870 2436 +Ft(.)71 b(The)40 b(`)p Fs(|)p Ft(')h(is)g(used)f(to)h(separate)h(m)m +(ultiple)f(patterns,)j(and)630 1270 y(the)31 b(`)p Fs(\))p +Ft(')h(op)s(erator)f(terminates)h(a)g(pattern)f(list.)44 +b(A)31 b(list)h(of)g(patterns)f(and)f(an)h(asso)s(ciated)630 +1379 y(command-list)g(is)f(kno)m(wn)g(as)g(a)h Fq(clause)p +Ft(.)41 b(Eac)m(h)31 b(clause)g(m)m(ust)f(b)s(e)f(terminated)i(with)f +(`)p Fs(;;)p Ft('.)630 1489 y(The)d Fq(w)m(ord)j Ft(undergo)s(es)d +(tilde)h(expansion,)g(parameter)f(expansion,)h(command)g(substitu-)630 +1598 y(tion,)39 b(arithmetic)f(expansion,)g(and)f(quote)g(remo)m(v)-5 +b(al)38 b(b)s(efore)e(matc)m(hing)i(is)f(attempted.)630 +1708 y(Eac)m(h)d Fq(pattern)f Ft(undergo)s(es)g(tilde)h(expansion,)g +(parameter)g(expansion,)g(command)f(sub-)630 1817 y(stitution,)e(and)f +(arithmetic)i(expansion.)630 1951 y(There)e(ma)m(y)g(b)s(e)f(an)h +(arbitrary)g(n)m(um)m(b)s(er)f(of)h Fs(case)f Ft(clauses,)i(eac)m(h)g +(terminated)g(b)m(y)e(a)i(`)p Fs(;;)p Ft('.)630 2060 +y(The)f(\014rst)f(pattern)i(that)g(matc)m(hes)g(determines)g(the)f +(command-list)i(that)f(is)f(executed.)630 2193 y(Here)35 +b(is)g(an)g(example)h(using)e Fs(case)g Ft(in)g(a)h(script)g(that)h +(could)f(b)s(e)f(used)g(to)h(describ)s(e)g(one)630 2303 +y(in)m(teresting)d(feature)f(of)f(an)g(animal:)870 2436 y Fs(echo)47 b(-n)g("Enter)f(the)h(name)f(of)i(an)f(animal:)f(")870 2545 y(read)h(ANIMAL)870 2655 y(echo)g(-n)g("The)f($ANIMAL)g(has)h(") 870 2765 y(case)g($ANIMAL)e(in)965 2874 y(horse)i(|)g(dog)g(|)h(cat\))e (echo)h(-n)g("four";;)965 2984 y(man)g(|)h(kangaroo)d(\))j(echo)e(-n)i ("two";;)965 3093 y(*\))g(echo)e(-n)h("an)g(unknown)f(number)g(of";;) 870 3203 y(esac)870 3313 y(echo)h(")g(legs.")630 3446 -y Ft(The)26 b(return)f(status)h(is)f(zero)i(if)e(no)h -Fq(pattern)g Ft(is)f(matc)m(hed.)40 b(Otherwise,)26 b(the)h(return)e -(status)630 3555 y(is)k(the)i(exit)f(status)h(of)f(the)h -Fq(command-list)g Ft(executed.)150 3712 y Fs(select)630 -3845 y Ft(The)i Fs(select)f Ft(construct)i(allo)m(ws)f(the)h(easy)g -(generation)g(of)f(men)m(us.)50 b(It)34 b(has)f(almost)h(the)630 -3954 y(same)d(syn)m(tax)g(as)f(the)h Fs(for)e Ft(command:)870 +y Ft(The)26 b(return)f(status)h(is)g(zero)h(if)f(no)g +Fq(pattern)g Ft(is)g(matc)m(hed.)40 b(Otherwise,)27 b(the)g(return)e +(status)630 3555 y(is)30 b(the)h(exit)g(status)g(of)f(the)h +Fq(command-list)i Ft(executed.)150 3712 y Fs(select)630 +3845 y Ft(The)g Fs(select)f Ft(construct)i(allo)m(ws)h(the)f(easy)g +(generation)h(of)e(men)m(us.)50 b(It)34 b(has)f(almost)i(the)630 +3954 y(same)c(syn)m(tax)g(as)f(the)h Fs(for)e Ft(command:)870 4088 y Fs(select)46 b Fj(name)57 b Fs([in)47 b Fj(words)57 b Fs(...)o(];)47 b(do)h Fj(commands)11 b Fs(;)44 b(done)630 -4221 y Ft(The)d(list)g(of)g(w)m(ords)h(follo)m(wing)e -Fs(in)h Ft(is)g(expanded,)j(generating)e(a)g(list)e(of)i(items.)74 -b(The)630 4330 y(set)41 b(of)f(expanded)f(w)m(ords)g(is)h(prin)m(ted)e -(on)i(the)g(standard)f(error)h(output)g(stream,)j(eac)m(h)630 +4221 y Ft(The)d(list)i(of)e(w)m(ords)h(follo)m(wing)h +Fs(in)e Ft(is)h(expanded,)i(generating)f(a)f(list)g(of)g(items.)75 +b(The)630 4330 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 4440 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)g(omitted,)i -(the)f(p)s(ositional)f(parameters)630 4549 y(are)24 b(prin)m(ted,)f(as) -h(if)e(`)p Fs(in)30 b("$@")p Ft(')23 b(had)f(b)s(een)h(sp)s(ecifed.)37 -b(The)23 b Fs(PS3)f Ft(prompt)h(is)f(then)h(displa)m(y)m(ed)630 -4659 y(and)38 b(a)h(line)e(is)g(read)i(from)f(the)h(standard)e(input.) -64 b(If)38 b(the)h(line)e(consists)h(of)g(a)h(n)m(um)m(b)s(er)630 -4769 y(corresp)s(onding)32 b(to)j(one)f(of)g(the)g(displa)m(y)m(ed)f(w) -m(ords,)h(then)g(the)g(v)-5 b(alue)33 b(of)i Fq(name)k -Ft(is)33 b(set)h(to)630 4878 y(that)g(w)m(ord.)49 b(If)32 -b(the)i(line)d(is)i(empt)m(y)-8 b(,)35 b(the)e(w)m(ords)g(and)f(prompt) -h(are)g(displa)m(y)m(ed)f(again.)49 b(If)630 4988 y Fs(EOF)23 -b Ft(is)f(read,)k(the)d Fs(select)f Ft(command)i(completes.)39 -b(An)m(y)23 b(other)h(v)-5 b(alue)23 b(read)h(causes)g -Fq(name)630 5097 y Ft(to)31 b(b)s(e)f(set)h(to)g(n)m(ull.)39 -b(The)29 b(line)g(read)h(is)g(sa)m(v)m(ed)h(in)e(the)i(v)-5 -b(ariable)29 b Fs(REPLY)p Ft(.)630 5230 y(The)42 b Fq(commands)j -Ft(are)d(executed)h(after)g(eac)m(h)g(selection)f(un)m(til)e(a)j -Fs(break)d Ft(command)i(is)630 5340 y(executed,)32 b(at)f(whic)m(h)e(p) -s(oin)m(t)g(the)i Fs(select)d Ft(command)i(completes.)p -eop +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 4549 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 +4659 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 +4769 y(corresp)s(onding)33 b(to)i(one)f(of)g(the)g(displa)m(y)m(ed)h(w) +m(ords,)f(then)g(the)g(v)-5 b(alue)34 b(of)h Fq(name)k +Ft(is)34 b(set)g(to)630 4878 y(that)g(w)m(ord.)49 b(If)32 +b(the)i(line)f(is)h(empt)m(y)-8 b(,)35 b(the)e(w)m(ords)g(and)f(prompt) +h(are)g(displa)m(y)m(ed)h(again.)50 b(If)630 4988 y Fs(EOF)23 +b Ft(is)g(read,)j(the)d Fs(select)f Ft(command)i(completes.)40 +b(An)m(y)23 b(other)h(v)-5 b(alue)24 b(read)g(causes)g +Fq(name)630 5097 y Ft(to)31 b(b)s(e)f(set)h(to)g(n)m(ull.)41 +b(The)29 b(line)i(read)f(is)h(sa)m(v)m(ed)g(in)f(the)h(v)-5 +b(ariable)31 b Fs(REPLY)p Ft(.)630 5230 y(The)42 b Fq(commands)j +Ft(are)d(executed)h(after)g(eac)m(h)g(selection)h(un)m(til)e(a)h +Fs(break)d Ft(command)i(is)630 5340 y(executed,)32 b(at)f(whic)m(h)f(p) +s(oin)m(t)g(the)h Fs(select)d Ft(command)i(completes.)p +eop end %%Page: 12 18 -12 17 bop 150 -116 a Ft(12)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(Here)39 b(is)f(an)h(example)g(that)g(allo)m(ws)g(the)g(user)f(to) -i(pic)m(k)e(a)h(\014lename)g(from)f(the)h(curren)m(t)630 -408 y(directory)-8 b(,)31 b(and)e(displa)m(ys)g(the)h(name)h(and)f -(index)e(of)j(the)g(\014le)e(selected.)870 542 y Fs(select)46 -b(fname)g(in)i(*;)870 651 y(do)870 761 y(echo)f(you)g(picked)f($fname)g -(\\\($REPLY\\\))870 870 y(break;)870 980 y(done)150 1136 -y(\(\(...)o(\)\))870 1270 y(\(\()h Fj(expression)56 b -Fs(\)\))630 1403 y Ft(The)33 b(arithmetic)g Fq(expression)g -Ft(is)f(ev)-5 b(aluated)34 b(according)g(to)g(the)g(rules)e(describ)s -(ed)g(b)s(elo)m(w)630 1512 y(\(see)k(Section)e(6.5)i([Shell)d -(Arithmetic],)i(page)h(70\).)55 b(If)34 b(the)h(v)-5 -b(alue)34 b(of)h(the)g(expression)f(is)630 1622 y(non-zero,)27 -b(the)f(return)e(status)i(is)f(0;)i(otherwise)e(the)h(return)e(status)i -(is)f(1.)39 b(This)24 b(is)g(exactly)630 1731 y(equiv)-5 -b(alen)m(t)30 b(to)870 1864 y Fs(let)47 b(")p Fj(expression)11 -b Fs(")630 1998 y Ft(See)25 b(Section)g(4.2)i([Bash)e(Builtins],)f -(page)i(39,)i(for)c(a)i(full)d(description)g(of)i(the)h -Fs(let)e Ft(builtin.)150 2154 y Fs([[...)o(]])870 2287 -y([[)47 b Fj(expression)56 b Fs(]])630 2420 y Ft(Return)25 -b(a)h(status)f(of)h(0)g(or)g(1)g(dep)s(ending)d(on)i(the)h(ev)-5 -b(aluation)25 b(of)g(the)h(conditional)e(expres-)630 -2530 y(sion)29 b Fq(expression)p Ft(.)40 b(Expressions)28 -b(are)j(comp)s(osed)f(of)g(the)h(primaries)d(describ)s(ed)g(b)s(elo)m -(w)h(in)630 2639 y(Section)35 b(6.4)i([Bash)f(Conditional)d -(Expressions],)j(page)g(69.)57 b(W)-8 b(ord)36 b(splitting)e(and)h -(\014le-)630 2749 y(name)24 b(expansion)g(are)h(not)f(p)s(erformed)f +TeXDict begin 12 17 bop 150 -116 a Ft(12)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(Here)39 b(is)g(an)g(example)h(that)f +(allo)m(ws)i(the)e(user)f(to)i(pic)m(k)f(a)g(\014lename)h(from)e(the)h +(curren)m(t)630 408 y(directory)-8 b(,)32 b(and)d(displa)m(ys)i(the)f +(name)h(and)f(index)f(of)i(the)g(\014le)f(selected.)870 +542 y Fs(select)46 b(fname)g(in)i(*;)870 651 y(do)870 +761 y(echo)f(you)g(picked)f($fname)g(\\\($REPLY\\\))870 +870 y(break;)870 980 y(done)150 1136 y(\(\(...)o(\)\))870 +1270 y(\(\()h Fj(expression)56 b Fs(\)\))630 1403 y Ft(The)33 +b(arithmetic)i Fq(expression)f Ft(is)f(ev)-5 b(aluated)35 +b(according)g(to)f(the)g(rules)f(describ)s(ed)g(b)s(elo)m(w)630 +1512 y(\(see)j(Section)f(6.5)h([Shell)f(Arithmetic],)i(page)f(70\).)55 +b(If)34 b(the)h(v)-5 b(alue)35 b(of)g(the)g(expression)g(is)630 +1622 y(non-zero,)27 b(the)f(return)e(status)i(is)g(0;)h(otherwise)f +(the)g(return)e(status)i(is)g(1.)39 b(This)25 b(is)g(exactly)630 +1731 y(equiv)-5 b(alen)m(t)32 b(to)870 1864 y Fs(let)47 +b(")p Fj(expression)11 b Fs(")630 1998 y Ft(See)25 b(Section)h(4.2)h +([Bash)e(Builtins],)i(page)f(39,)i(for)c(a)i(full)f(description)g(of)g +(the)h Fs(let)e Ft(builtin.)150 2154 y Fs([[...)o(]])870 +2287 y([[)47 b Fj(expression)56 b Fs(]])630 2420 y Ft(Return)25 +b(a)h(status)f(of)h(0)g(or)g(1)g(dep)s(ending)e(on)h(the)h(ev)-5 +b(aluation)27 b(of)e(the)h(conditional)h(expres-)630 +2530 y(sion)j Fq(expression)p Ft(.)41 b(Expressions)29 +b(are)i(comp)s(osed)f(of)g(the)h(primaries)f(describ)s(ed)f(b)s(elo)m +(w)h(in)630 2639 y(Section)36 b(6.4)h([Bash)f(Conditional)g +(Expressions],)h(page)f(69.)57 b(W)-8 b(ord)36 b(splitting)h(and)e +(\014le-)630 2749 y(name)24 b(expansion)h(are)g(not)f(p)s(erformed)f (on)h(the)h(w)m(ords)f(b)s(et)m(w)m(een)h(the)g(`)p Fs([[)p -Ft(')f(and)g(`)p Fs(]])p Ft(';)i(tilde)630 2859 y(expansion,)k -(parameter)h(and)f(v)-5 b(ariable)29 b(expansion,)h(arithmetic)f -(expansion,)h(command)630 2968 y(substitution,)38 b(pro)s(cess)h -(substitution,)f(and)g(quote)h(remo)m(v)-5 b(al)39 b(are)g(p)s -(erformed.)63 b(Condi-)630 3078 y(tional)30 b(op)s(erators)g(suc)m(h)g +Ft(')f(and)g(`)p Fs(]])p Ft(';)i(tilde)630 2859 y(expansion,)31 +b(parameter)g(and)f(v)-5 b(ariable)31 b(expansion,)g(arithmetic)g +(expansion,)g(command)630 2968 y(substitution,)40 b(pro)s(cess)f +(substitution,)h(and)e(quote)h(remo)m(v)-5 b(al)40 b(are)f(p)s +(erformed.)63 b(Condi-)630 3078 y(tional)32 b(op)s(erators)e(suc)m(h)g (as)h(`)p Fs(-f)p Ft(')f(m)m(ust)g(b)s(e)g(unquoted)g(to)h(b)s(e)e -(recognized)i(as)g(primaries.)630 3211 y(When)22 b(the)h(`)p +(recognized)j(as)f(primaries.)630 3211 y(When)22 b(the)h(`)p Fs(==)p Ft(')f(and)g(`)p Fs(!=)p Ft(')g(op)s(erators)h(are)g(used,)g -(the)g(string)e(to)j(the)e(righ)m(t)g(of)h(the)g(op)s(erator)630 -3320 y(is)30 b(considered)g(a)i(pattern)f(and)g(matc)m(hed)h(according) -f(to)h(the)g(rules)e(describ)s(ed)f(b)s(elo)m(w)h(in)630 -3430 y(Section)g(3.5.8.1)j([P)m(attern)e(Matc)m(hing],)h(page)f(23.)41 -b(The)30 b(return)f(v)-5 b(alue)30 b(is)f(0)h(if)g(the)g(string)630 +(the)g(string)f(to)i(the)e(righ)m(t)h(of)g(the)g(op)s(erator)630 +3320 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 +3430 y(Section)g(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i(page)e(23.)41 +b(The)30 b(return)f(v)-5 b(alue)31 b(is)f(0)g(if)h(the)f(string)630 3540 y(matc)m(hes)c(or)f(do)s(es)g(not)h(matc)m(h)f(the)h(pattern,)g -(resp)s(ectiv)m(ely)-8 b(,)26 b(and)f(1)h(otherwise.)38 +(resp)s(ectiv)m(ely)-8 b(,)28 b(and)d(1)h(otherwise.)39 b(An)m(y)25 b(part)630 3649 y(of)31 b(the)f(pattern)h(ma)m(y)g(b)s(e)e -(quoted)i(to)g(force)g(it)f(to)h(b)s(e)f(matc)m(hed)h(as)f(a)h(string.) -630 3782 y(An)i(additional)f(binary)g(op)s(erator,)j(`)p -Fs(=~)p Ft(',)g(is)e(a)m(v)-5 b(ailable,)34 b(with)e(the)i(same)g +(quoted)i(to)g(force)g(it)g(to)g(b)s(e)f(matc)m(hed)h(as)f(a)h(string.) +630 3782 y(An)i(additional)i(binary)e(op)s(erator,)i(`)p +Fs(=~)p Ft(',)g(is)f(a)m(v)-5 b(ailable,)37 b(with)c(the)h(same)g (precedence)h(as)630 3892 y(`)p Fs(==)p Ft(')29 b(and)f(`)p -Fs(!=)p Ft('.)40 b(When)29 b(it)f(is)g(used,)g(the)h(string)f(to)i(the) -e(righ)m(t)h(of)g(the)g(op)s(erator)g(is)f(consid-)630 -4001 y(ered)34 b(an)g(extended)g(regular)f(expression)g(and)g(matc)m -(hed)i(accordingly)e(\(as)h(in)f Fm(r)-5 b(e)g(gex)11 -b Ft(3\)\).)630 4111 y(The)39 b(return)f(v)-5 b(alue)39 -b(is)f(0)i(if)e(the)h(string)g(matc)m(hes)h(the)f(pattern,)j(and)d(1)h -(otherwise.)66 b(If)630 4221 y(the)26 b(regular)f(expression)g(is)g -(syn)m(tactically)h(incorrect,)h(the)f(conditional)e(expression's)h -(re-)630 4330 y(turn)35 b(v)-5 b(alue)36 b(is)f(2.)59 -b(If)36 b(the)g(shell)f(option)g Fs(nocaseglob)f Ft(\(see)j(the)g -(description)d(of)i Fs(shopt)630 4440 y Ft(in)42 b(Section)h(4.2)h -([Bash)f(Builtins],)h(page)g(39\))g(is)e(enabled,)j(the)f(matc)m(h)f -(is)f(p)s(erformed)630 4549 y(without)d(regard)h(to)h(the)f(case)h(of)g -(alphab)s(etic)d(c)m(haracters.)72 b(Substrings)37 b(matc)m(hed)k(b)m -(y)630 4659 y(paren)m(thesized)i(sub)s(expressions)e(within)h(the)i -(regular)f(expression)g(are)h(sa)m(v)m(ed)h(in)e(the)630 -4769 y(arra)m(y)38 b(v)-5 b(ariable)36 b Fs(BASH_REMATCH)p -Ft(.)59 b(The)36 b(elemen)m(t)i(of)g Fs(BASH_REMATCH)c -Ft(with)i(index)g(0)i(is)630 4878 y(the)c(p)s(ortion)e(of)i(the)f -(string)g(matc)m(hing)g(the)h(en)m(tire)g(regular)e(expression.)49 +Fs(!=)p Ft('.)40 b(When)29 b(it)g(is)g(used,)f(the)h(string)g(to)h(the) +e(righ)m(t)i(of)f(the)g(op)s(erator)g(is)g(consid-)630 +4001 y(ered)34 b(an)g(extended)g(regular)g(expression)g(and)f(matc)m +(hed)i(accordingly)g(\(as)f(in)g Fm(r)-5 b(e)g(gex)11 +b Ft(3\)\).)630 4111 y(The)39 b(return)f(v)-5 b(alue)40 +b(is)f(0)h(if)f(the)g(string)h(matc)m(hes)g(the)f(pattern,)j(and)d(1)h +(otherwise.)67 b(If)630 4221 y(the)26 b(regular)g(expression)g(is)g +(syn)m(tactically)j(incorrect,)f(the)e(conditional)h(expression's)f +(re-)630 4330 y(turn)35 b(v)-5 b(alue)37 b(is)f(2.)59 +b(If)36 b(the)g(shell)h(option)f Fs(nocaseglob)e Ft(\(see)j(the)g +(description)f(of)g Fs(shopt)630 4440 y Ft(in)43 b(Section)h(4.2)g +([Bash)f(Builtins],)k(page)d(39\))g(is)f(enabled,)j(the)e(matc)m(h)f +(is)g(p)s(erformed)630 4549 y(without)d(regard)g(to)h(the)f(case)h(of)g +(alphab)s(etic)f(c)m(haracters.)72 b(Substrings)38 b(matc)m(hed)j(b)m +(y)630 4659 y(paren)m(thesized)j(sub)s(expressions)e(within)i(the)g +(regular)g(expression)g(are)g(sa)m(v)m(ed)h(in)f(the)630 +4769 y(arra)m(y)38 b(v)-5 b(ariable)38 b Fs(BASH_REMATCH)p +Ft(.)59 b(The)36 b(elemen)m(t)j(of)f Fs(BASH_REMATCH)c +Ft(with)j(index)g(0)h(is)630 4878 y(the)c(p)s(ortion)f(of)h(the)f +(string)h(matc)m(hing)g(the)g(en)m(tire)h(regular)e(expression.)50 b(The)33 b(elemen)m(t)630 4988 y(of)39 b Fs(BASH_REMATCH)c -Ft(with)i(index)g Fq(n)g Ft(is)h(the)g(p)s(ortion)f(of)i(the)f(string)g -(matc)m(hing)g(the)h Fq(n)p Ft(th)630 5097 y(paren)m(thesized)30 -b(sub)s(expression.)630 5230 y(Expressions)22 b(ma)m(y)i(b)s(e)e(com)m -(bined)h(using)f(the)i(follo)m(wing)e(op)s(erators,)j(listed)d(in)g +Ft(with)j(index)g Fq(n)f Ft(is)i(the)f(p)s(ortion)g(of)h(the)f(string)h +(matc)m(hing)g(the)g Fq(n)p Ft(th)630 5097 y(paren)m(thesized)31 +b(sub)s(expression.)630 5230 y(Expressions)23 b(ma)m(y)h(b)s(e)e(com)m +(bined)i(using)f(the)h(follo)m(wing)h(op)s(erators,)g(listed)f(in)f (decreasing)630 5340 y(order)30 b(of)g(precedence:)p -eop +eop end %%Page: 13 19 -13 18 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(13)630 299 y Fs(\()30 -b Fj(expression)38 b Fs(\))1110 408 y Ft(Returns)30 b(the)h(v)-5 -b(alue)30 b(of)h Fq(expression)p Ft(.)41 b(This)29 b(ma)m(y)j(b)s(e)e -(used)g(to)i(o)m(v)m(erride)f(the)1110 518 y(normal)e(precedence)i(of)g -(op)s(erators.)630 667 y Fs(!)f Fj(expression)1110 776 -y Ft(T)-8 b(rue)30 b(if)f Fq(expression)g Ft(is)h(false.)630 -925 y Fj(expression1)38 b Fs(&&)30 b Fj(expression2)1110 -1034 y Ft(T)-8 b(rue)30 b(if)f(b)s(oth)h Fq(expression1)37 -b Ft(and)29 b Fq(expression2)37 b Ft(are)31 b(true.)630 -1183 y Fj(expression1)38 b Fs(||)30 b Fj(expression2)1110 -1292 y Ft(T)-8 b(rue)30 b(if)f(either)h Fq(expression1)37 -b Ft(or)30 b Fq(expression2)37 b Ft(is)29 b(true.)630 -1441 y(The)c Fs(&&)g Ft(and)g Fs(||)f Ft(op)s(erators)i(do)f(not)h(ev) --5 b(aluate)26 b Fq(expression2)32 b Ft(if)25 b(the)g(v)-5 -b(alue)25 b(of)h Fq(expression1)630 1550 y Ft(is)j(su\016cien)m(t)h(to) -h(determine)f(the)g(return)g(v)-5 b(alue)30 b(of)g(the)h(en)m(tire)f -(conditional)f(expression.)150 1758 y Fk(3.2.4.3)63 b(Grouping)43 -b(Commands)275 1997 y Ft(Bash)22 b(pro)m(vides)f(t)m(w)m(o)i(w)m(a)m -(ys)g(to)g(group)f(a)g(list)f(of)h(commands)g(to)g(b)s(e)g(executed)h -(as)f(a)h(unit.)36 b(When)22 b(com-)150 2106 y(mands)30 -b(are)i(group)s(ed,)f(redirections)f(ma)m(y)i(b)s(e)e(applied)g(to)i -(the)f(en)m(tire)g(command)h(list.)42 b(F)-8 b(or)32 -b(example,)150 2216 y(the)f(output)f(of)g(all)f(the)i(commands)f(in)f -(the)i(list)e(ma)m(y)i(b)s(e)e(redirected)h(to)h(a)g(single)e(stream.) -150 2364 y Fs(\(\))870 2494 y(\()47 b Fj(list)58 b Fs(\))630 -2623 y Ft(Placing)28 b(a)h(list)e(of)i(commands)f(b)s(et)m(w)m(een)i -(paren)m(theses)e(causes)i(a)f(subshell)c(en)m(vironmen)m(t)630 -2732 y(to)31 b(b)s(e)e(created)j(\(see)f(Section)f(3.7.3)i([Command)d -(Execution)h(En)m(vironmen)m(t],)g(page)g(29\),)630 2842 -y(and)d(eac)m(h)i(of)e(the)h(commands)f(in)f Fq(list)i -Ft(to)h(b)s(e)e(executed)h(in)e(that)i(subshell.)37 b(Since)27 -b(the)g Fq(list)630 2951 y Ft(is)h(executed)h(in)e(a)i(subshell,)e(v)-5 -b(ariable)27 b(assignmen)m(ts)h(do)h(not)g(remain)e(in)g(e\013ect)k -(after)e(the)630 3061 y(subshell)e(completes.)150 3209 +TeXDict begin 13 18 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(13)630 299 +y Fs(\()30 b Fj(expression)38 b Fs(\))1110 408 y Ft(Returns)30 +b(the)h(v)-5 b(alue)31 b(of)g Fq(expression)p Ft(.)42 +b(This)30 b(ma)m(y)i(b)s(e)e(used)g(to)i(o)m(v)m(erride)g(the)1110 +518 y(normal)e(precedence)h(of)g(op)s(erators.)630 667 +y Fs(!)f Fj(expression)1110 776 y Ft(T)-8 b(rue)30 b(if)g +Fq(expression)g Ft(is)h(false.)630 925 y Fj(expression1)38 +b Fs(&&)30 b Fj(expression2)1110 1034 y Ft(T)-8 b(rue)30 +b(if)g(b)s(oth)g Fq(expression1)38 b Ft(and)29 b Fq(expression2)38 +b Ft(are)31 b(true.)630 1183 y Fj(expression1)38 b Fs(||)30 +b Fj(expression2)1110 1292 y Ft(T)-8 b(rue)30 b(if)g(either)h +Fq(expression1)38 b Ft(or)30 b Fq(expression2)38 b Ft(is)30 +b(true.)630 1441 y(The)25 b Fs(&&)g Ft(and)g Fs(||)f +Ft(op)s(erators)i(do)f(not)h(ev)-5 b(aluate)27 b Fq(expression2)33 +b Ft(if)26 b(the)f(v)-5 b(alue)26 b(of)g Fq(expression1)630 +1550 y Ft(is)k(su\016cien)m(t)h(to)g(determine)g(the)f(return)g(v)-5 +b(alue)31 b(of)f(the)h(en)m(tire)g(conditional)h(expression.)150 +1758 y Fk(3.2.4.3)63 b(Grouping)43 b(Commands)275 1997 +y Ft(Bash)22 b(pro)m(vides)g(t)m(w)m(o)h(w)m(a)m(ys)g(to)g(group)f(a)g +(list)h(of)f(commands)g(to)g(b)s(e)g(executed)h(as)f(a)h(unit.)37 +b(When)22 b(com-)150 2106 y(mands)30 b(are)i(group)s(ed,)f +(redirections)h(ma)m(y)g(b)s(e)e(applied)i(to)g(the)f(en)m(tire)h +(command)g(list.)44 b(F)-8 b(or)32 b(example,)150 2216 +y(the)f(output)f(of)g(all)h(the)g(commands)f(in)g(the)h(list)g(ma)m(y)g +(b)s(e)e(redirected)i(to)g(a)g(single)g(stream.)150 2364 +y Fs(\(\))870 2494 y(\()47 b Fj(list)58 b Fs(\))630 2623 +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 +2732 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 2842 +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 2951 y Ft(is)i(executed)g(in)f(a)h(subshell,)g(v)-5 +b(ariable)29 b(assignmen)m(ts)g(do)g(not)g(remain)f(in)g(e\013ect)j +(after)e(the)630 3061 y(subshell)g(completes.)150 3209 y Fs({})870 3338 y({)47 b Fj(list)11 b Fs(;)46 b(})630 -3467 y Ft(Placing)28 b(a)i(list)e(of)i(commands)f(b)s(et)m(w)m(een)h -(curly)e(braces)h(causes)h(the)f(list)f(to)i(b)s(e)f(executed)630 -3577 y(in)c(the)i(curren)m(t)g(shell)d(con)m(text.)42 -b(No)27 b(subshell)d(is)h(created.)41 b(The)26 b(semicolon)g(\(or)h -(newline\))630 3687 y(follo)m(wing)i Fq(list)i Ft(is)e(required.)275 -3835 y(In)j(addition)f(to)i(the)g(creation)h(of)f(a)g(subshell,)e -(there)i(is)f(a)h(subtle)e(di\013erence)i(b)s(et)m(w)m(een)g(these)h(t) -m(w)m(o)150 3945 y(constructs)43 b(due)f(to)h(historical)e(reasons.)77 +3467 y Ft(Placing)30 b(a)g(list)g(of)g(commands)f(b)s(et)m(w)m(een)h +(curly)f(braces)g(causes)h(the)f(list)h(to)g(b)s(e)f(executed)630 +3577 y(in)d(the)h(curren)m(t)g(shell)f(con)m(text.)42 +b(No)27 b(subshell)f(is)g(created.)41 b(The)26 b(semicolon)i(\(or)f +(newline\))630 3687 y(follo)m(wing)32 b Fq(list)h Ft(is)d(required.)275 +3835 y(In)i(addition)h(to)g(the)g(creation)i(of)e(a)g(subshell,)g +(there)g(is)g(a)g(subtle)f(di\013erence)i(b)s(et)m(w)m(een)f(these)h(t) +m(w)m(o)150 3945 y(constructs)43 b(due)f(to)h(historical)h(reasons.)77 b(The)42 b(braces)h(are)g Fs(reserved)28 b(words)p Ft(,)45 b(so)d(they)h(m)m(ust)g(b)s(e)150 4054 y(separated)33 -b(from)f(the)g Fq(list)i Ft(b)m(y)e Fs(blank)p Ft(s.)45 +b(from)f(the)g Fq(list)k Ft(b)m(y)c Fs(blank)p Ft(s.)45 b(The)32 b(paren)m(theses)h(are)g Fs(operators)p Ft(,)d(and)i(are)h -(recognized)g(as)150 4164 y(separate)e(tok)m(ens)h(b)m(y)e(the)h(shell) -d(ev)m(en)j(if)e(they)i(are)g(not)f(separated)h(from)f(the)h -Fq(list)g Ft(b)m(y)f(whitespace.)275 4293 y(The)f(exit)i(status)f(of)h -(b)s(oth)f(of)g(these)h(constructs)g(is)e(the)i(exit)f(status)g(of)h +(recognized)h(as)150 4164 y(separate)d(tok)m(ens)h(b)m(y)e(the)h(shell) +f(ev)m(en)h(if)f(they)h(are)g(not)f(separated)h(from)f(the)h +Fq(list)i Ft(b)m(y)d(whitespace.)275 4293 y(The)f(exit)j(status)e(of)h +(b)s(oth)f(of)g(these)h(constructs)g(is)f(the)h(exit)g(status)f(of)h Fq(list)p Ft(.)150 4534 y Fr(3.3)68 b(Shell)45 b(F)-11 -b(unctions)275 4773 y Ft(Shell)25 b(functions)h(are)h(a)h(w)m(a)m(y)g -(to)g(group)f(commands)g(for)g(later)h(execution)f(using)f(a)i(single)e -(name)h(for)150 4882 y(the)35 b(group.)55 b(They)35 b(are)g(executed)h -(just)f(lik)m(e)f(a)i Fs(")p Ft(regular)p Fs(")e Ft(command.)54 -b(When)35 b(the)h(name)f(of)g(a)h(shell)150 4992 y(function)i(is)g -(used)g(as)h(a)h(simple)d(command)i(name,)i(the)e(list)f(of)h(commands) -g(asso)s(ciated)h(with)d(that)150 5101 y(function)24 -b(name)i(is)f(executed.)40 b(Shell)23 b(functions)h(are)j(executed)f -(in)e(the)i(curren)m(t)g(shell)e(con)m(text;)29 b(no)c(new)150 -5211 y(pro)s(cess)30 b(is)f(created)j(to)f(in)m(terpret)f(them.)275 -5340 y(F)-8 b(unctions)29 b(are)i(declared)f(using)f(this)g(syn)m(tax:) -p eop +b(unctions)275 4773 y Ft(Shell)27 b(functions)g(are)g(a)h(w)m(a)m(y)g +(to)g(group)f(commands)g(for)g(later)i(execution)f(using)f(a)h(single)g +(name)f(for)150 4882 y(the)35 b(group.)55 b(They)35 b(are)g(executed)h +(just)f(lik)m(e)h(a)g Fs(")p Ft(regular)p Fs(")f Ft(command.)54 +b(When)35 b(the)h(name)f(of)g(a)h(shell)150 4992 y(function)j(is)g +(used)f(as)h(a)h(simple)f(command)g(name,)i(the)e(list)h(of)f(commands) +g(asso)s(ciated)i(with)d(that)150 5101 y(function)25 +b(name)h(is)g(executed.)40 b(Shell)25 b(functions)g(are)i(executed)f +(in)f(the)h(curren)m(t)g(shell)g(con)m(text;)j(no)c(new)150 +5211 y(pro)s(cess)30 b(is)g(created)i(to)f(in)m(terpret)g(them.)275 +5340 y(F)-8 b(unctions)30 b(are)h(declared)g(using)f(this)g(syn)m(tax:) +p eop end %%Page: 14 20 -14 19 bop 150 -116 a Ft(14)2572 b(Bash)31 b(Reference)g(Man)m(ual)390 -299 y Fs([)47 b(function)f(])h Fj(name)58 b Fs(\(\))47 -b Fj(compound-command)54 b Fs([)47 b Fj(redirections)55 -b Fs(])275 450 y Ft(This)30 b(de\014nes)i(a)h(shell)e(function)h(named) -g Fq(name)p Ft(.)48 b(The)32 b(reserv)m(ed)h(w)m(ord)f -Fs(function)f Ft(is)g(optional.)47 b(If)150 559 y(the)39 -b Fs(function)f Ft(reserv)m(ed)h(w)m(ord)g(is)f(supplied,)h(the)g -(paren)m(theses)h(are)f(optional.)67 b(The)39 b Fq(b)s(o)s(dy)45 -b Ft(of)40 b(the)150 669 y(function)g(is)h(the)h(comp)s(ound)e(command) -h Fq(comp)s(ound-command)j Ft(\(see)e(Section)g(3.2.4)h([Comp)s(ound) -150 778 y(Commands],)33 b(page)g(9\).)48 b(That)33 b(command)g(is)e -(usually)g(a)i Fq(list)g Ft(enclosed)f(b)s(et)m(w)m(een)i -Fs({)e Ft(and)g Fs(})p Ft(,)h(but)f(ma)m(y)150 888 y(b)s(e)27 -b(an)m(y)h(comp)s(ound)e(command)h(listed)f(ab)s(o)m(v)m(e.)41 -b Fq(comp)s(ound-command)30 b Ft(is)d(executed)h(whenev)m(er)g -Fq(name)150 998 y Ft(is)36 b(sp)s(eci\014ed)g(as)h(the)h(name)f(of)g(a) -h(command.)61 b(An)m(y)37 b(redirections)f(\(see)i(Section)f(3.6)h -([Redirections],)150 1107 y(page)31 b(24\))h(asso)s(ciated)f(with)e -(the)h(shell)f(function)g(are)i(p)s(erformed)d(when)i(the)g(function)f -(is)h(executed.)275 1258 y(The)c(exit)h(status)h(of)f(a)h(function)e -(de\014nition)f(is)h(zero)i(unless)e(a)h(syn)m(tax)h(error)f(o)s(ccurs) -g(or)g(a)h(readonly)150 1367 y(function)j(with)f(the)j(same)f(name)g -(already)g(exists.)45 b(When)32 b(executed,)h(the)f(exit)g(status)h(of) -f(a)g(function)150 1477 y(is)d(the)i(exit)f(status)h(of)f(the)h(last)f -(command)g(executed)i(in)d(the)h(b)s(o)s(dy)-8 b(.)275 -1628 y(Note)22 b(that)f(for)f(historical)f(reasons,)k(in)d(the)h(most)g -(common)g(usage)g(the)g(curly)e(braces)i(that)g(surround)150 -1737 y(the)38 b(b)s(o)s(dy)d(of)j(the)f(function)f(m)m(ust)h(b)s(e)g +TeXDict begin 14 19 bop 150 -116 a Ft(14)2572 b(Bash)31 +b(Reference)g(Man)m(ual)390 299 y Fs([)47 b(function)f(])h +Fj(name)58 b Fs(\(\))47 b Fj(compound-command)54 b Fs([)47 +b Fj(redirections)55 b Fs(])275 450 y Ft(This)31 b(de\014nes)h(a)h +(shell)g(function)g(named)f Fq(name)p Ft(.)48 b(The)32 +b(reserv)m(ed)h(w)m(ord)f Fs(function)f Ft(is)h(optional.)49 +b(If)150 559 y(the)39 b Fs(function)f Ft(reserv)m(ed)h(w)m(ord)g(is)g +(supplied,)i(the)e(paren)m(theses)h(are)f(optional.)69 +b(The)39 b Fq(b)s(o)s(dy)45 b Ft(of)40 b(the)150 669 +y(function)h(is)h(the)g(comp)s(ound)e(command)h Fq(comp)s(ound-command) +j Ft(\(see)e(Section)h(3.2.4)g([Comp)s(ound)150 778 y(Commands],)33 +b(page)g(9\).)48 b(That)33 b(command)g(is)f(usually)h(a)g +Fq(list)i Ft(enclosed)e(b)s(et)m(w)m(een)h Fs({)e Ft(and)g +Fs(})p Ft(,)h(but)f(ma)m(y)150 888 y(b)s(e)27 b(an)m(y)h(comp)s(ound)e +(command)h(listed)h(ab)s(o)m(v)m(e.)41 b Fq(comp)s(ound-command)30 +b Ft(is)e(executed)g(whenev)m(er)g Fq(name)150 998 y +Ft(is)37 b(sp)s(eci\014ed)g(as)g(the)h(name)f(of)g(a)h(command.)61 +b(An)m(y)37 b(redirections)h(\(see)g(Section)g(3.6)g([Redirections],) +150 1107 y(page)31 b(24\))h(asso)s(ciated)g(with)e(the)g(shell)h +(function)f(are)h(p)s(erformed)d(when)i(the)g(function)g(is)h +(executed.)275 1258 y(The)26 b(exit)i(status)g(of)f(a)h(function)f +(de\014nition)g(is)g(zero)h(unless)f(a)g(syn)m(tax)h(error)f(o)s(ccurs) +g(or)g(a)h(readonly)150 1367 y(function)k(with)f(the)i(same)f(name)g +(already)h(exists.)46 b(When)32 b(executed,)h(the)f(exit)h(status)g(of) +f(a)g(function)150 1477 y(is)e(the)h(exit)g(status)g(of)f(the)h(last)g +(command)f(executed)i(in)e(the)g(b)s(o)s(dy)-8 b(.)275 +1628 y(Note)22 b(that)f(for)f(historical)i(reasons,)h(in)e(the)g(most)g +(common)g(usage)g(the)g(curly)f(braces)h(that)g(surround)150 +1737 y(the)38 b(b)s(o)s(dy)d(of)j(the)f(function)g(m)m(ust)g(b)s(e)g (separated)h(from)f(the)g(b)s(o)s(dy)f(b)m(y)h Fs(blank)p -Ft(s)f(or)h(newlines.)60 b(This)150 1847 y(is)37 b(b)s(ecause)h(the)h -(braces)f(are)h(reserv)m(ed)f(w)m(ords)g(and)f(are)i(only)e(recognized) -i(as)f(suc)m(h)g(when)f(they)i(are)150 1956 y(separated)e(b)m(y)g -(whitespace.)60 b(Also,)38 b(when)e(using)f(the)i(braces,)i(the)e -Fq(list)h Ft(m)m(ust)e(b)s(e)g(terminated)h(b)m(y)g(a)150 -2066 y(semicolon,)30 b(a)h(`)p Fs(&)p Ft(',)f(or)h(a)g(newline.)275 -2217 y(When)h(a)i(function)e(is)g(executed,)j(the)e(argumen)m(ts)h(to)g -(the)f(function)f(b)s(ecome)h(the)h(p)s(ositional)d(pa-)150 -2326 y(rameters)42 b(during)d(its)i(execution)h(\(see)g(Section)f -(3.4.1)i([P)m(ositional)e(P)m(arameters],)46 b(page)c(15\).)75 -b(The)150 2436 y(sp)s(ecial)35 b(parameter)h(`)p Fs(#)p +Ft(s)f(or)h(newlines.)62 b(This)150 1847 y(is)38 b(b)s(ecause)g(the)h +(braces)f(are)h(reserv)m(ed)f(w)m(ords)g(and)f(are)i(only)f(recognized) +i(as)e(suc)m(h)g(when)f(they)i(are)150 1956 y(separated)e(b)m(y)g +(whitespace.)61 b(Also,)39 b(when)d(using)g(the)h(braces,)i(the)e +Fq(list)j Ft(m)m(ust)c(b)s(e)g(terminated)i(b)m(y)f(a)150 +2066 y(semicolon,)32 b(a)f(`)p Fs(&)p Ft(',)f(or)h(a)g(newline.)275 +2217 y(When)h(a)i(function)f(is)g(executed,)i(the)e(argumen)m(ts)h(to)g +(the)f(function)g(b)s(ecome)g(the)h(p)s(ositional)g(pa-)150 +2326 y(rameters)42 b(during)e(its)i(execution)h(\(see)f(Section)g +(3.4.1)h([P)m(ositional)h(P)m(arameters],)i(page)c(15\).)75 +b(The)150 2436 y(sp)s(ecial)37 b(parameter)f(`)p Fs(#)p Ft(')g(that)h(expands)e(to)i(the)f(n)m(um)m(b)s(er)f(of)h(p)s -(ositional)e(parameters)i(is)f(up)s(dated)g(to)150 2545 -y(re\015ect)h(the)f(c)m(hange.)56 b(Sp)s(ecial)33 b(parameter)j -Fs(0)f Ft(is)f(unc)m(hanged.)54 b(The)35 b(\014rst)f(elemen)m(t)i(of)f -(the)g Fs(FUNCNAME)150 2655 y Ft(v)-5 b(ariable)25 b(is)h(set)h(to)h -(the)f(name)f(of)h(the)g(function)e(while)g(the)i(function)e(is)h -(executing.)39 b(All)26 b(other)h(asp)s(ects)150 2765 -y(of)32 b(the)g(shell)e(execution)j(en)m(vironmen)m(t)e(are)i(iden)m -(tical)d(b)s(et)m(w)m(een)j(a)f(function)f(and)g(its)h(caller)f(with)g -(the)150 2874 y(exception)25 b(that)h(the)f Fs(DEBUG)f -Ft(trap)h(b)s(elo)m(w\))g(is)f(not)i(inherited)c(unless)i(the)h -(function)f(has)h(b)s(een)g(giv)m(en)g(the)150 2984 y -Fs(trace)36 b Ft(attribute)g(using)g(the)h Fs(declare)e -Ft(builtin)e(or)k(the)g Fs(-o)30 b(functrace)35 b Ft(option)h(has)h(b)s -(een)f(enabled)150 3093 y(with)c(the)h Fs(set)g Ft(builtin,)e(\(in)h -(whic)m(h)g(case)i(all)e(functions)g(inherit)f(the)j -Fs(DEBUG)e Ft(trap\).)49 b(See)34 b(Section)f(4.1)150 -3203 y([Bourne)d(Shell)f(Builtins],)f(page)j(33,)g(for)g(the)f -(description)f(of)h(the)h Fs(trap)e Ft(builtin.)275 3354 -y(If)37 b(the)g(builtin)d(command)k Fs(return)d Ft(is)i(executed)h(in)f -(a)h(function,)g(the)f(function)g(completes)h(and)150 -3463 y(execution)24 b(resumes)f(with)g(the)h(next)g(command)f(after)i -(the)f(function)e(call.)38 b(An)m(y)24 b(command)f(asso)s(ciated)150 -3573 y(with)35 b(the)i Fs(RETURN)d Ft(trap)i(is)g(executed)h(b)s(efore) -f(execution)h(resumes.)57 b(When)37 b(a)f(function)f(completes,)150 -3682 y(the)i(v)-5 b(alues)37 b(of)g(the)g(p)s(ositional)e(parameters)i -(and)g(the)g(sp)s(ecial)f(parameter)h(`)p Fs(#)p Ft(')g(are)h(restored) -f(to)h(the)150 3792 y(v)-5 b(alues)25 b(they)g(had)g(prior)e(to)j(the)g -(function's)e(execution.)39 b(If)25 b(a)h(n)m(umeric)e(argumen)m(t)i -(is)e(giv)m(en)h(to)h Fs(return)p Ft(,)150 3902 y(that)j(is)f(the)g -(function's)g(return)f(status;)j(otherwise)e(the)g(function's)g(return) -f(status)i(is)e(the)i(exit)g(status)150 4011 y(of)i(the)f(last)g -(command)g(executed)i(b)s(efore)e(the)g Fs(return)p Ft(.)275 -4162 y(V)-8 b(ariables)29 b(lo)s(cal)g(to)h(the)g(function)e(ma)m(y)j -(b)s(e)e(declared)g(with)f(the)i Fs(local)f Ft(builtin.)37 -b(These)29 b(v)-5 b(ariables)150 4271 y(are)31 b(visible)d(only)h(to)i -(the)g(function)e(and)h(the)g(commands)g(it)g(in)m(v)m(ok)m(es.)275 -4422 y(F)-8 b(unction)37 b(names)g(and)g(de\014nitions)e(ma)m(y)k(b)s -(e)e(listed)f(with)g(the)i(`)p Fs(-f)p Ft(')f(option)g(to)i(the)e -Fs(declare)f Ft(or)150 4532 y Fs(typeset)d Ft(builtin)e(commands)k -(\(see)h(Section)f(4.2)h([Bash)f(Builtins],)f(page)i(39\).)55 -b(The)35 b(`)p Fs(-F)p Ft(')g(option)f(to)150 4641 y -Fs(declare)g Ft(or)i Fs(typeset)e Ft(will)f(list)i(the)h(function)f -(names)h(only)f(\(and)h(optionally)e(the)i(source)g(\014le)g(and)150 -4751 y(line)31 b(n)m(um)m(b)s(er,)i(if)e(the)i Fs(extdebug)e -Ft(shell)g(option)h(is)g(enabled\).)48 b(F)-8 b(unctions)32 -b(ma)m(y)i(b)s(e)e(exp)s(orted)g(so)h(that)150 4861 y(subshells)d -(automatically)k(ha)m(v)m(e)g(them)g(de\014ned)e(with)g(the)h(`)p -Fs(-f)p Ft(')h(option)f(to)h(the)f Fs(export)f Ft(builtin)e(\(see)150 -4970 y(Section)i(4.1)h([Bourne)f(Shell)e(Builtins],)h(page)i(33\).)47 -b(Note)33 b(that)g(shell)d(functions)h(and)g(v)-5 b(ariables)31 -b(with)150 5080 y(the)f(same)g(name)g(ma)m(y)g(result)f(in)g(m)m -(ultiple)e(iden)m(tically-named)h(en)m(tries)i(in)e(the)i(en)m -(vironmen)m(t)f(passed)150 5189 y(to)i(the)g(shell's)d(c)m(hildren.)39 -b(Care)30 b(should)f(b)s(e)g(tak)m(en)j(in)d(cases)i(where)f(this)f(ma) -m(y)i(cause)g(a)g(problem.)275 5340 y(F)-8 b(unctions)29 -b(ma)m(y)i(b)s(e)f(recursiv)m(e.)40 b(No)31 b(limit)d(is)i(placed)g(on) -g(the)g(n)m(um)m(b)s(er)g(of)g(recursiv)m(e)g(calls.)p -eop +(ositional)h(parameters)f(is)g(up)s(dated)f(to)150 2545 +y(re\015ect)h(the)f(c)m(hange.)56 b(Sp)s(ecial)35 b(parameter)h +Fs(0)f Ft(is)g(unc)m(hanged.)54 b(The)35 b(\014rst)f(elemen)m(t)j(of)e +(the)g Fs(FUNCNAME)150 2655 y Ft(v)-5 b(ariable)27 b(is)g(set)g(to)h +(the)f(name)f(of)h(the)g(function)f(while)h(the)g(function)f(is)h +(executing.)40 b(All)28 b(other)f(asp)s(ects)150 2765 +y(of)32 b(the)g(shell)g(execution)i(en)m(vironmen)m(t)e(are)h(iden)m +(tical)g(b)s(et)m(w)m(een)g(a)f(function)g(and)f(its)i(caller)g(with)f +(the)150 2874 y(exception)26 b(that)g(the)f Fs(DEBUG)f +Ft(trap)h(b)s(elo)m(w\))h(is)f(not)h(inherited)e(unless)h(the)g +(function)g(has)g(b)s(een)g(giv)m(en)h(the)150 2984 y +Fs(trace)36 b Ft(attribute)h(using)g(the)g Fs(declare)e +Ft(builtin)h(or)h(the)g Fs(-o)30 b(functrace)35 b Ft(option)i(has)g(b)s +(een)f(enabled)150 3093 y(with)d(the)g Fs(set)g Ft(builtin,)h(\(in)f +(whic)m(h)g(case)h(all)g(functions)f(inherit)g(the)h +Fs(DEBUG)e Ft(trap\).)49 b(See)34 b(Section)g(4.1)150 +3203 y([Bourne)c(Shell)h(Builtins],)g(page)g(33,)g(for)g(the)f +(description)h(of)f(the)h Fs(trap)e Ft(builtin.)275 3354 +y(If)37 b(the)g(builtin)g(command)h Fs(return)d Ft(is)j(executed)g(in)g +(a)g(function,)h(the)e(function)h(completes)h(and)150 +3463 y(execution)25 b(resumes)e(with)h(the)g(next)g(command)f(after)i +(the)f(function)f(call.)40 b(An)m(y)24 b(command)f(asso)s(ciated)150 +3573 y(with)36 b(the)h Fs(RETURN)d Ft(trap)i(is)h(executed)g(b)s(efore) +f(execution)i(resumes.)57 b(When)37 b(a)f(function)g(completes,)150 +3682 y(the)h(v)-5 b(alues)38 b(of)f(the)g(p)s(ositional)h(parameters)f +(and)g(the)g(sp)s(ecial)h(parameter)f(`)p Fs(#)p Ft(')g(are)h(restored) +f(to)h(the)150 3792 y(v)-5 b(alues)26 b(they)f(had)g(prior)f(to)i(the)g +(function's)f(execution.)40 b(If)25 b(a)h(n)m(umeric)f(argumen)m(t)h +(is)f(giv)m(en)h(to)g Fs(return)p Ft(,)150 3902 y(that)j(is)g(the)f +(function's)h(return)e(status;)j(otherwise)f(the)f(function's)h(return) +e(status)i(is)f(the)h(exit)h(status)150 4011 y(of)h(the)f(last)h +(command)f(executed)i(b)s(efore)e(the)g Fs(return)p Ft(.)275 +4162 y(V)-8 b(ariables)31 b(lo)s(cal)g(to)f(the)g(function)f(ma)m(y)i +(b)s(e)e(declared)h(with)f(the)h Fs(local)f Ft(builtin.)40 +b(These)29 b(v)-5 b(ariables)150 4271 y(are)31 b(visible)g(only)f(to)h +(the)g(function)f(and)g(the)g(commands)g(it)h(in)m(v)m(ok)m(es.)275 +4422 y(F)-8 b(unction)38 b(names)f(and)g(de\014nitions)g(ma)m(y)i(b)s +(e)e(listed)h(with)f(the)h(`)p Fs(-f)p Ft(')f(option)h(to)h(the)e +Fs(declare)f Ft(or)150 4532 y Fs(typeset)d Ft(builtin)h(commands)h +(\(see)h(Section)g(4.2)g([Bash)f(Builtins],)i(page)f(39\).)55 +b(The)35 b(`)p Fs(-F)p Ft(')g(option)g(to)150 4641 y +Fs(declare)f Ft(or)i Fs(typeset)e Ft(will)i(list)h(the)f(function)g +(names)g(only)g(\(and)g(optionally)h(the)f(source)g(\014le)h(and)150 +4751 y(line)c(n)m(um)m(b)s(er,)g(if)f(the)h Fs(extdebug)e +Ft(shell)i(option)g(is)g(enabled\).)49 b(F)-8 b(unctions)33 +b(ma)m(y)h(b)s(e)e(exp)s(orted)g(so)h(that)150 4861 y(subshells)f +(automatically)37 b(ha)m(v)m(e)d(them)g(de\014ned)e(with)h(the)g(`)p +Fs(-f)p Ft(')h(option)g(to)g(the)f Fs(export)f Ft(builtin)h(\(see)150 +4970 y(Section)g(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(33\).)47 +b(Note)33 b(that)g(shell)f(functions)g(and)f(v)-5 b(ariables)33 +b(with)150 5080 y(the)d(same)g(name)g(ma)m(y)g(result)g(in)g(m)m +(ultiple)g(iden)m(tically-named)i(en)m(tries)f(in)e(the)h(en)m +(vironmen)m(t)g(passed)150 5189 y(to)h(the)g(shell's)f(c)m(hildren.)41 +b(Care)30 b(should)g(b)s(e)f(tak)m(en)j(in)e(cases)h(where)f(this)g(ma) +m(y)h(cause)g(a)g(problem.)275 5340 y(F)-8 b(unctions)30 +b(ma)m(y)h(b)s(e)f(recursiv)m(e.)41 b(No)31 b(limit)g(is)g(placed)g(on) +f(the)g(n)m(um)m(b)s(er)g(of)g(recursiv)m(e)h(calls.)p +eop end %%Page: 15 21 -15 20 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(15)150 299 y Fr(3.4)68 -b(Shell)45 b(P)l(arameters)275 544 y Ft(A)32 b Fq(parameter)40 -b Ft(is)31 b(an)i(en)m(tit)m(y)g(that)g(stores)g(v)-5 -b(alues.)47 b(It)33 b(can)g(b)s(e)e(a)i Fs(name)p Ft(,)g(a)g(n)m(um)m -(b)s(er,)f(or)g(one)h(of)g(the)150 654 y(sp)s(ecial)g(c)m(haracters)j -(listed)e(b)s(elo)m(w.)52 b(A)35 b Fq(v)-5 b(ariable)39 -b Ft(is)33 b(a)i(parameter)h(denoted)e(b)m(y)h(a)g Fs(name)p +TeXDict begin 15 20 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(15)150 299 +y Fr(3.4)68 b(Shell)45 b(P)l(arameters)275 544 y Ft(A)32 +b Fq(parameter)40 b Ft(is)32 b(an)h(en)m(tit)m(y)h(that)f(stores)g(v)-5 +b(alues.)48 b(It)33 b(can)g(b)s(e)e(a)i Fs(name)p Ft(,)g(a)g(n)m(um)m +(b)s(er,)f(or)g(one)h(of)g(the)150 654 y(sp)s(ecial)i(c)m(haracters)h +(listed)g(b)s(elo)m(w.)53 b(A)35 b Fq(v)-5 b(ariable)41 +b Ft(is)34 b(a)h(parameter)h(denoted)e(b)m(y)h(a)g Fs(name)p Ft(.)52 b(A)35 b(v)-5 b(ariable)150 764 y(has)29 b(a)h -Fq(v)-5 b(alue)34 b Ft(and)28 b(zero)j(or)e(more)g Fq(attributes)p -Ft(.)40 b(A)m(ttributes)29 b(are)h(assigned)f(using)f(the)h +Fq(v)-5 b(alue)35 b Ft(and)28 b(zero)j(or)e(more)g Fq(attributes)p +Ft(.)41 b(A)m(ttributes)30 b(are)g(assigned)g(using)f(the)g Fs(declare)e Ft(builtin)150 873 y(command)22 b(\(see)h(the)f -(description)e(of)i(the)g Fs(declare)f Ft(builtin)d(in)j(Section)h(4.2) -h([Bash)f(Builtins],)g(page)g(39\).)275 1009 y(A)28 b(parameter)h(is)f -(set)h(if)e(it)h(has)g(b)s(een)g(assigned)g(a)h(v)-5 -b(alue.)39 b(The)28 b(n)m(ull)f(string)g(is)h(a)h(v)-5 -b(alid)26 b(v)-5 b(alue.)40 b(Once)150 1119 y(a)31 b(v)-5 -b(ariable)29 b(is)g(set,)j(it)d(ma)m(y)i(b)s(e)f(unset)g(only)g(b)m(y)g -(using)f(the)h Fs(unset)f Ft(builtin)e(command.)275 1254 -y(A)j(v)-5 b(ariable)29 b(ma)m(y)i(b)s(e)f(assigned)f(to)j(b)m(y)e(a)h +(description)g(of)g(the)g Fs(declare)f Ft(builtin)g(in)h(Section)h(4.2) +g([Bash)f(Builtins],)j(page)d(39\).)275 1009 y(A)28 b(parameter)h(is)g +(set)g(if)f(it)h(has)f(b)s(een)g(assigned)h(a)g(v)-5 +b(alue.)40 b(The)28 b(n)m(ull)h(string)f(is)h(a)g(v)-5 +b(alid)28 b(v)-5 b(alue.)41 b(Once)150 1119 y(a)31 b(v)-5 +b(ariable)31 b(is)f(set,)i(it)e(ma)m(y)h(b)s(e)f(unset)g(only)h(b)m(y)f +(using)g(the)g Fs(unset)f Ft(builtin)h(command.)275 1254 +y(A)g(v)-5 b(ariable)31 b(ma)m(y)g(b)s(e)f(assigned)g(to)i(b)m(y)e(a)h (statemen)m(t)h(of)e(the)h(form)390 1390 y Fj(name)11 b Fs(=[)p Fj(value)g Fs(])150 1526 y Ft(If)34 b Fq(v)-5 -b(alue)39 b Ft(is)34 b(not)h(giv)m(en,)g(the)g(v)-5 b(ariable)33 -b(is)h(assigned)g(the)g(n)m(ull)f(string.)52 b(All)33 -b Fq(v)-5 b(alue)5 b Ft(s)34 b(undergo)g(tilde)f(ex-)150 -1636 y(pansion,)i(parameter)g(and)f(v)-5 b(ariable)34 -b(expansion,)g(command)h(substitution,)f(arithmetic)g(expansion,)150 -1745 y(and)40 b(quote)h(remo)m(v)-5 b(al)41 b(\(detailed)g(b)s(elo)m -(w\).)71 b(If)40 b(the)h(v)-5 b(ariable)39 b(has)i(its)f -Fs(integer)f Ft(attribute)h(set,)k(then)150 1855 y Fq(v)-5 -b(alue)37 b Ft(is)32 b(ev)-5 b(aluated)33 b(as)g(an)g(arithmetic)f -(expression)g(ev)m(en)i(if)d(the)i Fs($\(\(...)o(\)\))f -Ft(expansion)g(is)g(not)h(used)150 1965 y(\(see)e(Section)f(3.5.5)j -([Arithmetic)c(Expansion],)g(page)i(21\).)42 b(W)-8 b(ord)31 -b(splitting)d(is)i(not)g(p)s(erformed,)f(with)150 2074 -y(the)35 b(exception)g(of)g Fs("$@")f Ft(as)h(explained)e(b)s(elo)m(w.) -53 b(Filename)34 b(expansion)g(is)g(not)h(p)s(erformed.)53 -b(Assign-)150 2184 y(men)m(t)33 b(statemen)m(ts)h(ma)m(y)f(also)f(app)s -(ear)g(as)g(argumen)m(ts)h(to)g(the)g Fs(alias)p Ft(,)e -Fs(declare)p Ft(,)g Fs(typeset)p Ft(,)g Fs(export)p Ft(,)150 -2293 y Fs(readonly)p Ft(,)d(and)i Fs(local)f Ft(builtin)e(commands.)150 +b(alue)40 b Ft(is)35 b(not)g(giv)m(en,)h(the)f(v)-5 b(ariable)35 +b(is)g(assigned)g(the)f(n)m(ull)h(string.)53 b(All)35 +b Fq(v)-5 b(alue)5 b Ft(s)35 b(undergo)f(tilde)h(ex-)150 +1636 y(pansion,)h(parameter)f(and)f(v)-5 b(ariable)36 +b(expansion,)f(command)g(substitution,)h(arithmetic)g(expansion,)150 +1745 y(and)k(quote)h(remo)m(v)-5 b(al)42 b(\(detailed)h(b)s(elo)m(w\).) +72 b(If)40 b(the)h(v)-5 b(ariable)41 b(has)g(its)g Fs(integer)e +Ft(attribute)i(set,)j(then)150 1855 y Fq(v)-5 b(alue)38 +b Ft(is)33 b(ev)-5 b(aluated)34 b(as)f(an)g(arithmetic)h(expression)f +(ev)m(en)h(if)e(the)h Fs($\(\(...)o(\)\))f Ft(expansion)h(is)g(not)g +(used)150 1965 y(\(see)e(Section)g(3.5.5)i([Arithmetic)e(Expansion],)f +(page)h(21\).)42 b(W)-8 b(ord)31 b(splitting)g(is)g(not)f(p)s +(erformed,)f(with)150 2074 y(the)35 b(exception)h(of)f +Fs("$@")f Ft(as)h(explained)g(b)s(elo)m(w.)54 b(Filename)36 +b(expansion)f(is)g(not)g(p)s(erformed.)53 b(Assign-)150 +2184 y(men)m(t)33 b(statemen)m(ts)h(ma)m(y)f(also)g(app)s(ear)f(as)g +(argumen)m(ts)h(to)g(the)g Fs(alias)p Ft(,)e Fs(declare)p +Ft(,)g Fs(typeset)p Ft(,)g Fs(export)p Ft(,)150 2293 +y Fs(readonly)p Ft(,)d(and)i Fs(local)f Ft(builtin)h(commands.)150 2520 y Fk(3.4.1)63 b(P)m(ositional)41 b(P)m(arameters)275 -2766 y Ft(A)36 b Fq(p)s(ositional)f(parameter)44 b Ft(is)36 -b(a)h(parameter)g(denoted)g(b)m(y)g(one)g(or)g(more)g(digits,)g(other)g -(than)g(the)150 2875 y(single)i(digit)f Fs(0)p Ft(.)69 -b(P)m(ositional)39 b(parameters)i(are)f(assigned)f(from)h(the)g -(shell's)e(argumen)m(ts)i(when)f(it)h(is)150 2985 y(in)m(v)m(ok)m(ed,)f -(and)e(ma)m(y)g(b)s(e)g(reassigned)f(using)f(the)j Fs(set)e -Ft(builtin)d(command.)61 b(P)m(ositional)36 b(parameter)h +2766 y Ft(A)36 b Fq(p)s(ositional)i(parameter)44 b Ft(is)37 +b(a)g(parameter)g(denoted)g(b)m(y)g(one)g(or)g(more)g(digits,)i(other)e +(than)g(the)150 2875 y(single)k(digit)f Fs(0)p Ft(.)69 +b(P)m(ositional)42 b(parameters)f(are)f(assigned)g(from)g(the)g +(shell's)g(argumen)m(ts)g(when)f(it)i(is)150 2985 y(in)m(v)m(ok)m(ed,)f +(and)d(ma)m(y)g(b)s(e)g(reassigned)g(using)f(the)i Fs(set)e +Ft(builtin)g(command.)61 b(P)m(ositional)39 b(parameter)e Fs(N)150 3094 y Ft(ma)m(y)27 b(b)s(e)g(referenced)f(as)h -Fs(${N})p Ft(,)g(or)g(as)g Fs($N)f Ft(when)g Fs(N)g Ft(consists)h(of)g -(a)g(single)e(digit.)39 b(P)m(ositional)26 b(parameters)150 -3204 y(ma)m(y)32 b(not)f(b)s(e)g(assigned)g(to)h(with)e(assignmen)m(t)h +Fs(${N})p Ft(,)g(or)g(as)g Fs($N)f Ft(when)g Fs(N)g Ft(consists)i(of)f +(a)g(single)g(digit.)41 b(P)m(ositional)29 b(parameters)150 +3204 y(ma)m(y)j(not)f(b)s(e)g(assigned)h(to)g(with)f(assignmen)m(t)h (statemen)m(ts.)45 b(The)30 b Fs(set)h Ft(and)g Fs(shift)e -Ft(builtins)f(are)k(used)150 3314 y(to)h(set)f(and)f(unset)h(them)g -(\(see)h(Chapter)e(4)h([Shell)e(Builtin)g(Commands],)h(page)i(33\).)47 +Ft(builtins)i(are)h(used)150 3314 y(to)h(set)f(and)f(unset)h(them)g +(\(see)h(Chapter)e(4)h([Shell)g(Builtin)h(Commands],)e(page)i(33\).)47 b(The)31 b(p)s(ositional)150 3423 y(parameters)24 b(are)g(temp)s -(orarily)e(replaced)i(when)e(a)j(shell)d(function)g(is)h(executed)i -(\(see)f(Section)g(3.3)h([Shell)150 3533 y(F)-8 b(unctions],)30 -b(page)i(13\).)275 3669 y(When)27 b(a)i(p)s(ositional)d(parameter)j -(consisting)d(of)j(more)f(than)g(a)g(single)f(digit)g(is)g(expanded,)h -(it)g(m)m(ust)150 3778 y(b)s(e)i(enclosed)g(in)f(braces.)150 +(orarily)g(replaced)h(when)d(a)j(shell)f(function)f(is)h(executed)h +(\(see)f(Section)h(3.3)g([Shell)150 3533 y(F)-8 b(unctions],)31 +b(page)h(13\).)275 3669 y(When)27 b(a)i(p)s(ositional)g(parameter)g +(consisting)f(of)h(more)f(than)g(a)g(single)h(digit)g(is)f(expanded,)g +(it)h(m)m(ust)150 3778 y(b)s(e)h(enclosed)h(in)f(braces.)150 4005 y Fk(3.4.2)63 b(Sp)s(ecial)41 b(P)m(arameters)275 -4251 y Ft(The)27 b(shell)f(treats)j(sev)m(eral)f(parameters)h(sp)s -(ecially)-8 b(.)38 b(These)28 b(parameters)g(ma)m(y)g(only)f(b)s(e)h -(referenced;)150 4360 y(assignmen)m(t)i(to)h(them)g(is)e(not)i(allo)m +4251 y Ft(The)27 b(shell)h(treats)h(sev)m(eral)g(parameters)g(sp)s +(ecially)-8 b(.)41 b(These)28 b(parameters)g(ma)m(y)g(only)g(b)s(e)g +(referenced;)150 4360 y(assignmen)m(t)j(to)g(them)g(is)f(not)h(allo)m (w)m(ed.)150 4522 y Fs(*)432 b Ft(Expands)29 b(to)h(the)h(p)s -(ositional)c(parameters,)k(starting)f(from)f(one.)41 -b(When)30 b(the)g(expansion)630 4631 y(o)s(ccurs)e(within)d(double)i -(quotes,)i(it)f(expands)f(to)i(a)f(single)f(w)m(ord)h(with)f(the)h(v)-5 -b(alue)28 b(of)g(eac)m(h)630 4741 y(parameter)i(separated)g(b)m(y)f -(the)g(\014rst)g(c)m(haracter)i(of)e(the)h Fs(IFS)e Ft(sp)s(ecial)g(v) --5 b(ariable.)39 b(That)30 b(is,)630 4850 y Fs("$*")h -Ft(is)h(equiv)-5 b(alen)m(t)31 b(to)j Fs("$1)p Fj(c)11 +(ositional)f(parameters,)h(starting)g(from)e(one.)41 +b(When)30 b(the)g(expansion)630 4631 y(o)s(ccurs)e(within)f(double)h +(quotes,)h(it)g(expands)e(to)i(a)f(single)h(w)m(ord)f(with)g(the)g(v)-5 +b(alue)29 b(of)f(eac)m(h)630 4741 y(parameter)i(separated)g(b)m(y)f +(the)g(\014rst)g(c)m(haracter)i(of)e(the)h Fs(IFS)e Ft(sp)s(ecial)i(v) +-5 b(ariable.)41 b(That)30 b(is,)630 4850 y Fs("$*")h +Ft(is)i(equiv)-5 b(alen)m(t)33 b(to)h Fs("$1)p Fj(c)11 b Fs($2)p Fj(c)g Fs(...)l(")p Ft(,)33 b(where)f Fq(c)38 -b Ft(is)31 b(the)i(\014rst)e(c)m(haracter)j(of)f(the)f(v)-5 -b(alue)630 4960 y(of)30 b(the)g Fs(IFS)g Ft(v)-5 b(ariable.)39 -b(If)30 b Fs(IFS)f Ft(is)g(unset,)h(the)g(parameters)g(are)h(separated) -f(b)m(y)g(spaces.)41 b(If)630 5070 y Fs(IFS)29 b Ft(is)h(n)m(ull,)e -(the)j(parameters)g(are)f(joined)g(without)f(in)m(terv)m(ening)h +b Ft(is)32 b(the)h(\014rst)e(c)m(haracter)j(of)f(the)f(v)-5 +b(alue)630 4960 y(of)30 b(the)g Fs(IFS)g Ft(v)-5 b(ariable.)41 +b(If)30 b Fs(IFS)f Ft(is)h(unset,)g(the)g(parameters)g(are)h(separated) +f(b)m(y)g(spaces.)41 b(If)630 5070 y Fs(IFS)29 b Ft(is)i(n)m(ull,)f +(the)h(parameters)g(are)f(joined)h(without)f(in)m(terv)m(ening)i (separators.)150 5230 y Fs(@)432 b Ft(Expands)39 b(to)i(the)g(p)s -(ositional)d(parameters,)44 b(starting)c(from)g(one.)71 -b(When)40 b(the)h(expan-)630 5340 y(sion)30 b(o)s(ccurs)h(within)d -(double)i(quotes,)i(eac)m(h)g(parameter)g(expands)e(to)i(a)f(separate)h -(w)m(ord.)p eop +(ositional)g(parameters,)j(starting)d(from)f(one.)71 +b(When)40 b(the)h(expan-)630 5340 y(sion)31 b(o)s(ccurs)g(within)f +(double)h(quotes,)h(eac)m(h)g(parameter)g(expands)e(to)i(a)f(separate)h +(w)m(ord.)p eop end %%Page: 16 22 -16 21 bop 150 -116 a Ft(16)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(That)38 b(is,)i Fs("$@")d Ft(is)h(equiv)-5 b(alen)m(t)38 -b(to)h Fs("$1")29 b("$2")g(...)o Ft(.)65 b(When)38 b(there)h(are)g(no)f -(p)s(ositional)630 408 y(parameters,)31 b Fs("$@")e Ft(and)h -Fs($@)g Ft(expand)f(to)i(nothing)f(\(i.e.,)h(they)f(are)h(remo)m(v)m -(ed\).)150 568 y Fs(#)432 b Ft(Expands)29 b(to)i(the)g(n)m(um)m(b)s(er) -e(of)h(p)s(ositional)e(parameters)j(in)e(decimal.)150 -727 y Fs(?)432 b Ft(Expands)29 b(to)i(the)g(exit)f(status)h(of)f(the)h -(most)f(recen)m(tly)h(executed)g(foreground)f(pip)s(eline.)150 -886 y Fs(-)432 b Ft(\(A)31 b(h)m(yphen.\))42 b(Expands)30 -b(to)h(the)g(curren)m(t)g(option)g(\015ags)g(as)g(sp)s(eci\014ed)e(up)s -(on)h(in)m(v)m(o)s(cation,)630 996 y(b)m(y)35 b(the)h -Fs(set)e Ft(builtin)e(command,)k(or)g(those)g(set)f(b)m(y)h(the)f -(shell)f(itself)g(\(suc)m(h)h(as)h(the)f(`)p Fs(-i)p -Ft(')630 1105 y(option\).)150 1264 y Fs($)432 b Ft(Expands)39 -b(to)j(the)f(pro)s(cess)f Fl(id)h Ft(of)g(the)g(shell.)71 -b(In)40 b(a)h Fs(\(\))f Ft(subshell,)h(it)f(expands)g(to)i(the)630 -1374 y(pro)s(cess)30 b Fl(id)g Ft(of)h(the)g(in)m(v)m(oking)e(shell,)g -(not)i(the)f(subshell.)150 1533 y Fs(!)432 b Ft(Expands)39 -b(to)i(the)g(pro)s(cess)e Fl(id)i Ft(of)f(the)h(most)g(recen)m(tly)f -(executed)h(bac)m(kground)g(\(asyn-)630 1643 y(c)m(hronous\))30 +TeXDict begin 16 21 bop 150 -116 a Ft(16)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(That)38 b(is,)j Fs("$@")c +Ft(is)i(equiv)-5 b(alen)m(t)40 b(to)f Fs("$1")29 b("$2")g(...)o +Ft(.)65 b(When)38 b(there)h(are)g(no)f(p)s(ositional)630 +408 y(parameters,)31 b Fs("$@")e Ft(and)h Fs($@)g Ft(expand)f(to)i +(nothing)g(\(i.e.,)h(they)e(are)h(remo)m(v)m(ed\).)150 +568 y Fs(#)432 b Ft(Expands)29 b(to)i(the)g(n)m(um)m(b)s(er)e(of)h(p)s +(ositional)h(parameters)g(in)f(decimal.)150 727 y Fs(?)432 +b Ft(Expands)29 b(to)i(the)g(exit)g(status)g(of)f(the)h(most)f(recen)m +(tly)i(executed)f(foreground)f(pip)s(eline.)150 886 y +Fs(-)432 b Ft(\(A)31 b(h)m(yphen.\))42 b(Expands)30 b(to)h(the)g +(curren)m(t)g(option)h(\015ags)f(as)g(sp)s(eci\014ed)f(up)s(on)g(in)m +(v)m(o)s(cation,)630 996 y(b)m(y)35 b(the)h Fs(set)e +Ft(builtin)h(command,)h(or)g(those)g(set)f(b)m(y)h(the)f(shell)h +(itself)g(\(suc)m(h)f(as)h(the)f(`)p Fs(-i)p Ft(')630 +1105 y(option\).)150 1264 y Fs($)432 b Ft(Expands)39 +b(to)j(the)f(pro)s(cess)f Fl(id)h Ft(of)g(the)g(shell.)73 +b(In)40 b(a)h Fs(\(\))f Ft(subshell,)j(it)e(expands)f(to)i(the)630 +1374 y(pro)s(cess)30 b Fl(id)g Ft(of)h(the)g(in)m(v)m(oking)g(shell,)g +(not)g(the)f(subshell.)150 1533 y Fs(!)432 b Ft(Expands)39 +b(to)i(the)g(pro)s(cess)e Fl(id)i Ft(of)f(the)h(most)g(recen)m(tly)g +(executed)g(bac)m(kground)g(\(asyn-)630 1643 y(c)m(hronous\))30 b(command.)150 1802 y Fs(0)432 b Ft(Expands)20 b(to)j(the)f(name)g(of)g -(the)g(shell)e(or)h(shell)f(script.)37 b(This)20 b(is)h(set)h(at)h -(shell)d(initialization.)630 1911 y(If)44 b(Bash)g(is)f(in)m(v)m(ok)m -(ed)i(with)e(a)h(\014le)f(of)i(commands)e(\(see)j(Section)e(3.8)h -([Shell)d(Scripts],)630 2021 y(page)d(31\),)i Fs($0)d -Ft(is)f(set)h(to)h(the)f(name)g(of)g(that)h(\014le.)63 -b(If)37 b(Bash)i(is)e(started)h(with)f(the)h(`)p Fs(-c)p -Ft(')630 2131 y(option)h(\(see)h(Section)g(6.1)g([In)m(v)m(oking)g -(Bash],)i(page)e(63\),)j(then)d Fs($0)e Ft(is)h(set)h(to)g(the)g -(\014rst)630 2240 y(argumen)m(t)31 b(after)g(the)g(string)f(to)h(b)s(e) -f(executed,)i(if)e(one)h(is)e(presen)m(t.)42 b(Otherwise,)30 -b(it)g(is)f(set)630 2350 y(to)i(the)g(\014lename)e(used)h(to)h(in)m(v)m -(ok)m(e)g(Bash,)g(as)g(giv)m(en)f(b)m(y)g(argumen)m(t)h(zero.)150 +(the)g(shell)g(or)f(shell)h(script.)38 b(This)21 b(is)h(set)g(at)h +(shell)f(initialization.)630 1911 y(If)44 b(Bash)g(is)g(in)m(v)m(ok)m +(ed)i(with)e(a)g(\014le)g(of)h(commands)e(\(see)j(Section)f(3.8)g +([Shell)f(Scripts],)630 2021 y(page)39 b(31\),)i Fs($0)d +Ft(is)g(set)g(to)h(the)f(name)g(of)g(that)h(\014le.)64 +b(If)37 b(Bash)i(is)f(started)g(with)g(the)g(`)p Fs(-c)p +Ft(')630 2131 y(option)i(\(see)g(Section)h(6.1)f([In)m(v)m(oking)h +(Bash],)h(page)e(63\),)j(then)d Fs($0)e Ft(is)i(set)g(to)g(the)g +(\014rst)630 2240 y(argumen)m(t)31 b(after)g(the)g(string)g(to)g(b)s(e) +f(executed,)i(if)f(one)g(is)f(presen)m(t.)42 b(Otherwise,)31 +b(it)g(is)f(set)630 2350 y(to)h(the)g(\014lename)f(used)g(to)h(in)m(v)m +(ok)m(e)h(Bash,)f(as)g(giv)m(en)g(b)m(y)f(argumen)m(t)h(zero.)150 2509 y Fs(_)432 b Ft(\(An)34 b(underscore.\))50 b(A)m(t)34 -b(shell)e(startup,)j(set)f(to)g(the)g(absolute)f(\014lename)g(of)h(the) -g(shell)e(or)630 2619 y(shell)j(script)i(b)s(eing)e(executed)j(as)g -(passed)f(in)f(the)h(argumen)m(t)h(list.)60 b(Subsequen)m(tly)-8 -b(,)37 b(ex-)630 2728 y(pands)f(to)i(the)g(last)f(argumen)m(t)h(to)h -(the)e(previous)f(command,)j(after)f(expansion.)61 b(Also)630 -2838 y(set)30 b(to)f(the)h(full)c(pathname)j(of)h(eac)m(h)g(command)f -(executed)h(and)e(placed)h(in)e(the)j(en)m(viron-)630 +b(shell)g(startup,)h(set)f(to)g(the)g(absolute)g(\014lename)g(of)g(the) +g(shell)g(or)630 2619 y(shell)j(script)h(b)s(eing)e(executed)i(as)g +(passed)f(in)g(the)g(argumen)m(t)h(list.)62 b(Subsequen)m(tly)-8 +b(,)38 b(ex-)630 2728 y(pands)e(to)i(the)g(last)g(argumen)m(t)g(to)h +(the)e(previous)g(command,)i(after)f(expansion.)62 b(Also)630 +2838 y(set)30 b(to)f(the)h(full)e(pathname)h(of)h(eac)m(h)g(command)f +(executed)h(and)e(placed)i(in)e(the)i(en)m(viron-)630 2947 y(men)m(t)37 b(exp)s(orted)f(to)h(that)h(command.)58 -b(When)37 b(c)m(hec)m(king)g(mail,)g(this)e(parameter)i(holds)630 -3057 y(the)31 b(name)f(of)h(the)f(mail)f(\014le.)150 -3314 y Fr(3.5)68 b(Shell)45 b(Expansions)275 3558 y Ft(Expansion)28 -b(is)h(p)s(erformed)f(on)i(the)g(command)g(line)e(after)j(it)e(has)h(b) -s(een)f(split)f(in)m(to)i Fs(token)p Ft(s.)39 b(There)150 -3667 y(are)31 b(sev)m(en)g(kinds)d(of)j(expansion)e(p)s(erformed:)225 +b(When)37 b(c)m(hec)m(king)h(mail,)h(this)d(parameter)h(holds)630 +3057 y(the)31 b(name)f(of)h(the)f(mail)h(\014le.)150 +3314 y Fr(3.5)68 b(Shell)45 b(Expansions)275 3558 y Ft(Expansion)29 +b(is)h(p)s(erformed)e(on)i(the)g(command)g(line)g(after)h(it)f(has)g(b) +s(een)f(split)h(in)m(to)h Fs(token)p Ft(s.)39 b(There)150 +3667 y(are)31 b(sev)m(en)g(kinds)e(of)i(expansion)f(p)s(erformed:)225 3802 y Fp(\017)60 b Ft(brace)31 b(expansion)225 3936 -y Fp(\017)60 b Ft(tilde)29 b(expansion)225 4071 y Fp(\017)60 -b Ft(parameter)31 b(and)f(v)-5 b(ariable)29 b(expansion)225 +y Fp(\017)60 b Ft(tilde)31 b(expansion)225 4071 y Fp(\017)60 +b Ft(parameter)31 b(and)f(v)-5 b(ariable)31 b(expansion)225 4205 y Fp(\017)60 b Ft(command)30 b(substitution)225 -4339 y Fp(\017)60 b Ft(arithmetic)30 b(expansion)225 +4339 y Fp(\017)60 b Ft(arithmetic)32 b(expansion)225 4474 y Fp(\017)60 b Ft(w)m(ord)30 b(splitting)225 4608 -y Fp(\017)60 b Ft(\014lename)30 b(expansion)275 4767 -y(The)j(order)g(of)h(expansions)f(is:)46 b(brace)34 b(expansion,)g -(tilde)f(expansion,)g(parameter,)j(v)-5 b(ariable,)34 -b(and)150 4877 y(arithmetic)44 b(expansion)g(and)h(command)f -(substitution)f(\(done)i(in)f(a)h(left-to-righ)m(t)h(fashion\),)i(w)m -(ord)150 4986 y(splitting,)28 b(and)i(\014lename)g(expansion.)275 -5121 y(On)42 b(systems)h(that)h(can)g(supp)s(ort)e(it,)k(there)e(is)e -(an)i(additional)d(expansion)h(a)m(v)-5 b(ailable:)66 -b Fq(pro)s(cess)150 5230 y(substitution)p Ft(.)59 b(This)35 -b(is)h(p)s(erformed)g(at)i(the)f(same)h(time)e(as)i(parameter,)h(v)-5 -b(ariable,)38 b(and)f(arithmetic)150 5340 y(expansion)29 -b(and)h(command)g(substitution.)p eop +y Fp(\017)60 b Ft(\014lename)31 b(expansion)275 4767 +y(The)i(order)g(of)h(expansions)g(is:)47 b(brace)34 b(expansion,)h +(tilde)g(expansion,)f(parameter,)i(v)-5 b(ariable,)36 +b(and)150 4877 y(arithmetic)46 b(expansion)f(and)g(command)f +(substitution)h(\(done)g(in)g(a)g(left-to-righ)m(t)j(fashion\),)h(w)m +(ord)150 4986 y(splitting,)31 b(and)f(\014lename)h(expansion.)275 +5121 y(On)42 b(systems)h(that)h(can)g(supp)s(ort)e(it,)47 +b(there)d(is)f(an)h(additional)g(expansion)f(a)m(v)-5 +b(ailable:)69 b Fq(pro)s(cess)150 5230 y(substitution)p +Ft(.)61 b(This)36 b(is)h(p)s(erformed)f(at)i(the)f(same)h(time)f(as)h +(parameter,)h(v)-5 b(ariable,)40 b(and)d(arithmetic)150 +5340 y(expansion)30 b(and)g(command)g(substitution.)p +eop end %%Page: 17 23 -17 22 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(17)275 299 y(Only)34 -b(brace)j(expansion,)g(w)m(ord)f(splitting,)g(and)g(\014lename)f -(expansion)g(can)i(c)m(hange)h(the)e(n)m(um)m(b)s(er)150 -408 y(of)h(w)m(ords)f(of)g(the)h(expansion;)h(other)f(expansions)e -(expand)h(a)h(single)e(w)m(ord)h(to)h(a)g(single)e(w)m(ord.)58 -b(The)150 518 y(only)31 b(exceptions)i(to)g(this)e(are)i(the)f -(expansions)f(of)i Fs("$@")e Ft(\(see)i(Section)f(3.4.2)i([Sp)s(ecial)d -(P)m(arameters],)150 628 y(page)g(15\))h(and)d Fs("${)p -Fj(name)11 b Fs([@]}")27 b Ft(\(see)k(Section)g(6.7)g([Arra)m(ys],)g -(page)g(72\).)275 787 y(After)41 b(all)g(expansions,)i -Fs(quote)29 b(removal)40 b Ft(\(see)i(Section)g(3.5.9)h([Quote)f(Remo)m -(v)-5 b(al],)46 b(page)c(24\))h(is)150 897 y(p)s(erformed.)150 +TeXDict begin 17 22 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(17)275 299 +y(Only)35 b(brace)i(expansion,)h(w)m(ord)e(splitting,)j(and)d +(\014lename)g(expansion)g(can)h(c)m(hange)h(the)e(n)m(um)m(b)s(er)150 +408 y(of)h(w)m(ords)f(of)g(the)h(expansion;)i(other)e(expansions)f +(expand)g(a)h(single)g(w)m(ord)f(to)h(a)g(single)g(w)m(ord.)58 +b(The)150 518 y(only)32 b(exceptions)i(to)f(this)f(are)h(the)f +(expansions)g(of)h Fs("$@")e Ft(\(see)i(Section)g(3.4.2)h([Sp)s(ecial)f +(P)m(arameters],)150 628 y(page)e(15\))h(and)d Fs("${)p +Fj(name)11 b Fs([@]}")27 b Ft(\(see)k(Section)h(6.7)f([Arra)m(ys],)g +(page)g(72\).)275 787 y(After)41 b(all)i(expansions,)h +Fs(quote)29 b(removal)40 b Ft(\(see)i(Section)h(3.5.9)g([Quote)f(Remo)m +(v)-5 b(al],)47 b(page)42 b(24\))h(is)150 897 y(p)s(erformed.)150 1172 y Fk(3.5.1)63 b(Brace)40 b(Expansion)275 1441 y -Ft(Brace)21 b(expansion)f(is)g(a)h(mec)m(hanism)f(b)m(y)h(whic)m(h)e -(arbitrary)h(strings)f(ma)m(y)j(b)s(e)e(generated.)38 -b(This)19 b(mec)m(h-)150 1551 y(anism)34 b(is)h(similar)d(to)k -Fq(\014lename)f(expansion)f Ft(\(see)j(Section)e(3.5.8)i([Filename)e -(Expansion],)g(page)h(22\),)150 1660 y(but)31 b(the)h(\014le)f(names)g -(generated)i(need)f(not)g(exist.)44 b(P)m(atterns)33 +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 1551 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(22\),)150 1660 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 -1770 y(of)26 b(an)f(optional)f Fq(pream)m(ble)p Ft(,)i(follo)m(w)m(ed)f -(b)m(y)h(either)f(a)g(series)g(of)h(comma-separated)h(strings)d(or)h(a) -h(sequnce)150 1879 y(expression)35 b(b)s(et)m(w)m(een)h(a)h(pair)d(of)j -(braces,)g(follo)m(w)m(ed)f(b)m(y)g(an)g(optional)f Fq(p)s(ostscript)p -Ft(.)56 b(The)36 b(pream)m(ble)f(is)150 1989 y(pre\014xed)28 -b(to)h(eac)m(h)h(string)e(con)m(tained)h(within)d(the)j(braces,)g(and)g -(the)g(p)s(ostscript)e(is)h(then)g(app)s(ended)f(to)150 -2099 y(eac)m(h)32 b(resulting)c(string,)i(expanding)e(left)j(to)g(righ) -m(t.)275 2258 y(Brace)37 b(expansions)e(ma)m(y)i(b)s(e)f(nested.)59 -b(The)36 b(results)f(of)i(eac)m(h)g(expanded)f(string)f(are)i(not)g -(sorted;)150 2368 y(left)30 b(to)h(righ)m(t)f(order)g(is)f(preserv)m +1770 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 1879 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 1989 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 +(the)g(p)s(ostscript)f(is)h(then)f(app)s(ended)f(to)150 +2099 y(eac)m(h)32 b(resulting)e(string,)h(expanding)e(left)j(to)f(righ) +m(t.)275 2258 y(Brace)37 b(expansions)f(ma)m(y)h(b)s(e)f(nested.)59 +b(The)36 b(results)g(of)h(eac)m(h)g(expanded)f(string)g(are)h(not)g +(sorted;)150 2368 y(left)31 b(to)g(righ)m(t)g(order)f(is)g(preserv)m (ed.)41 b(F)-8 b(or)31 b(example,)390 2528 y Fs(bash$)46 b(echo)h(a{d,c,b}e)390 2637 y(ade)g(ace)g(abe)275 2797 -y Ft(A)24 b(sequence)h(expression)f(tak)m(es)i(the)f(form)f +y Ft(A)24 b(sequence)h(expression)g(tak)m(es)h(the)f(form)f Fs({)p Fj(x)p Fs(..)p Fj(y)11 b Fs(})p Ft(,)23 b(where)i -Fq(x)30 b Ft(and)24 b Fq(y)33 b Ft(are)25 b(either)f(in)m(tegers)h(or)f -(single)150 2907 y(c)m(haracters.)43 b(When)30 b(in)m(tegers)h(are)g -(supplied,)c(the)k(expression)e(expands)h(to)h(eac)m(h)h(n)m(um)m(b)s +Fq(x)30 b Ft(and)24 b Fq(y)33 b Ft(are)25 b(either)g(in)m(tegers)h(or)e +(single)150 2907 y(c)m(haracters.)43 b(When)30 b(in)m(tegers)i(are)f +(supplied,)e(the)i(expression)f(expands)g(to)h(eac)m(h)h(n)m(um)m(b)s (er)d(b)s(et)m(w)m(een)i Fq(x)150 3016 y Ft(and)i Fq(y)p -Ft(,)i(inclusiv)m(e.)50 b(When)34 b(c)m(haracters)h(are)f(supplied,)e -(the)j(expression)d(expands)h(to)i(eac)m(h)g(c)m(haracter)150 -3126 y(lexicographically)28 b(b)s(et)m(w)m(een)j Fq(x)37 -b Ft(and)30 b Fq(y)p Ft(,)h(inclusiv)m(e.)39 b(Note)31 +Ft(,)i(inclusiv)m(e.)53 b(When)34 b(c)m(haracters)h(are)f(supplied,)g +(the)h(expression)e(expands)g(to)i(eac)m(h)g(c)m(haracter)150 +3126 y(lexicographically)e(b)s(et)m(w)m(een)e Fq(x)37 +b Ft(and)30 b Fq(y)p Ft(,)h(inclusiv)m(e.)42 b(Note)31 b(that)g(b)s(oth)f Fq(x)37 b Ft(and)30 b Fq(y)38 b Ft(m)m(ust)30 b(b)s(e)g(of)h(the)g(same)150 3235 y(t)m(yp)s(e.)275 -3395 y(Brace)36 b(expansion)f(is)f(p)s(erformed)g(b)s(efore)h(an)m(y)h -(other)g(expansions,)g(and)f(an)m(y)g(c)m(haracters)i(sp)s(ecial)150 -3505 y(to)32 b(other)g(expansions)f(are)h(preserv)m(ed)f(in)g(the)g -(result.)44 b(It)32 b(is)f(strictly)f(textual.)45 b(Bash)32 -b(do)s(es)f(not)h(apply)150 3614 y(an)m(y)27 b(syn)m(tactic)h(in)m -(terpretation)f(to)h(the)f(con)m(text)i(of)e(the)g(expansion)f(or)h +3395 y(Brace)36 b(expansion)g(is)f(p)s(erformed)f(b)s(efore)h(an)m(y)h +(other)g(expansions,)h(and)e(an)m(y)g(c)m(haracters)i(sp)s(ecial)150 +3505 y(to)32 b(other)g(expansions)g(are)g(preserv)m(ed)f(in)h(the)f +(result.)45 b(It)32 b(is)g(strictly)g(textual.)46 b(Bash)32 +b(do)s(es)f(not)h(apply)150 3614 y(an)m(y)27 b(syn)m(tactic)i(in)m +(terpretation)g(to)f(the)f(con)m(text)i(of)e(the)g(expansion)g(or)g (the)h(text)g(b)s(et)m(w)m(een)f(the)h(braces.)150 3724 -y(T)-8 b(o)37 b(a)m(v)m(oid)f(con\015icts)g(with)f(parameter)i -(expansion,)f(the)h(string)e(`)p Fs(${)p Ft(')h(is)f(not)h(considered)f -(eligible)f(for)150 3833 y(brace)d(expansion.)275 3993 -y(A)e(correctly-formed)h(brace)g(expansion)e(m)m(ust)i(con)m(tain)g -(unquoted)f(op)s(ening)f(and)h(closing)g(braces,)150 -4103 y(and)j(at)i(least)f(one)g(unquoted)g(comma)g(or)g(a)h(v)-5 -b(alid)31 b(sequence)i(expression.)47 b(An)m(y)33 b(incorrectly)f -(formed)150 4212 y(brace)f(expansion)e(is)g(left)h(unc)m(hanged.)275 +y(T)-8 b(o)37 b(a)m(v)m(oid)g(con\015icts)g(with)f(parameter)h +(expansion,)g(the)g(string)f(`)p Fs(${)p Ft(')g(is)g(not)g(considered)g +(eligible)i(for)150 3833 y(brace)31 b(expansion.)275 +3993 y(A)e(correctly-formed)i(brace)f(expansion)f(m)m(ust)h(con)m(tain) +h(unquoted)e(op)s(ening)g(and)g(closing)i(braces,)150 +4103 y(and)h(at)i(least)g(one)f(unquoted)g(comma)g(or)g(a)h(v)-5 +b(alid)33 b(sequence)g(expression.)48 b(An)m(y)33 b(incorrectly)h +(formed)150 4212 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275 4372 y(A)25 b Fs({)g Ft(or)g(`)p Fs(,)p Ft(')g(ma)m(y)h(b)s(e)f(quoted) -g(with)f(a)i(bac)m(kslash)e(to)i(prev)m(en)m(t)g(its)f(b)s(eing)f -(considered)g(part)h(of)g(a)h(brace)150 4482 y(expression.)50 -b(T)-8 b(o)34 b(a)m(v)m(oid)h(con\015icts)e(with)g(parameter)h -(expansion,)g(the)g(string)f(`)p Fs(${)p Ft(')h(is)f(not)h(considered) -150 4591 y(eligible)28 b(for)i(brace)h(expansion.)275 -4751 y(This)e(construct)i(is)f(t)m(ypically)g(used)g(as)h(shorthand)f -(when)g(the)h(common)g(pre\014x)f(of)h(the)g(strings)f(to)150 -4861 y(b)s(e)g(generated)h(is)f(longer)g(than)g(in)f(the)h(ab)s(o)m(v)m +g(with)g(a)h(bac)m(kslash)f(to)h(prev)m(en)m(t)g(its)g(b)s(eing)f +(considered)g(part)g(of)g(a)h(brace)150 4482 y(expression.)51 +b(T)-8 b(o)34 b(a)m(v)m(oid)i(con\015icts)e(with)g(parameter)g +(expansion,)h(the)f(string)g(`)p Fs(${)p Ft(')g(is)g(not)g(considered) +150 4591 y(eligible)e(for)e(brace)h(expansion.)275 4751 +y(This)f(construct)h(is)g(t)m(ypically)i(used)d(as)h(shorthand)f(when)g +(the)h(common)g(pre\014x)f(of)h(the)g(strings)g(to)150 +4861 y(b)s(e)f(generated)h(is)g(longer)g(than)f(in)g(the)g(ab)s(o)m(v)m (e)i(example:)390 5020 y Fs(mkdir)46 b(/usr/local/src/bash/{old,n)o (ew,)o(dist)o(,bug)o(s})275 5180 y Ft(or)390 5340 y Fs(chown)g(root)h (/usr/{ucb/{ex,edit},lib/)o({ex?)o(.?*,)o(how)o(_ex})o(})p -eop +eop end %%Page: 18 24 -18 23 bop 150 -116 a Ft(18)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)275 541 y Ft(If)i(a)i(w)m(ord) -e(b)s(egins)g(with)f(an)i(unquoted)f(tilde)g(c)m(haracter)j(\(`)p -Fs(~)p Ft('\),)i(all)43 b(of)i(the)f(c)m(haracters)h(up)e(to)150 -651 y(the)35 b(\014rst)f(unquoted)f(slash)h(\(or)h(all)e(c)m -(haracters,)k(if)d(there)h(is)e(no)i(unquoted)e(slash\))h(are)h -(considered)f(a)150 760 y Fq(tilde-pre\014x)p Ft(.)53 -b(If)35 b(none)g(of)g(the)g(c)m(haracters)i(in)c(the)j(tilde-pre\014x)d -(are)i(quoted,)i(the)e(c)m(haracters)i(in)d(the)150 870 -y(tilde-pre\014x)25 b(follo)m(wing)g(the)i(tilde)f(are)h(treated)h(as)f -(a)g(p)s(ossible)d Fq(login)i(name)p Ft(.)39 b(If)27 -b(this)e(login)h(name)h(is)f(the)150 979 y(n)m(ull)j(string,)i(the)g -(tilde)f(is)h(replaced)g(with)f(the)h(v)-5 b(alue)31 -b(of)g(the)h Fs(HOME)e Ft(shell)f(v)-5 b(ariable.)43 -b(If)31 b Fs(HOME)f Ft(is)g(unset,)150 1089 y(the)37 -b(home)f(directory)g(of)h(the)f(user)g(executing)h(the)g(shell)d(is)i -(substituted)f(instead.)58 b(Otherwise,)37 b(the)150 -1198 y(tilde-pre\014x)28 b(is)i(replaced)g(with)f(the)h(home)h -(directory)f(asso)s(ciated)g(with)f(the)i(sp)s(eci\014ed)e(login)g -(name.)275 1331 y(If)j(the)h(tilde-pre\014x)d(is)i(`)p -Fs(~+)p Ft(',)h(the)g(v)-5 b(alue)32 b(of)h(the)g(shell)e(v)-5 -b(ariable)32 b Fs(PWD)f Ft(replaces)i(the)g(tilde-pre\014x.)45 -b(If)150 1441 y(the)31 b(tilde-pre\014x)d(is)h(`)p Fs(~-)p -Ft(',)i(the)f(v)-5 b(alue)30 b(of)h(the)f(shell)f(v)-5 -b(ariable)29 b Fs(OLDPWD)p Ft(,)g(if)g(it)h(is)g(set,)h(is)e -(substituted.)275 1573 y(If)g(the)h(c)m(haracters)h(follo)m(wing)e(the) -h(tilde)e(in)h(the)h(tilde-pre\014x)e(consist)h(of)h(a)h(n)m(um)m(b)s +TeXDict begin 18 23 bop 150 -116 a Ft(18)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fk(3.5.2)63 b(Tilde)41 +b(Expansion)275 541 y Ft(If)i(a)i(w)m(ord)e(b)s(egins)h(with)f(an)h +(unquoted)f(tilde)i(c)m(haracter)h(\(`)p Fs(~)p Ft('\),)i(all)d(of)g +(the)f(c)m(haracters)h(up)e(to)150 651 y(the)35 b(\014rst)f(unquoted)f +(slash)i(\(or)g(all)g(c)m(haracters,)i(if)e(there)g(is)f(no)h(unquoted) +e(slash\))i(are)g(considered)g(a)150 760 y Fq(tilde-pre\014x)p +Ft(.)55 b(If)35 b(none)g(of)g(the)g(c)m(haracters)i(in)d(the)i +(tilde-pre\014x)f(are)g(quoted,)i(the)e(c)m(haracters)i(in)e(the)150 +870 y(tilde-pre\014x)27 b(follo)m(wing)h(the)f(tilde)h(are)f(treated)h +(as)f(a)g(p)s(ossible)f Fq(login)i(name)p Ft(.)39 b(If)27 +b(this)f(login)i(name)f(is)g(the)150 979 y(n)m(ull)k(string,)h(the)f +(tilde)h(is)g(replaced)g(with)f(the)g(v)-5 b(alue)32 +b(of)f(the)h Fs(HOME)e Ft(shell)h(v)-5 b(ariable.)45 +b(If)31 b Fs(HOME)f Ft(is)h(unset,)150 1089 y(the)37 +b(home)f(directory)h(of)g(the)f(user)g(executing)i(the)f(shell)f(is)h +(substituted)f(instead.)59 b(Otherwise,)38 b(the)150 +1198 y(tilde-pre\014x)30 b(is)h(replaced)g(with)f(the)g(home)h +(directory)g(asso)s(ciated)g(with)f(the)h(sp)s(eci\014ed)f(login)h +(name.)275 1331 y(If)h(the)h(tilde-pre\014x)f(is)h(`)p +Fs(~+)p Ft(',)g(the)g(v)-5 b(alue)33 b(of)g(the)g(shell)g(v)-5 +b(ariable)34 b Fs(PWD)d Ft(replaces)j(the)f(tilde-pre\014x.)47 +b(If)150 1441 y(the)31 b(tilde-pre\014x)f(is)g(`)p Fs(~-)p +Ft(',)h(the)f(v)-5 b(alue)31 b(of)g(the)f(shell)h(v)-5 +b(ariable)31 b Fs(OLDPWD)p Ft(,)e(if)h(it)h(is)g(set,)g(is)f +(substituted.)275 1573 y(If)f(the)h(c)m(haracters)h(follo)m(wing)h(the) +e(tilde)g(in)g(the)g(tilde-pre\014x)g(consist)g(of)g(a)h(n)m(um)m(b)s (er)d Fq(N)p Ft(,)j(optionally)150 1683 y(pre\014xed)22 b(b)m(y)h(a)h(`)p Fs(+)p Ft(')f(or)h(a)f(`)p Fs(-)p Ft(',)j(the)d -(tilde-pre\014x)e(is)i(replaced)f(with)g(the)i(corresp)s(onding)d -(elemen)m(t)j(from)f(the)150 1792 y(directory)35 b(stac)m(k,)j(as)e(it) -f(w)m(ould)f(b)s(e)h(displa)m(y)m(ed)f(b)m(y)i(the)f -Fs(dirs)g Ft(builtin)d(in)m(v)m(ok)m(ed)k(with)e(the)h(c)m(haracters) -150 1902 y(follo)m(wing)i(tilde)g(in)h(the)g(tilde-pre\014x)f(as)i(an)f -(argumen)m(t)h(\(see)h(Section)e(6.8)i([The)e(Directory)h(Stac)m(k],) -150 2011 y(page)d(73\).)57 b(If)35 b(the)g(tilde-pre\014x,)g(sans)g -(the)h(tilde,)f(consists)g(of)h(a)f(n)m(um)m(b)s(er)f(without)h(a)g -(leading)f(`)p Fs(+)p Ft(')i(or)150 2121 y(`)p Fs(-)p -Ft(',)31 b(`)p Fs(+)p Ft(')f(is)g(assumed.)275 2253 y(If)f(the)i(login) -e(name)i(is)e(in)m(v)-5 b(alid,)28 b(or)j(the)f(tilde)f(expansion)g -(fails,)h(the)g(w)m(ord)g(is)g(left)g(unc)m(hanged.)275 -2386 y(Eac)m(h)f(v)-5 b(ariable)29 b(assignmen)m(t)g(is)f(c)m(hec)m(k)m -(ed)j(for)e(unquoted)g(tilde-pre\014xes)e(immediately)h(follo)m(wing)g -(a)150 2495 y(`)p Fs(:)p Ft(')j(or)f(`)p Fs(=)p Ft('.)42 -b(In)30 b(these)h(cases,)h(tilde)d(expansion)h(is)f(also)i(p)s -(erformed.)40 b(Consequen)m(tly)-8 b(,)30 b(one)h(ma)m(y)h(use)e -(\014le)150 2605 y(names)f(with)e(tildes)g(in)g(assignmen)m(ts)i(to)g +(tilde-pre\014x)g(is)h(replaced)f(with)g(the)h(corresp)s(onding)e +(elemen)m(t)j(from)e(the)150 1792 y(directory)36 b(stac)m(k,)i(as)e(it) +g(w)m(ould)f(b)s(e)g(displa)m(y)m(ed)h(b)m(y)g(the)f +Fs(dirs)g Ft(builtin)g(in)m(v)m(ok)m(ed)i(with)e(the)g(c)m(haracters) +150 1902 y(follo)m(wing)40 b(tilde)f(in)g(the)f(tilde-pre\014x)h(as)g +(an)f(argumen)m(t)h(\(see)h(Section)f(6.8)h([The)e(Directory)i(Stac)m +(k],)150 2011 y(page)c(73\).)57 b(If)35 b(the)g(tilde-pre\014x,)i(sans) +e(the)h(tilde,)h(consists)f(of)g(a)f(n)m(um)m(b)s(er)f(without)i(a)f +(leading)h(`)p Fs(+)p Ft(')g(or)150 2121 y(`)p Fs(-)p +Ft(',)31 b(`)p Fs(+)p Ft(')f(is)h(assumed.)275 2253 y(If)e(the)i(login) +g(name)g(is)f(in)m(v)-5 b(alid,)31 b(or)g(the)f(tilde)h(expansion)f +(fails,)i(the)e(w)m(ord)g(is)h(left)g(unc)m(hanged.)275 +2386 y(Eac)m(h)e(v)-5 b(ariable)31 b(assignmen)m(t)f(is)f(c)m(hec)m(k)m +(ed)i(for)e(unquoted)g(tilde-pre\014xes)g(immediately)i(follo)m(wing)g +(a)150 2495 y(`)p Fs(:)p Ft(')g(or)f(`)p Fs(=)p Ft('.)42 +b(In)30 b(these)h(cases,)h(tilde)f(expansion)g(is)f(also)i(p)s +(erformed.)40 b(Consequen)m(tly)-8 b(,)31 b(one)g(ma)m(y)h(use)e +(\014le)150 2605 y(names)f(with)f(tildes)h(in)f(assignmen)m(ts)i(to)f Fs(PATH)p Ft(,)f Fs(MAILPATH)p Ft(,)f(and)h Fs(CDPATH)p -Ft(,)f(and)h(the)h(shell)e(assigns)h(the)150 2715 y(expanded)i(v)-5 -b(alue.)275 2847 y(The)29 b(follo)m(wing)g(table)i(sho)m(ws)f(ho)m(w)g +Ft(,)f(and)h(the)h(shell)g(assigns)g(the)150 2715 y(expanded)h(v)-5 +b(alue.)275 2847 y(The)29 b(follo)m(wing)j(table)g(sho)m(ws)e(ho)m(w)g (Bash)h(treats)g(unquoted)e(tilde-pre\014xes:)150 3002 -y Fs(~)432 b Ft(The)30 b(v)-5 b(alue)30 b(of)g Fs($HOME)150 +y Fs(~)432 b Ft(The)30 b(v)-5 b(alue)31 b(of)f Fs($HOME)150 3158 y(~/foo)240 b Ft(`)p Fs($HOME/foo)p Ft(')150 3313 -y Fs(~fred/foo)630 3423 y Ft(The)30 b(sub)s(directory)e -Fs(foo)i Ft(of)g(the)h(home)f(directory)g(of)h(the)f(user)g +y Fs(~fred/foo)630 3423 y Ft(The)30 b(sub)s(directory)f +Fs(foo)h Ft(of)g(the)h(home)f(directory)h(of)g(the)f(user)g Fs(fred)150 3578 y(~+/foo)192 b Ft(`)p Fs($PWD/foo)p Ft(')150 3733 y Fs(~-/foo)g Ft(`)p Fs(${OLDPWD-'~-'}/foo)p -Ft(')150 3889 y Fs(~)p Fj(N)384 b Ft(The)30 b(string)f(that)i(w)m(ould) -e(b)s(e)h(displa)m(y)m(ed)f(b)m(y)h(`)p Fs(dirs)g(+)p +Ft(')150 3889 y Fs(~)p Fj(N)384 b Ft(The)30 b(string)g(that)h(w)m(ould) +f(b)s(e)g(displa)m(y)m(ed)h(b)m(y)f(`)p Fs(dirs)g(+)p Fj(N)11 b Ft(')150 4044 y Fs(~+)p Fj(N)336 b Ft(The)30 -b(string)f(that)i(w)m(ould)e(b)s(e)h(displa)m(y)m(ed)f(b)m(y)h(`)p +b(string)g(that)h(w)m(ould)f(b)s(e)g(displa)m(y)m(ed)h(b)m(y)f(`)p Fs(dirs)g(+)p Fj(N)11 b Ft(')150 4199 y Fs(~-)p Fj(N)336 -b Ft(The)30 b(string)f(that)i(w)m(ould)e(b)s(e)h(displa)m(y)m(ed)f(b)m -(y)h(`)p Fs(dirs)g(-)p Fj(N)11 b Ft(')150 4418 y Fk(3.5.3)63 -b(Shell)41 b(P)m(arameter)e(Expansion)275 4660 y Ft(The)26 -b(`)p Fs($)p Ft(')i(c)m(haracter)h(in)m(tro)s(duces)d(parameter)i -(expansion,)f(command)g(substitution,)f(or)i(arithmetic)150 -4769 y(expansion.)37 b(The)22 b(parameter)h(name)f(or)g(sym)m(b)s(ol)g -(to)h(b)s(e)e(expanded)h(ma)m(y)h(b)s(e)f(enclosed)g(in)f(braces,)j -(whic)m(h)150 4879 y(are)31 b(optional)e(but)h(serv)m(e)h(to)h(protect) -f(the)g(v)-5 b(ariable)29 b(to)i(b)s(e)f(expanded)g(from)g(c)m -(haracters)i(immediately)150 4988 y(follo)m(wing)d(it)h(whic)m(h)f -(could)g(b)s(e)h(in)m(terpreted)g(as)g(part)h(of)f(the)h(name.)275 -5121 y(When)44 b(braces)i(are)f(used,)j(the)e(matc)m(hing)f(ending)f -(brace)h(is)f(the)h(\014rst)g(`)p Fs(})p Ft(')g(not)g(escap)s(ed)h(b)m -(y)f(a)150 5230 y(bac)m(kslash)39 b(or)g(within)e(a)i(quoted)g(string,) -i(and)d(not)i(within)c(an)j(em)m(b)s(edded)f(arithmetic)h(expansion,) -150 5340 y(command)30 b(substitution,)e(or)j(parameter)g(expansion.)p -eop +b Ft(The)30 b(string)g(that)h(w)m(ould)f(b)s(e)g(displa)m(y)m(ed)h(b)m +(y)f(`)p Fs(dirs)g(-)p Fj(N)11 b Ft(')150 4418 y Fk(3.5.3)63 +b(Shell)41 b(P)m(arameter)f(Expansion)275 4660 y Ft(The)26 +b(`)p Fs($)p Ft(')i(c)m(haracter)h(in)m(tro)s(duces)e(parameter)h +(expansion,)g(command)f(substitution,)h(or)g(arithmetic)150 +4769 y(expansion.)38 b(The)22 b(parameter)h(name)f(or)g(sym)m(b)s(ol)h +(to)g(b)s(e)e(expanded)h(ma)m(y)h(b)s(e)f(enclosed)h(in)f(braces,)i +(whic)m(h)150 4879 y(are)31 b(optional)g(but)f(serv)m(e)h(to)h(protect) +f(the)g(v)-5 b(ariable)31 b(to)g(b)s(e)f(expanded)g(from)g(c)m +(haracters)i(immediately)150 4988 y(follo)m(wing)g(it)f(whic)m(h)f +(could)g(b)s(e)g(in)m(terpreted)h(as)f(part)h(of)f(the)h(name.)275 +5121 y(When)44 b(braces)i(are)f(used,)j(the)e(matc)m(hing)g(ending)f +(brace)g(is)g(the)g(\014rst)g(`)p Fs(})p Ft(')g(not)g(escap)s(ed)h(b)m +(y)f(a)150 5230 y(bac)m(kslash)40 b(or)f(within)g(a)g(quoted)g(string,) +j(and)c(not)i(within)e(an)h(em)m(b)s(edded)f(arithmetic)j(expansion,) +150 5340 y(command)30 b(substitution,)g(or)h(parameter)g(expansion.)p +eop end %%Page: 19 25 -19 24 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(19)275 299 y(The)40 b(basic)g(form)h -(of)g(parameter)h(expansion)d(is)h($)p Fs({)p Fq(parameter)7 -b Fs(})p Ft(.)73 b(The)40 b(v)-5 b(alue)41 b(of)g Fq(parameter)48 -b Ft(is)150 408 y(substituted.)42 b(The)31 b(braces)g(are)h(required)d -(when)i Fq(parameter)38 b Ft(is)30 b(a)i(p)s(ositional)d(parameter)j -(with)e(more)150 518 y(than)i(one)g(digit,)g(or)g(when)g -Fq(parameter)39 b Ft(is)31 b(follo)m(w)m(ed)h(b)m(y)g(a)h(c)m(haracter) -h(that)e(is)g(not)g(to)h(b)s(e)f(in)m(terpreted)150 628 -y(as)f(part)f(of)g(its)g(name.)275 772 y(If)c(the)i(\014rst)f(c)m -(haracter)i(of)e Fq(parameter)35 b Ft(is)26 b(an)h(exclamation)h(p)s -(oin)m(t,)f(a)h(lev)m(el)f(of)g(v)-5 b(ariable)27 b(indirection)150 -882 y(is)37 b(in)m(tro)s(duced.)61 b(Bash)38 b(uses)f(the)h(v)-5 -b(alue)37 b(of)h(the)g(v)-5 b(ariable)37 b(formed)g(from)g(the)h(rest)g +TeXDict begin 19 24 bop 150 -116 a Ft(Chapter)30 b(3:)41 +b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(19)275 299 +y(The)40 b(basic)h(form)g(of)g(parameter)h(expansion)e(is)h($)p +Fs({)p Fq(parameter)7 b Fs(})p Ft(.)73 b(The)40 b(v)-5 +b(alue)42 b(of)f Fq(parameter)48 b Ft(is)150 408 y(substituted.)43 +b(The)31 b(braces)g(are)h(required)e(when)h Fq(parameter)38 +b Ft(is)31 b(a)h(p)s(ositional)g(parameter)g(with)f(more)150 +518 y(than)h(one)g(digit,)i(or)e(when)g Fq(parameter)39 +b Ft(is)32 b(follo)m(w)m(ed)i(b)m(y)e(a)h(c)m(haracter)h(that)e(is)h +(not)f(to)h(b)s(e)f(in)m(terpreted)150 628 y(as)f(part)f(of)g(its)h +(name.)275 772 y(If)26 b(the)i(\014rst)f(c)m(haracter)i(of)e +Fq(parameter)35 b Ft(is)27 b(an)g(exclamation)j(p)s(oin)m(t,)e(a)g(lev) +m(el)h(of)e(v)-5 b(ariable)29 b(indirection)150 882 y(is)38 +b(in)m(tro)s(duced.)62 b(Bash)38 b(uses)f(the)h(v)-5 +b(alue)38 b(of)g(the)g(v)-5 b(ariable)39 b(formed)e(from)g(the)h(rest)g (of)g Fq(parameter)45 b Ft(as)150 991 y(the)32 b(name)h(of)f(the)h(v)-5 -b(ariable;)32 b(this)f(v)-5 b(ariable)31 b(is)h(then)g(expanded)f(and)h -(that)h(v)-5 b(alue)31 b(is)h(used)f(in)g(the)i(rest)150 -1101 y(of)h(the)f(substitution,)g(rather)g(than)g(the)h(v)-5 -b(alue)33 b(of)h Fq(parameter)40 b Ft(itself.)49 b(This)32 -b(is)g(kno)m(wn)h(as)h Fs(indirect)150 1210 y(expansion)p -Ft(.)81 b(The)44 b(exceptions)g(to)i(this)d(are)i(the)g(expansions)e -(of)i($)p Fs({)p Ft(!)p Fq(pre\014x*)8 b Fs(})43 b Ft(and)h($)p +b(ariable;)34 b(this)e(v)-5 b(ariable)33 b(is)g(then)f(expanded)f(and)h +(that)h(v)-5 b(alue)32 b(is)h(used)e(in)h(the)h(rest)150 +1101 y(of)h(the)f(substitution,)i(rather)e(than)g(the)h(v)-5 +b(alue)34 b(of)g Fq(parameter)40 b Ft(itself.)51 b(This)33 +b(is)g(kno)m(wn)g(as)h Fs(indirect)150 1210 y(expansion)p +Ft(.)81 b(The)44 b(exceptions)h(to)h(this)e(are)h(the)g(expansions)f +(of)h($)p Fs({)p Ft(!)p Fq(pre\014x*)8 b Fs(})43 b Ft(and)h($)p Fs({)p Ft(!)p Fq(name)5 b Ft([)p Fs(@)p Ft(])p Fs(})150 -1320 y Ft(describ)s(ed)27 b(b)s(elo)m(w.)40 b(The)28 -b(exclamation)h(p)s(oin)m(t)g(m)m(ust)g(immediately)e(follo)m(w)h(the)i -(left)e(brace)i(in)e(order)g(to)150 1430 y(in)m(tro)s(duce)h +1320 y Ft(describ)s(ed)28 b(b)s(elo)m(w.)41 b(The)28 +b(exclamation)j(p)s(oin)m(t)f(m)m(ust)f(immediately)h(follo)m(w)g(the)g +(left)f(brace)h(in)f(order)f(to)150 1430 y(in)m(tro)s(duce)i (indirection.)275 1574 y(In)39 b(eac)m(h)i(of)g(the)f(cases)h(b)s(elo)m -(w,)h Fq(w)m(ord)i Ft(is)39 b(sub)5 b(ject)40 b(to)h(tilde)d -(expansion,)k(parameter)f(expansion,)150 1684 y(command)30 -b(substitution,)e(and)i(arithmetic)g(expansion.)275 1828 -y(When)j(not)g(p)s(erforming)e(substring)g(expansion,)j(Bash)f(tests)h -(for)f(a)h(parameter)g(that)g(is)e(unset)h(or)150 1938 -y(n)m(ull;)j(omitting)e(the)h(colon)g(results)f(in)g(a)i(test)g(only)e -(for)h(a)g(parameter)h(that)f(is)g(unset.)54 b(Put)35 -b(another)150 2047 y(w)m(a)m(y)-8 b(,)31 b(if)d(the)h(colon)g(is)f -(included,)e(the)j(op)s(erator)h(tests)f(for)g(b)s(oth)f(existence)h -(and)g(that)g(the)g(v)-5 b(alue)29 b(is)f(not)150 2157 -y(n)m(ull;)h(if)g(the)h(colon)h(is)e(omitted,)i(the)f(op)s(erator)h -(tests)g(only)f(for)g(existence.)150 2331 y Fs(${)p Fj(parameter)11 -b Fs(:)p Fp(\000)p Fj(word)g Fs(})630 2441 y Ft(If)30 -b Fq(parameter)37 b Ft(is)29 b(unset)h(or)h(n)m(ull,)d(the)j(expansion) -e(of)h Fq(w)m(ord)k Ft(is)29 b(substituted.)39 b(Otherwise,)630 -2550 y(the)31 b(v)-5 b(alue)29 b(of)i Fq(parameter)37 -b Ft(is)30 b(substituted.)150 2720 y Fs(${)p Fj(parameter)11 -b Fs(:=)p Fj(word)g Fs(})630 2829 y Ft(If)33 b Fq(parameter)40 -b Ft(is)32 b(unset)g(or)h(n)m(ull,)f(the)h(expansion)f(of)h -Fq(w)m(ord)j Ft(is)c(assigned)g(to)i Fq(parameter)p Ft(.)630 -2939 y(The)c(v)-5 b(alue)31 b(of)g Fq(parameter)38 b -Ft(is)30 b(then)h(substituted.)41 b(P)m(ositional)30 -b(parameters)h(and)f(sp)s(ecial)630 3049 y(parameters)h(ma)m(y)g(not)f -(b)s(e)g(assigned)g(to)h(in)e(this)g(w)m(a)m(y)-8 b(.)150 +(w,)i Fq(w)m(ord)h Ft(is)c(sub)5 b(ject)40 b(to)h(tilde)f(expansion,)j +(parameter)e(expansion,)150 1684 y(command)30 b(substitution,)g(and)g +(arithmetic)i(expansion.)275 1828 y(When)h(not)g(p)s(erforming)f +(substring)g(expansion,)j(Bash)e(tests)h(for)f(a)h(parameter)g(that)g +(is)f(unset)g(or)150 1938 y(n)m(ull;)38 b(omitting)e(the)f(colon)h +(results)f(in)g(a)h(test)g(only)f(for)g(a)g(parameter)h(that)f(is)h +(unset.)54 b(Put)35 b(another)150 2047 y(w)m(a)m(y)-8 +b(,)31 b(if)e(the)g(colon)h(is)f(included,)f(the)h(op)s(erator)h(tests) +f(for)g(b)s(oth)f(existence)i(and)f(that)g(the)g(v)-5 +b(alue)30 b(is)f(not)150 2157 y(n)m(ull;)i(if)f(the)g(colon)i(is)e +(omitted,)i(the)e(op)s(erator)h(tests)g(only)g(for)f(existence.)150 +2331 y Fs(${)p Fj(parameter)11 b Fs(:)p Fp(\000)p Fj(word)g +Fs(})630 2441 y Ft(If)30 b Fq(parameter)37 b Ft(is)30 +b(unset)g(or)h(n)m(ull,)f(the)h(expansion)f(of)g Fq(w)m(ord)k +Ft(is)c(substituted.)40 b(Otherwise,)630 2550 y(the)31 +b(v)-5 b(alue)30 b(of)h Fq(parameter)37 b Ft(is)31 b(substituted.)150 +2720 y Fs(${)p Fj(parameter)11 b Fs(:=)p Fj(word)g Fs(})630 +2829 y Ft(If)33 b Fq(parameter)40 b Ft(is)33 b(unset)f(or)h(n)m(ull,)h +(the)f(expansion)g(of)g Fq(w)m(ord)j Ft(is)d(assigned)g(to)h +Fq(parameter)p Ft(.)630 2939 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 3049 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 3218 y Fs(${)p Fj(parameter)11 b Fs(:?)p Fj(word)g Fs(})630 -3328 y Ft(If)26 b Fq(parameter)33 b Ft(is)25 b(n)m(ull)f(or)i(unset,)h -(the)f(expansion)f(of)h Fq(w)m(ord)k Ft(\(or)c(a)h(message)g(to)g(that) -f(e\013ect)630 3437 y(if)h Fq(w)m(ord)k Ft(is)c(not)h(presen)m(t\))h -(is)e(written)g(to)i(the)f(standard)f(error)h(and)f(the)h(shell,)f(if)g -(it)h(is)f(not)630 3547 y(in)m(teractiv)m(e,)k(exits.)41 -b(Otherwise,)29 b(the)i(v)-5 b(alue)30 b(of)g Fq(parameter)38 -b Ft(is)29 b(substituted.)150 3716 y Fs(${)p Fj(parameter)11 +3328 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 3437 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 3547 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 3716 y Fs(${)p Fj(parameter)11 b Fs(:+)p Fj(word)g Fs(})630 3826 y Ft(If)35 b Fq(parameter)42 -b Ft(is)35 b(n)m(ull)e(or)j(unset,)g(nothing)f(is)f(substituted,)i -(otherwise)e(the)i(expansion)630 3935 y(of)31 b Fq(w)m(ord)i -Ft(is)d(substituted.)150 4105 y Fs(${)p Fj(parameter)11 +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 3935 y(of)31 b Fq(w)m(ord)i +Ft(is)e(substituted.)150 4105 y Fs(${)p Fj(parameter)11 b Fs(:)p Fj(offset)g Fs(})150 4214 y(${)p Fj(parameter)g Fs(:)p Fj(offset)g Fs(:)p Fj(le)o(ngt)o(h)g Fs(})630 -4324 y Ft(Expands)44 b(to)i(up)e(to)i Fq(length)f Ft(c)m(haracters)i -(of)e Fq(parameter)53 b Ft(starting)45 b(at)h(the)f(c)m(haracter)630 -4433 y(sp)s(eci\014ed)29 b(b)m(y)i Fq(o\013set)p Ft(.)42 -b(If)31 b Fq(length)f Ft(is)g(omitted,)h(expands)f(to)h(the)g -(substring)e(of)h Fq(parameter)630 4543 y Ft(starting)37 -b(at)h(the)f(c)m(haracter)i(sp)s(eci\014ed)d(b)m(y)h -Fq(o\013set)p Ft(.)62 b Fq(length)37 b Ft(and)g Fq(o\013set)j -Ft(are)e(arithmetic)630 4653 y(expressions)29 b(\(see)j(Section)f(6.5)h -([Shell)d(Arithmetic],)h(page)i(70\).)43 b(This)29 b(is)h(referred)g -(to)i(as)630 4762 y(Substring)c(Expansion.)630 4902 y -Fq(length)f Ft(m)m(ust)h(ev)-5 b(aluate)28 b(to)g(a)h(n)m(um)m(b)s(er)d -(greater)j(than)e(or)h(equal)f(to)i(zero.)40 b(If)27 +4324 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 +4433 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 4543 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 4653 y(expressions)30 b(\(see)i(Section)g(6.5)g +([Shell)f(Arithmetic],)h(page)g(70\).)43 b(This)30 b(is)h(referred)f +(to)i(as)630 4762 y(Substring)d(Expansion.)630 4902 y +Fq(length)f Ft(m)m(ust)g(ev)-5 b(aluate)29 b(to)f(a)h(n)m(um)m(b)s(er)d +(greater)j(than)e(or)h(equal)g(to)h(zero.)40 b(If)27 b Fq(o\013set)k Ft(ev)-5 b(alu-)630 5011 y(ates)24 b(to)h(a)e(n)m(um)m -(b)s(er)f(less)h(than)g(zero,)j(the)e(v)-5 b(alue)23 -b(is)f(used)h(as)g(an)h(o\013set)g(from)f(the)g(end)g(of)h(the)630 -5121 y(v)-5 b(alue)21 b(of)g Fq(parameter)p Ft(.)38 b(If)21 -b Fq(parameter)28 b Ft(is)20 b(`)p Fs(@)p Ft(',)j(the)f(result)e(is)g -Fq(length)h Ft(p)s(ositional)e(parameters)630 5230 y(b)s(eginning)25 -b(at)k Fq(o\013set)p Ft(.)41 b(If)28 b Fq(parameter)35 -b Ft(is)27 b(an)h(arra)m(y)h(name)f(indexed)e(b)m(y)i(`)p +(b)s(er)f(less)i(than)f(zero,)j(the)e(v)-5 b(alue)24 +b(is)f(used)g(as)g(an)h(o\013set)g(from)f(the)g(end)g(of)h(the)630 +5121 y(v)-5 b(alue)22 b(of)f Fq(parameter)p Ft(.)38 b(If)21 +b Fq(parameter)28 b Ft(is)21 b(`)p Fs(@)p Ft(',)i(the)f(result)f(is)g +Fq(length)h Ft(p)s(ositional)g(parameters)630 5230 y(b)s(eginning)27 +b(at)i Fq(o\013set)p Ft(.)41 b(If)28 b Fq(parameter)35 +b Ft(is)28 b(an)g(arra)m(y)h(name)f(indexed)f(b)m(y)h(`)p Fs(@)p Ft(')g(or)g(`)p Fs(*)p Ft(',)h(the)g(re-)630 5340 -y(sult)20 b(is)h(the)g Fq(length)g Ft(mem)m(b)s(ers)g(of)g(the)h(arra)m -(y)f(b)s(eginning)e(with)h Fs(${)p Fj(parameter)11 b -Fs([)p Fj(offset)g Fs(]})p Ft(.)p eop +y(sult)21 b(is)h(the)f Fq(length)h Ft(mem)m(b)s(ers)f(of)g(the)h(arra)m +(y)f(b)s(eginning)g(with)g Fs(${)p Fj(parameter)11 b +Fs([)p Fj(offset)g Fs(]})p Ft(.)p eop end %%Page: 20 26 -20 25 bop 150 -116 a Ft(20)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(Substring)g(indexing)h(is)g(zero-based)j(unless)d(the)i(p)s -(ositional)d(parameters)j(are)g(used,)g(in)630 408 y(whic)m(h)29 -b(case)j(the)e(indexing)e(starts)j(at)g(1.)150 573 y -Fs(${!)p Fj(prefix)11 b Fs(*})150 682 y(${!)p Fj(prefix)g +TeXDict begin 20 25 bop 150 -116 a Ft(20)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(Substring)h(indexing)i(is)f +(zero-based)i(unless)e(the)h(p)s(ositional)g(parameters)g(are)g(used,)g +(in)630 408 y(whic)m(h)c(case)i(the)e(indexing)g(starts)h(at)g(1.)150 +573 y Fs(${!)p Fj(prefix)11 b Fs(*})150 682 y(${!)p Fj(prefix)g Fs(@})630 792 y Ft(Expands)34 b(to)j(the)f(names)g(of)g(v)-5 -b(ariables)35 b(whose)g(names)h(b)s(egin)e(with)h Fq(pre\014x)p -Ft(,)h(separated)630 902 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)g(v)-5 b(ariable.)150 +b(ariables)37 b(whose)e(names)h(b)s(egin)f(with)h Fq(pre\014x)p +Ft(,)g(separated)630 902 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 1066 y Fs(${!)p Fj(name)11 b Fs([@]})150 1176 y(${!)p Fj(name)g Fs([*]})630 1285 y Ft(If)26 b Fq(name)32 b -Ft(is)26 b(an)g(arra)m(y)h(v)-5 b(ariable,)27 b(expands)f(to)h(the)g -(list)e(of)i(arra)m(y)g(indices)e(\(k)m(eys\))j(assigned)630 -1395 y(in)23 b Fq(name)p Ft(.)39 b(If)24 b Fq(name)30 -b Ft(is)23 b(not)i(an)f(arra)m(y)-8 b(,)27 b(expands)c(to)j(0)f(if)e -Fq(name)30 b Ft(is)23 b(set)i(and)f(n)m(ull)e(otherwise.)630 -1504 y(When)39 b(`)p Fs(@)p Ft(')h(is)e(used)h(and)f(the)i(expansion)e -(app)s(ears)h(within)d(double)i(quotes,)43 b(eac)m(h)d(k)m(ey)630 +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 +1395 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 +1504 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 1614 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150 1778 y Fs(${#)p Fj(parameter)11 b Fs(})630 1888 y Ft(The)40 -b(length)f(in)g(c)m(haracters)j(of)e(the)h(expanded)e(v)-5 -b(alue)40 b(of)g Fq(parameter)47 b Ft(is)39 b(substituted.)630 -1998 y(If)j Fq(parameter)50 b Ft(is)42 b(`)p Fs(*)p Ft(')h(or)g(`)p -Fs(@)p Ft(',)k(the)c(v)-5 b(alue)42 b(substituted)f(is)h(the)h(n)m(um)m +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 +1998 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 2107 y(parameters.)i(If)32 -b Fq(parameter)38 b Ft(is)31 b(an)h(arra)m(y)g(name)g(subscripted)e(b)m -(y)h(`)p Fs(*)p Ft(')h(or)g(`)p Fs(@)p Ft(',)g(the)g(v)-5 -b(alue)630 2217 y(substituted)29 b(is)g(the)i(n)m(um)m(b)s(er)e(of)h -(elemen)m(ts)h(in)e(the)i(arra)m(y)-8 b(.)150 2381 y +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 2217 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 2381 y Fs(${)p Fj(parameter)11 b Fs(#)p Fj(word)g Fs(})150 2491 y(${)p Fj(parameter)g Fs(##)p Fj(word)g Fs(})630 2600 -y Ft(The)31 b Fq(w)m(ord)k Ft(is)c(expanded)g(to)i(pro)s(duce)e(a)h -(pattern)g(just)f(as)i(in)d(\014lename)h(expansion)g(\(see)630 -2710 y(Section)k(3.5.8)i([Filename)e(Expansion],)h(page)g(22\).)56 +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 +2710 y(Section)k(3.5.8)h([Filename)g(Expansion],)g(page)f(22\).)56 b(If)35 b(the)h(pattern)f(matc)m(hes)i(the)e(b)s(e-)630 -2819 y(ginning)26 b(of)i(the)h(expanded)e(v)-5 b(alue)28 -b(of)g Fq(parameter)p Ft(,)h(then)f(the)g(result)f(of)i(the)f -(expansion)f(is)630 2929 y(the)36 b(expanded)f(v)-5 b(alue)35 -b(of)h Fq(parameter)43 b Ft(with)34 b(the)i(shortest)g(matc)m(hing)g -(pattern)g(\(the)g(`)p Fs(#)p Ft(')630 3039 y(case\))26 -b(or)f(the)g(longest)f(matc)m(hing)h(pattern)g(\(the)g(`)p -Fs(##)p Ft(')g(case\))h(deleted.)38 b(If)24 b Fq(parameter)32 -b Ft(is)24 b(`)p Fs(@)p Ft(')630 3148 y(or)k(`)p Fs(*)p -Ft(',)i(the)e(pattern)h(remo)m(v)-5 b(al)28 b(op)s(eration)g(is)f -(applied)g(to)i(eac)m(h)g(p)s(ositional)d(parameter)j(in)630 -3258 y(turn,)i(and)g(the)h(expansion)f(is)g(the)h(resultan)m(t)f(list.) -43 b(If)32 b Fq(parameter)38 b Ft(is)31 b(an)h(arra)m(y)g(v)-5 -b(ariable)630 3367 y(subscripted)38 b(with)g(`)p Fs(@)p -Ft(')i(or)g(`)p Fs(*)p Ft(',)j(the)d(pattern)h(remo)m(v)-5 -b(al)40 b(op)s(eration)f(is)g(applied)f(to)j(eac)m(h)630 -3477 y(mem)m(b)s(er)30 b(of)g(the)h(arra)m(y)g(in)e(turn,)g(and)h(the)h -(expansion)e(is)g(the)i(resultan)m(t)f(list.)150 3641 +2819 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 2929 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 3039 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 3148 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 +3258 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 3367 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 +3477 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 3641 y Fs(${)p Fj(parameter)11 b Fs(\045)p Fj(word)g Fs(})150 3751 y(${)p Fj(parameter)g Fs(\045\045)p Fj(word)g Fs(})630 -3861 y Ft(The)35 b Fq(w)m(ord)k Ft(is)34 b(expanded)h(to)h(pro)s(duce)e -(a)i(pattern)f(just)g(as)h(in)e(\014lename)h(expansion.)54 -b(If)630 3970 y(the)43 b(pattern)g(matc)m(hes)h(a)g(trailing)d(p)s -(ortion)g(of)i(the)g(expanded)g(v)-5 b(alue)42 b(of)h -Fq(parameter)p Ft(,)630 4080 y(then)c(the)g(result)f(of)i(the)f -(expansion)f(is)h(the)g(v)-5 b(alue)39 b(of)g Fq(parameter)46 -b Ft(with)38 b(the)i(shortest)630 4189 y(matc)m(hing)30 -b(pattern)f(\(the)h(`)p Fs(\045)p Ft(')g(case\))h(or)e(the)h(longest)g -(matc)m(hing)f(pattern)h(\(the)g(`)p Fs(\045\045)p Ft(')g(case\))630 -4299 y(deleted.)48 b(If)32 b Fq(parameter)40 b Ft(is)32 -b(`)p Fs(@)p Ft(')h(or)g(`)p Fs(*)p Ft(',)h(the)f(pattern)g(remo)m(v)-5 -b(al)33 b(op)s(eration)g(is)f(applied)e(to)630 4408 y(eac)m(h)38 -b(p)s(ositional)d(parameter)j(in)e(turn,)i(and)e(the)h(expansion)f(is)h -(the)g(resultan)m(t)g(list.)59 b(If)630 4518 y Fq(parameter)38 -b Ft(is)31 b(an)g(arra)m(y)h(v)-5 b(ariable)30 b(subscripted)f(with)h -(`)p Fs(@)p Ft(')h(or)h(`)p Fs(*)p Ft(',)g(the)f(pattern)h(remo)m(v)-5 -b(al)630 4628 y(op)s(eration)29 b(is)g(applied)e(to)k(eac)m(h)g(mem)m -(b)s(er)e(of)h(the)g(arra)m(y)g(in)e(turn,)h(and)g(the)h(expansion)f -(is)630 4737 y(the)i(resultan)m(t)f(list.)150 4902 y +3861 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 3970 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 4080 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 4189 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 +4299 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 4408 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 4518 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 4628 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 4737 y(the)h(resultan)m(t)g(list.)150 4902 y Fs(${)p Fj(parameter)11 b Fs(/)p Fj(pattern)g Fs(/)p Fj(s)o(tri)o(ng)f Fs(})150 5011 y(${)p Fj(parameter)h Fs(//)p Fj(pattern)g Fs(/)o Fj(str)o(ing)f Fs(})630 5121 -y Ft(The)37 b Fq(pattern)g Ft(is)f(expanded)h(to)h(pro)s(duce)e(a)h -(pattern)g(just)g(as)h(in)d(\014lename)i(expansion.)630 -5230 y Fq(P)m(arameter)46 b Ft(is)37 b(expanded)g(and)g(the)i(longest)f -(matc)m(h)h(of)f Fq(pattern)g Ft(against)g(its)f(v)-5 -b(alue)38 b(is)630 5340 y(replaced)e(with)f Fq(string)p -Ft(.)57 b(In)35 b(the)i(\014rst)e(form,)j(only)d(the)i(\014rst)e(matc)m -(h)i(is)f(replaced.)57 b(The)p eop +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 +5230 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 5340 y(replaced)e(with)f Fq(string)p +Ft(.)58 b(In)35 b(the)i(\014rst)e(form,)j(only)e(the)h(\014rst)e(matc)m +(h)i(is)g(replaced.)58 b(The)p eop end %%Page: 21 27 -21 26 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(21)630 299 y(second)26 -b(form)g(causes)h(all)e(matc)m(hes)i(of)g Fq(pattern)f -Ft(to)h(b)s(e)f(replaced)g(with)f Fq(string)p Ft(.)38 -b(If)26 b Fq(pattern)630 408 y Ft(b)s(egins)34 b(with)g(`)p -Fs(#)p Ft(',)j(it)e(m)m(ust)g(matc)m(h)h(at)g(the)g(b)s(eginning)d(of)i -(the)h(expanded)e(v)-5 b(alue)35 b(of)h Fq(pa-)630 518 -y(rameter)p Ft(.)45 b(If)32 b Fq(pattern)g Ft(b)s(egins)e(with)g(`)p -Fs(\045)p Ft(',)j(it)e(m)m(ust)h(matc)m(h)g(at)h(the)f(end)f(of)h(the)g -(expanded)630 628 y(v)-5 b(alue)32 b(of)h Fq(parameter)p -Ft(.)47 b(If)32 b Fq(string)39 b Ft(is)32 b(n)m(ull,)f(matc)m(hes)i(of) -g Fq(pattern)g Ft(are)g(deleted)f(and)g(the)g Fs(/)630 -737 y Ft(follo)m(wing)i Fq(pattern)h Ft(ma)m(y)h(b)s(e)e(omitted.)55 -b(If)35 b Fq(parameter)42 b Ft(is)35 b(`)p Fs(@)p Ft(')g(or)g(`)p -Fs(*)p Ft(',)i(the)e(substitution)630 847 y(op)s(eration)29 -b(is)f(applied)f(to)j(eac)m(h)g(p)s(ositional)d(parameter)j(in)d(turn,) -i(and)g(the)g(expansion)f(is)630 956 y(the)j(resultan)m(t)g(list.)43 -b(If)30 b Fq(parameter)39 b Ft(is)30 b(an)h(arra)m(y)h(v)-5 -b(ariable)30 b(subscripted)f(with)h(`)p Fs(@)p Ft(')h(or)h(`)p -Fs(*)p Ft(',)630 1066 y(the)e(substitution)e(op)s(eration)i(is)f -(applied)f(to)j(eac)m(h)h(mem)m(b)s(er)e(of)g(the)g(arra)m(y)h(in)e -(turn,)h(and)630 1176 y(the)h(expansion)e(is)g(the)i(resultan)m(t)f -(list.)150 1443 y Fk(3.5.4)63 b(Command)39 b(Substitution)275 -1709 y Ft(Command)29 b(substitution)g(allo)m(ws)h(the)h(output)g(of)g -(a)g(command)g(to)g(replace)g(the)g(command)g(itself.)150 -1819 y(Command)e(substitution)f(o)s(ccurs)j(when)e(a)i(command)f(is)f -(enclosed)h(as)h(follo)m(ws:)390 1975 y Fs($\()p Fj(command)11 +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)630 299 +y(second)26 b(form)g(causes)h(all)g(matc)m(hes)g(of)g +Fq(pattern)f Ft(to)h(b)s(e)f(replaced)h(with)f Fq(string)p +Ft(.)39 b(If)26 b Fq(pattern)630 408 y Ft(b)s(egins)35 +b(with)g(`)p Fs(#)p Ft(',)i(it)f(m)m(ust)f(matc)m(h)h(at)g(the)g(b)s +(eginning)f(of)g(the)h(expanded)e(v)-5 b(alue)36 b(of)g +Fq(pa-)630 518 y(rameter)p Ft(.)45 b(If)32 b Fq(pattern)g +Ft(b)s(egins)f(with)g(`)p Fs(\045)p Ft(',)i(it)f(m)m(ust)g(matc)m(h)g +(at)h(the)f(end)f(of)h(the)g(expanded)630 628 y(v)-5 +b(alue)33 b(of)g Fq(parameter)p Ft(.)47 b(If)32 b Fq(string)40 +b Ft(is)33 b(n)m(ull,)g(matc)m(hes)g(of)g Fq(pattern)g +Ft(are)g(deleted)g(and)f(the)g Fs(/)630 737 y Ft(follo)m(wing)37 +b Fq(pattern)e Ft(ma)m(y)h(b)s(e)e(omitted.)56 b(If)35 +b Fq(parameter)42 b Ft(is)36 b(`)p Fs(@)p Ft(')f(or)g(`)p +Fs(*)p Ft(',)i(the)e(substitution)630 847 y(op)s(eration)30 +b(is)f(applied)g(to)h(eac)m(h)g(p)s(ositional)g(parameter)g(in)e(turn,) +h(and)g(the)g(expansion)g(is)630 956 y(the)i(resultan)m(t)h(list.)45 +b(If)30 b Fq(parameter)39 b Ft(is)31 b(an)g(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(',)630 1066 y(the)e(substitution)g(op)s(eration)h(is)f +(applied)g(to)h(eac)m(h)h(mem)m(b)s(er)e(of)g(the)g(arra)m(y)h(in)f +(turn,)g(and)630 1176 y(the)h(expansion)f(is)g(the)h(resultan)m(t)g +(list.)150 1443 y Fk(3.5.4)63 b(Command)41 b(Substitution)275 +1709 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 +1819 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 1975 y Fs($\()p Fj(command)11 b Fs(\))150 2131 y Ft(or)390 2288 y Fs(`)p Fj(command)g -Fs(`)150 2444 y Ft(Bash)45 b(p)s(erforms)f(the)h(expansion)e(b)m(y)i -(executing)h Fq(command)i Ft(and)c(replacing)g(the)h(command)g(sub-)150 -2554 y(stitution)39 b(with)g(the)h(standard)g(output)g(of)g(the)g -(command,)j(with)c(an)m(y)i(trailing)d(newlines)g(deleted.)150 -2663 y(Em)m(b)s(edded)30 b(newlines)f(are)j(not)f(deleted,)h(but)f -(they)g(ma)m(y)h(b)s(e)f(remo)m(v)m(ed)i(during)c(w)m(ord)i(splitting.) -41 b(The)150 2773 y(command)21 b(substitution)e Fs($\(cat)29 -b Fj(file)11 b Fs(\))20 b Ft(can)i(b)s(e)f(replaced)f(b)m(y)i(the)g -(equiv)-5 b(alen)m(t)20 b(but)h(faster)h Fs($\(<)30 b -Fj(file)11 b Fs(\))p Ft(.)275 2929 y(When)33 b(the)i(old-st)m(yle)f -(bac)m(kquote)h(form)f(of)g(substitution)e(is)h(used,)i(bac)m(kslash)e -(retains)h(its)f(literal)150 3039 y(meaning)k(except)i(when)e(follo)m -(w)m(ed)h(b)m(y)g(`)p Fs($)p Ft(',)j(`)p Fs(`)p Ft(',)f(or)e(`)p +Fs(`)150 2444 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 +2554 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 +2663 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 2773 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 2929 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 3039 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 3148 y(bac)m(kslash)i(terminates)g(the)g(command)g -(substitution.)67 b(When)40 b(using)f(the)h Fs($\()p +(b)m(y)g(a)150 3148 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 3258 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 3414 y(Command)22 b(substitutions)e(ma)m(y)k(b)s(e)e(nested.)39 -b(T)-8 b(o)23 b(nest)g(when)f(using)g(the)h(bac)m(kquoted)h(form,)g -(escap)s(e)150 3524 y(the)31 b(inner)d(bac)m(kquotes)k(with)d(bac)m -(kslashes.)275 3680 y(If)f(the)i(substitution)c(app)s(ears)j(within)e -(double)g(quotes,)j(w)m(ord)f(splitting)e(and)i(\014lename)f(expansion) -150 3790 y(are)j(not)f(p)s(erformed)f(on)h(the)h(results.)150 -4057 y Fk(3.5.5)63 b(Arithmetic)39 b(Expansion)275 4323 -y Ft(Arithmetic)31 b(expansion)g(allo)m(ws)h(the)g(ev)-5 -b(aluation)32 b(of)h(an)f(arithmetic)g(expression)f(and)h(the)g -(substi-)150 4433 y(tution)e(of)g(the)h(result.)39 b(The)30 -b(format)h(for)f(arithmetic)g(expansion)f(is:)390 4589 +b(.)275 3414 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 3524 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m +(kslashes.)275 3680 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 3790 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150 +4057 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)275 4323 +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 4433 y(tution)f(of)f(the)h(result.)40 b(The)30 +b(format)h(for)f(arithmetic)i(expansion)e(is:)390 4589 y Fs($\(\()47 b Fj(expression)55 b Fs(\)\))275 4745 y -Ft(The)33 b(expression)f(is)h(treated)h(as)g(if)f(it)g(w)m(ere)h -(within)d(double)i(quotes,)i(but)e(a)h(double)e(quote)i(inside)150 -4855 y(the)27 b(paren)m(theses)g(is)f(not)h(treated)h(sp)s(ecially)-8 -b(.)38 b(All)25 b(tok)m(ens)j(in)d(the)i(expression)f(undergo)g -(parameter)h(ex-)150 4965 y(pansion,)g(command)g(substitution,)f(and)h -(quote)i(remo)m(v)-5 b(al.)40 b(Arithmetic)26 b(expansions)h(ma)m(y)h -(b)s(e)f(nested.)275 5121 y(The)34 b(ev)-5 b(aluation)35 -b(is)g(p)s(erformed)f(according)h(to)h(the)g(rules)e(listed)g(b)s(elo)m -(w)h(\(see)h(Section)f(6.5)i([Shell)150 5230 y(Arithmetic],)30 -b(page)h(70\).)42 b(If)30 b(the)h(expression)e(is)g(in)m(v)-5 -b(alid,)29 b(Bash)h(prin)m(ts)f(a)i(message)g(indicating)e(failure)150 -5340 y(to)i(the)g(standard)e(error)h(and)g(no)g(substitution)e(o)s -(ccurs.)p eop +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 +4855 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 4965 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 5121 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 5230 y(Arithmetic],)32 +b(page)f(70\).)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 +5340 y(to)f(the)g(standard)e(error)h(and)g(no)g(substitution)g(o)s +(ccurs.)p eop end %%Page: 22 28 -22 27 bop 150 -116 a Ft(22)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fk(3.5.6)63 b(Pro)s(cess)42 b(Substitution)275 -539 y Ft(Pro)s(cess)33 b(substitution)f(is)h(supp)s(orted)f(on)h -(systems)h(that)h(supp)s(ort)d(named)h(pip)s(es)f(\()p -Fl(fif)n(o)p Ft(s\))i(or)g(the)150 649 y(`)p Fs(/dev/fd)p -Ft(')29 b(metho)s(d)h(of)g(naming)f(op)s(en)h(\014les.)40 +TeXDict begin 22 27 bop 150 -116 a Ft(22)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fk(3.5.6)63 b(Pro)s(cess)42 +b(Substitution)275 539 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 649 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 779 y Fs(<\()p Fj(list)11 b Fs(\))150 910 y Ft(or)390 1041 y Fs(>\()p -Fj(list)g Fs(\))150 1171 y Ft(The)23 b(pro)s(cess)g Fq(list)h -Ft(is)e(run)g(with)g(its)h(input)f(or)h(output)g(connected)h(to)h(a)e -Fl(fif)n(o)g Ft(or)h(some)g(\014le)e(in)g(`)p Fs(/dev/fd)p -Ft('.)150 1281 y(The)28 b(name)h(of)g(this)e(\014le)h(is)g(passed)g(as) +Fj(list)g Fs(\))150 1171 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 1281 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)f(of)h(the)150 1391 y(expansion.)39 b(If)28 b(the)h -Fs(>\()p Fj(list)11 b Fs(\))26 b Ft(form)i(is)g(used,)g(writing)f(to)i -(the)g(\014le)e(will)f(pro)m(vide)i(input)f(for)h Fq(list)p -Ft(.)39 b(If)28 b(the)150 1500 y Fs(<\()p Fj(list)11 -b Fs(\))23 b Ft(form)h(is)h(used,)g(the)h(\014le)e(passed)h(as)g(an)g -(argumen)m(t)h(should)d(b)s(e)i(read)g(to)h(obtain)f(the)g(output)g(of) -150 1610 y Fq(list)p Ft(.)39 b(Note)31 b(that)f(no)g(space)g(ma)m(y)g +(result)g(of)g(the)150 1391 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 1500 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 1610 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)f(paren)m(thesis,)h(otherwise)150 -1719 y(the)h(construct)f(w)m(ould)f(b)s(e)h(in)m(terpreted)g(as)g(a)h -(redirection.)275 1850 y(When)36 b(a)m(v)-5 b(ailable,)37 -b(pro)s(cess)f(substitution)f(is)g(p)s(erformed)g(sim)m(ultaneously)f -(with)i(parameter)h(and)150 1960 y(v)-5 b(ariable)29 -b(expansion,)h(command)g(substitution,)e(and)i(arithmetic)g(expansion.) +Fs(>)f Ft(and)g(the)h(left)g(paren)m(thesis,)h(otherwise)150 +1719 y(the)g(construct)f(w)m(ould)g(b)s(e)g(in)m(terpreted)h(as)f(a)h +(redirection.)275 1850 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 1960 y(v)-5 b(ariable)31 +b(expansion,)g(command)f(substitution,)g(and)g(arithmetic)i(expansion.) 150 2172 y Fk(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)275 -2413 y Ft(The)35 b(shell)g(scans)h(the)g(results)f(of)h(parameter)h -(expansion,)g(command)e(substitution,)h(and)g(arith-)150 -2522 y(metic)30 b(expansion)g(that)h(did)d(not)j(o)s(ccur)f(within)e -(double)h(quotes)i(for)f(w)m(ord)g(splitting.)275 2653 -y(The)43 b(shell)f(treats)j(eac)m(h)h(c)m(haracter)f(of)g -Fs($IFS)e Ft(as)h(a)g(delimiter,)i(and)d(splits)f(the)j(results)d(of)j -(the)150 2763 y(other)40 b(expansions)e(in)m(to)i(w)m(ords)f(on)h -(these)g(c)m(haracters.)70 b(If)39 b Fs(IFS)g Ft(is)g(unset,)j(or)d -(its)g(v)-5 b(alue)39 b(is)g(exactly)150 2872 y Fs -(<space><tab><newline>)p Ft(,)20 b(the)25 b(default,)g(then)f(an)m(y)g +2413 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 +2522 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 2653 +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 2763 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 2872 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 2982 y(w)m(ords.)38 b(If)21 b Fs(IFS)h Ft(has)g(a)h(v)-5 -b(alue)22 b(other)g(than)h(the)f(default,)i(then)e(sequences)g(of)h -(the)f(whitespace)g(c)m(haracters)150 3091 y Fs(space)k -Ft(and)h Fs(tab)g Ft(are)h(ignored)f(at)i(the)f(b)s(eginning)d(and)i -(end)g(of)h(the)g(w)m(ord,)g(as)g(long)f(as)h(the)g(whitespace)150 -3201 y(c)m(haracter)34 b(is)e(in)f(the)i(v)-5 b(alue)32 -b(of)g Fs(IFS)g Ft(\(an)h Fs(IFS)e Ft(whitespace)i(c)m(haracter\).)49 -b(An)m(y)32 b(c)m(haracter)i(in)e Fs(IFS)f Ft(that)150 -3311 y(is)e(not)i Fs(IFS)f Ft(whitespace,)g(along)g(with)f(an)m(y)i -(adjacen)m(t)h Fs(IFS)d Ft(whitespace)h(c)m(haracters,)i(delimits)c(a)j -(\014eld.)150 3420 y(A)h(sequence)h(of)f Fs(IFS)f Ft(whitespace)h(c)m -(haracters)i(is)d(also)h(treated)h(as)g(a)f(delimiter.)44 -b(If)32 b(the)g(v)-5 b(alue)32 b(of)g Fs(IFS)150 3530 -y Ft(is)d(n)m(ull,)g(no)h(w)m(ord)g(splitting)e(o)s(ccurs.)275 -3660 y(Explicit)41 b(n)m(ull)g(argumen)m(ts)i(\()p Fs("")g -Ft(or)h Fs('')p Ft(\))f(are)g(retained.)79 b(Unquoted)43 -b(implicit)d(n)m(ull)h(argumen)m(ts,)150 3770 y(resulting)22 -b(from)h(the)g(expansion)f(of)i(parameters)g(that)g(ha)m(v)m(e)h(no)e -(v)-5 b(alues,)24 b(are)g(remo)m(v)m(ed.)40 b(If)23 b(a)g(parameter)150 -3880 y(with)29 b(no)h(v)-5 b(alue)30 b(is)g(expanded)f(within)f(double) -h(quotes,)i(a)g(n)m(ull)d(argumen)m(t)j(results)e(and)h(is)f(retained.) -275 4010 y(Note)i(that)g(if)f(no)g(expansion)f(o)s(ccurs,)h(no)h -(splitting)d(is)h(p)s(erformed.)150 4223 y Fk(3.5.8)63 -b(Filename)40 b(Expansion)275 4463 y Ft(After)22 b(w)m(ord)g -(splitting,)g(unless)f(the)i(`)p Fs(-f)p Ft(')f(option)g(has)g(b)s(een) -g(set)h(\(see)g(Section)g(4.3)g([The)f(Set)h(Builtin],)150 +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 3091 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 +3201 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 +3311 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 3420 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 3530 +y Ft(is)e(n)m(ull,)h(no)f(w)m(ord)g(splitting)h(o)s(ccurs.)275 +3660 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 3770 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 +3880 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 4010 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 4223 y Fk(3.5.8)63 +b(Filename)41 b(Expansion)275 4463 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 4573 y(page)k(50\),)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 -4682 y(app)s(ears,)h(then)f(the)h(w)m(ord)f(is)g(regarded)h(as)g(a)g -Fq(pattern)p Ft(,)g(and)g(replaced)f(with)f(an)i(alphab)s(etically)d -(sorted)150 4792 y(list)30 b(of)i(\014le)f(names)h(matc)m(hing)g(the)g -(pattern.)45 b(If)32 b(no)f(matc)m(hing)h(\014le)f(names)h(are)g -(found,)f(and)h(the)g(shell)150 4902 y(option)27 b Fs(nullglob)f -Ft(is)h(disabled,)g(the)h(w)m(ord)g(is)f(left)g(unc)m(hanged.)40 -b(If)28 b(the)g Fs(nullglob)e Ft(option)h(is)g(set,)j(and)150 -5011 y(no)38 b(matc)m(hes)h(are)f(found,)h(the)f(w)m(ord)f(is)g(remo)m -(v)m(ed.)65 b(If)37 b(the)h Fs(failglob)e Ft(shell)g(option)h(is)g -(set,)k(and)c(no)150 5121 y(matc)m(hes)f(are)g(found,)f(an)g(error)f -(message)j(is)d(prin)m(ted)f(and)i(the)g(command)g(is)f(not)h -(executed.)56 b(If)35 b(the)150 5230 y(shell)c(option)i -Fs(nocaseglob)d Ft(is)i(enabled,)h(the)h(matc)m(h)g(is)e(p)s(erformed)f -(without)h(regard)h(to)h(the)g(case)g(of)150 5340 y(alphab)s(etic)29 -b(c)m(haracters.)p eop +4682 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 4792 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 4902 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 +5011 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 5121 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 5230 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 5340 y(alphab)s(etic)d(c)m +(haracters.)p eop end %%Page: 23 29 -23 28 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(23)275 299 y(When)21 -b(a)i(pattern)f(is)f(used)h(for)f(\014lename)h(generation,)i(the)e(c)m -(haracter)i(`)p Fs(.)p Ft(')e(at)h(the)f(start)h(of)f(a)h(\014lename) -150 408 y(or)g(immediately)f(follo)m(wing)g(a)i(slash)e(m)m(ust)i(b)s -(e)f(matc)m(hed)h(explicitly)-8 b(,)23 b(unless)f(the)h(shell)f(option) -h Fs(dotglob)150 518 y Ft(is)30 b(set.)45 b(When)31 b(matc)m(hing)g(a)h -(\014le)e(name,)i(the)g(slash)e(c)m(haracter)j(m)m(ust)e(alw)m(a)m(ys)h -(b)s(e)f(matc)m(hed)h(explicitly)-8 b(.)150 628 y(In)30 -b(other)g(cases,)i(the)e(`)p Fs(.)p Ft(')h(c)m(haracter)h(is)d(not)i -(treated)g(sp)s(ecially)-8 b(.)275 772 y(See)30 b(the)g(description)d -(of)j Fs(shopt)f Ft(in)f(Section)i(4.2)h([Bash)f(Builtins],)e(page)i -(39,)h(for)f(a)g(description)e(of)150 882 y(the)j Fs(nocaseglob)p -Ft(,)c Fs(nullglob)p Ft(,)i Fs(failglob)p Ft(,)f(and)i -Fs(dotglob)e Ft(options.)275 1026 y(The)k Fs(GLOBIGNORE)f -Ft(shell)g(v)-5 b(ariable)32 b(ma)m(y)i(b)s(e)f(used)f(to)i(restrict)f -(the)h(set)f(of)h(\014lenames)e(matc)m(hing)i(a)150 1136 -y(pattern.)39 b(If)25 b Fs(GLOBIGNORE)e Ft(is)i(set,)i(eac)m(h)g(matc)m -(hing)f(\014lename)f(that)h(also)g(matc)m(hes)g(one)g(of)g(the)g -(patterns)150 1245 y(in)32 b Fs(GLOBIGNORE)e Ft(is)i(remo)m(v)m(ed)i -(from)e(the)i(list)d(of)i(matc)m(hes.)50 b(The)33 b(\014lenames)f(`)p -Fs(.)p Ft(')h(and)f(`)p Fs(..)p Ft(')h(are)g(alw)m(a)m(ys)150 -1355 y(ignored)f(when)f Fs(GLOBIGNORE)f Ft(is)i(set)h(and)f(not)h(n)m -(ull.)46 b(Ho)m(w)m(ev)m(er,)35 b(setting)e Fs(GLOBIGNORE)d -Ft(to)j(a)g(non-n)m(ull)150 1465 y(v)-5 b(alue)33 b(has)g(the)h -(e\013ect)h(of)f(enabling)e(the)i Fs(dotglob)e Ft(shell)f(option,)k(so) -f(all)e(other)i(\014lenames)f(b)s(eginning)150 1574 y(with)42 -b(a)i(`)p Fs(.)p Ft(')f(will)e(matc)m(h.)80 b(T)-8 b(o)44 -b(get)h(the)e(old)g(b)s(eha)m(vior)f(of)i(ignoring)d(\014lenames)i(b)s -(eginning)e(with)h(a)150 1684 y(`)p Fs(.)p Ft(',)d(mak)m(e)g(`)p -Fs(.*)p Ft(')e(one)g(of)g(the)h(patterns)f(in)f Fs(GLOBIGNORE)p -Ft(.)58 b(The)37 b Fs(dotglob)e Ft(option)i(is)f(disabled)f(when)150 -1793 y Fs(GLOBIGNORE)28 b Ft(is)h(unset.)150 2037 y Fk(3.5.8.1)63 +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 +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 408 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 518 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 628 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 772 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(39,)h(for)f(a)g +(description)g(of)150 882 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 1026 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 1136 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 +1245 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 +1355 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 1465 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 1574 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 1684 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 +1793 y Fs(GLOBIGNORE)28 b Ft(is)i(unset.)150 2037 y Fk(3.5.8.1)63 b(P)m(attern)40 b(Matc)m(hing)275 2291 y Ft(An)m(y)33 -b(c)m(haracter)i(that)f(app)s(ears)f(in)f(a)i(pattern,)g(other)g(than)f -(the)g(sp)s(ecial)f(pattern)i(c)m(haracters)h(de-)150 -2401 y(scrib)s(ed)29 b(b)s(elo)m(w,)h(matc)m(hes)i(itself.)41 -b(The)31 b Fl(nul)f Ft(c)m(haracter)i(ma)m(y)f(not)h(o)s(ccur)e(in)g(a) -h(pattern.)42 b(A)31 b(bac)m(kslash)150 2511 y(escap)s(es)36 -b(the)f(follo)m(wing)f(c)m(haracter;)40 b(the)c(escaping)f(bac)m -(kslash)g(is)f(discarded)g(when)h(matc)m(hing.)55 b(The)150 -2620 y(sp)s(ecial)29 b(pattern)h(c)m(haracters)i(m)m(ust)f(b)s(e)e -(quoted)i(if)e(they)i(are)f(to)i(b)s(e)d(matc)m(hed)i(literally)-8 -b(.)275 2765 y(The)29 b(sp)s(ecial)g(pattern)i(c)m(haracters)h(ha)m(v)m -(e)f(the)g(follo)m(wing)e(meanings:)150 2939 y Fs(*)432 -b Ft(Matc)m(hes)32 b(an)m(y)f(string,)e(including)e(the)k(n)m(ull)d -(string.)150 3108 y Fs(?)432 b Ft(Matc)m(hes)32 b(an)m(y)f(single)e(c)m +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 +2401 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 2511 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 2620 +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 2765 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 2939 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 3108 y Fs(?)432 b Ft(Matc)m(hes)32 b(an)m(y)f(single)g(c)m (haracter.)150 3278 y Fs([...)o(])241 b Ft(Matc)m(hes)27 -b(an)m(y)e(one)g(of)g(the)g(enclosed)f(c)m(haracters.)41 -b(A)25 b(pair)e(of)i(c)m(haracters)i(separated)e(b)m(y)g(a)630 +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 3387 y(h)m(yphen)i(denotes)h(a)g Fq(range)g(expression)p -Ft(;)f(an)m(y)i(c)m(haracter)g(that)f(sorts)g(b)s(et)m(w)m(een)g(those) -h(t)m(w)m(o)630 3497 y(c)m(haracters,)f(inclusiv)m(e,)c(using)f(the)i -(curren)m(t)f(lo)s(cale's)h(collating)f(sequence)h(and)f(c)m(haracter) -630 3606 y(set,)31 b(is)e(matc)m(hed.)42 b(If)30 b(the)g(\014rst)g(c)m -(haracter)i(follo)m(wing)d(the)h(`)p Fs([)p Ft(')h(is)e(a)i(`)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 3497 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 3606 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 -3716 y(c)m(haracter)c(not)f(enclosed)f(is)g(matc)m(hed.)40 +3716 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)e(it)i(as)h(the)630 3826 y(\014rst)32 b(or)h(last)g(c)m -(haracter)i(in)d(the)h(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)d(it)i(as)i(the)630 -3935 y(\014rst)25 b(c)m(haracter)i(in)d(the)i(set.)40 -b(The)25 b(sorting)g(order)g(of)h(c)m(haracters)h(in)e(range)h -(expressions)e(is)630 4045 y(determined)e(b)m(y)h(the)g(curren)m(t)f -(lo)s(cale)h(and)g(the)g(v)-5 b(alue)22 b(of)h(the)h -Fs(LC_COLLATE)c Ft(shell)h(v)-5 b(ariable,)630 4154 y(if)29 -b(set.)630 4294 y(F)-8 b(or)34 b(example,)f(in)f(the)h(default)f(C)g -(lo)s(cale,)i(`)p Fs([a-dx-z])p Ft(')d(is)h(equiv)-5 -b(alen)m(t)32 b(to)i(`)p Fs([abcdxyz])p Ft('.)630 4403 -y(Man)m(y)68 b(lo)s(cales)f(sort)h(c)m(haracters)h(in)d(dictionary)h -(order,)76 b(and)67 b(in)f(these)i(lo)s(cales)630 4513 -y(`)p Fs([a-dx-z])p Ft(')36 b(is)h(t)m(ypically)g(not)h(equiv)-5 -b(alen)m(t)37 b(to)i(`)p Fs([abcdxyz])p Ft(';)g(it)f(migh)m(t)f(b)s(e)g +(including)h(it)g(as)g(the)630 3826 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 +3935 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 4045 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 4154 y(if)30 +b(set.)630 4294 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 4403 +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 4513 +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 4623 y(to)34 b(`)p Fs([aBbCcDdxXyYz])p -Ft(',)c(for)j(example.)48 b(T)-8 b(o)33 b(obtain)g(the)g(traditional)e -(in)m(terpretation)i(of)630 4732 y(ranges)g(in)e(brac)m(k)m(et)j -(expressions,)f(y)m(ou)g(can)g(force)g(the)g(use)f(of)h(the)g(C)f(lo)s -(cale)g(b)m(y)h(setting)630 4842 y(the)e Fs(LC_COLLATE)c -Ft(or)k Fs(LC_ALL)d Ft(en)m(vironmen)m(t)i(v)-5 b(ariable)29 -b(to)i(the)g(v)-5 b(alue)30 b(`)p Fs(C)p Ft('.)630 4981 -y(Within)21 b(`)p Fs([)p Ft(')j(and)e(`)p Fs(])p Ft(',)j -Fq(c)m(haracter)g(classes)i Ft(can)d(b)s(e)e(sp)s(eci\014ed)g(using)f -(the)j(syn)m(tax)f Fs([:)p Fq(class)t Fs(:])p Ft(,)630 -5091 y(where)j Fq(class)k Ft(is)c(one)h(of)g(the)g(follo)m(wing)e -(classes)i(de\014ned)e(in)h(the)g Fl(posix)g Ft(1003.2)k(standard:)870 +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 4732 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 4842 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 4981 +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 +5091 y(where)j Fq(class)31 b Ft(is)c(one)g(of)g(the)g(follo)m(wing)h +(classes)g(de\014ned)d(in)i(the)f Fl(posix)g Ft(1003.2)k(standard:)870 5230 y Fs(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g (lower)870 5340 y(print)g(punct)g(space)f(upper)h(word)190 -b(xdigit)p eop +b(xdigit)p eop end %%Page: 24 30 -24 29 bop 150 -116 a Ft(24)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(A)42 b(c)m(haracter)h(class)e(matc)m(hes)i(an)m(y)f(c)m(haracter) -h(b)s(elonging)d(to)i(that)g(class.)74 b(The)41 b Fs(word)630 -408 y Ft(c)m(haracter)32 b(class)e(matc)m(hes)i(letters,)e(digits,)g -(and)f(the)i(c)m(haracter)h(`)p Fs(_)p Ft('.)630 544 -y(Within)23 b(`)p Fs([)p Ft(')h(and)g(`)p Fs(])p Ft(',)i(an)e -Fq(equiv)-5 b(alence)24 b(class)k Ft(can)c(b)s(e)g(sp)s(eci\014ed)f -(using)g(the)h(syn)m(tax)h Fs([=)p Fq(c)6 b Fs(=])p Ft(,)630 -653 y(whic)m(h)28 b(matc)m(hes)j(all)d(c)m(haracters)j(with)d(the)i -(same)g(collation)e(w)m(eigh)m(t)i(\(as)g(de\014ned)e(b)m(y)i(the)630 -763 y(curren)m(t)g(lo)s(cale\))h(as)f(the)h(c)m(haracter)h -Fq(c)p Ft(.)630 898 y(Within)20 b(`)p Fs([)p Ft(')h(and)g(`)p -Fs(])p Ft(',)j(the)d(syn)m(tax)h Fs([.)p Fq(sym)m(b)s(ol)t -Fs(.])d Ft(matc)m(hes)j(the)g(collating)f(sym)m(b)s(ol)f -Fq(sym)m(b)s(ol)p Ft(.)275 1061 y(If)29 b(the)g Fs(extglob)f -Ft(shell)f(option)i(is)g(enabled)f(using)g(the)i Fs(shopt)e -Ft(builtin,)e(sev)m(eral)k(extended)g(pattern)150 1170 -y(matc)m(hing)36 b(op)s(erators)f(are)h(recognized.)57 -b(In)35 b(the)g(follo)m(wing)f(description,)h(a)h Fq(pattern-list)h -Ft(is)e(a)h(list)e(of)150 1280 y(one)f(or)f(more)h(patterns)f -(separated)h(b)m(y)f(a)h(`)p Fs(|)p Ft('.)47 b(Comp)s(osite)32 -b(patterns)g(ma)m(y)i(b)s(e)d(formed)h(using)f(one)i(or)150 -1389 y(more)e(of)f(the)h(follo)m(wing)d(sub-patterns:)150 +TeXDict begin 24 29 bop 150 -116 a Ft(24)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(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 408 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 544 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 653 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 763 y(curren)m(t)g(lo)s(cale\))j(as)d(the) +h(c)m(haracter)h Fq(c)p Ft(.)630 898 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 1061 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 +1170 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 1280 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 +1389 y(more)e(of)f(the)h(follo)m(wing)g(sub-patterns:)150 1551 y Fs(?\()p Fj(pattern-list)11 b Fs(\))630 1661 y Ft(Matc)m(hes)32 b(zero)f(or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m -(en)f(patterns.)150 1822 y Fs(*\()p Fj(pattern-list)11 +(en)g(patterns.)150 1822 y Fs(*\()p Fj(pattern-list)11 b Fs(\))630 1932 y Ft(Matc)m(hes)32 b(zero)f(or)g(more)f(o)s -(ccurrences)h(of)f(the)h(giv)m(en)f(patterns.)150 2093 +(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.)150 2093 y Fs(+\()p Fj(pattern-list)11 b Fs(\))630 2203 y Ft(Matc)m(hes)32 -b(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)h(patterns.) +b(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)i(patterns.) 150 2364 y Fs(@\()p Fj(pattern-list)11 b Fs(\))630 2473 -y Ft(Matc)m(hes)32 b(exactly)f(one)g(of)f(the)h(giv)m(en)f(patterns.) +y Ft(Matc)m(hes)32 b(exactly)g(one)f(of)f(the)h(giv)m(en)g(patterns.) 150 2635 y Fs(!\()p Fj(pattern-list)11 b Fs(\))630 2744 -y Ft(Matc)m(hes)32 b(an)m(ything)e(except)h(one)g(of)f(the)h(giv)m(en)f +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 2972 y Fk(3.5.9)63 b(Quote)41 b(Remo)m(v)-7 -b(al)275 3218 y Ft(After)32 b(the)h(preceding)e(expansions,)h(all)f -(unquoted)h(o)s(ccurrences)g(of)h(the)f(c)m(haracters)i(`)p +b(al)275 3218 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 3327 y(`)p -Fs(")p Ft(')d(that)g(did)d(not)j(result)e(from)h(one)h(of)f(the)h(ab)s -(o)m(v)m(e)g(expansions)e(are)i(remo)m(v)m(ed.)150 3589 -y Fr(3.6)68 b(Redirections)275 3835 y Ft(Before)33 b(a)h(command)e(is)g -(executed,)j(its)d(input)f(and)i(output)f(ma)m(y)i(b)s(e)e -Fq(redirected)k Ft(using)31 b(a)i(sp)s(ecial)150 3945 -y(notation)f(in)m(terpreted)g(b)m(y)g(the)g(shell.)44 -b(Redirection)31 b(ma)m(y)i(also)f(b)s(e)g(used)f(to)i(op)s(en)e(and)h -(close)g(\014les)f(for)150 4054 y(the)i(curren)m(t)g(shell)e(execution) -i(en)m(vironmen)m(t.)48 b(The)33 b(follo)m(wing)e(redirection)h(op)s -(erators)h(ma)m(y)h(precede)150 4164 y(or)29 b(app)s(ear)g(an)m(ywhere) -g(within)e(a)j(simple)d(command)i(or)h(ma)m(y)g(follo)m(w)e(a)i -(command.)40 b(Redirections)29 b(are)150 4274 y(pro)s(cessed)h(in)f -(the)h(order)g(they)h(app)s(ear,)f(from)g(left)g(to)h(righ)m(t.)275 -4410 y(In)c(the)i(follo)m(wing)e(descriptions,)h(if)f(the)i(\014le)f -(descriptor)f(n)m(um)m(b)s(er)h(is)f(omitted,)i(and)g(the)f(\014rst)g -(c)m(har-)150 4519 y(acter)42 b(of)f(the)g(redirection)e(op)s(erator)i -(is)f(`)p Fs(<)p Ft(',)j(the)e(redirection)e(refers)i(to)g(the)g -(standard)f(input)e(\(\014le)150 4629 y(descriptor)32 +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 3589 +y Fr(3.6)68 b(Redirections)275 3835 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 3945 +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 4054 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 4164 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 4274 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 +4410 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 4519 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 4629 y(descriptor)33 b(0\).)49 b(If)33 b(the)g(\014rst)f(c)m(haracter)i(of)g(the)f -(redirection)e(op)s(erator)j(is)e(`)p Fs(>)p Ft(',)i(the)f(redirection) -e(refers)150 4739 y(to)g(the)g(standard)e(output)h(\(\014le)g -(descriptor)f(1\).)275 4875 y(The)i(w)m(ord)h(follo)m(wing)f(the)i -(redirection)e(op)s(erator)h(in)f(the)i(follo)m(wing)e(descriptions,)g -(unless)f(other-)150 4984 y(wise)20 b(noted,)j(is)d(sub)5 -b(jected)21 b(to)h(brace)f(expansion,)h(tilde)e(expansion,)i(parameter) -f(expansion,)h(command)150 5094 y(substitution,)29 b(arithmetic)h -(expansion,)g(quote)i(remo)m(v)-5 b(al,)32 b(\014lename)e(expansion,)g -(and)g(w)m(ord)h(splitting.)150 5204 y(If)f(it)g(expands)f(to)i(more)g +(redirection)g(op)s(erator)h(is)f(`)p Fs(>)p Ft(',)h(the)f(redirection) +g(refers)150 4739 y(to)e(the)g(standard)e(output)h(\(\014le)h +(descriptor)f(1\).)275 4875 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 4984 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 5094 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 5204 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 -5340 y(Note)h(that)g(the)g(order)f(of)g(redirections)f(is)h -(signi\014can)m(t.)39 b(F)-8 b(or)31 b(example,)g(the)f(command)p -eop +5340 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)p +eop end %%Page: 25 31 -25 30 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(25)390 299 y Fs(ls)47 -b(>)h Fj(dirlist)56 b Fs(2>&1)150 437 y Ft(directs)27 -b(b)s(oth)g(standard)g(output)g(\(\014le)g(descriptor)f(1\))j(and)e -(standard)f(error)i(\(\014le)f(descriptor)f(2\))i(to)h(the)150 -547 y(\014le)g Fq(dirlist)p Ft(,)f(while)g(the)j(command)390 -685 y Fs(ls)47 b(2>&1)g(>)g Fj(dirlist)150 823 y Ft(directs)33 -b(only)g(the)g(standard)g(output)g(to)h(\014le)f Fq(dirlist)p -Ft(,)f(b)s(ecause)h(the)h(standard)f(error)g(w)m(as)h(duplicated)150 +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)390 299 +y Fs(ls)47 b(>)h Fj(dirlist)56 b Fs(2>&1)150 437 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 +547 y(\014le)h Fq(dirlist)p Ft(,)h(while)f(the)h(command)390 +685 y Fs(ls)47 b(2>&1)g(>)g Fj(dirlist)150 823 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 932 y(as)d(standard)e(output)h(b)s(efore)g(the)h(standard)e(output)h(w) -m(as)h(redirected)f(to)h Fq(dirlist)p Ft(.)275 1070 y(Bash)26 -b(handles)e(sev)m(eral)j(\014lenames)e(sp)s(ecially)f(when)i(they)g -(are)g(used)g(in)f(redirections,)h(as)g(describ)s(ed)150 -1180 y(in)j(the)i(follo)m(wing)d(table:)150 1345 y Fs(/dev/fd/)p -Fj(fd)630 1454 y Ft(If)i Fq(fd)j Ft(is)c(a)i(v)-5 b(alid)29 -b(in)m(teger,)i(\014le)e(descriptor)h Fq(fd)j Ft(is)c(duplicated.)150 -1617 y Fs(/dev/stdin)630 1727 y Ft(File)h(descriptor)f(0)i(is)e -(duplicated.)150 1890 y Fs(/dev/stdout)630 1999 y Ft(File)h(descriptor) -f(1)i(is)e(duplicated.)150 2162 y Fs(/dev/stderr)630 -2272 y Ft(File)h(descriptor)f(2)i(is)e(duplicated.)150 +m(as)h(redirected)g(to)g Fq(dirlist)p Ft(.)275 1070 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 +1180 y(in)k(the)h(follo)m(wing)g(table:)150 1345 y Fs(/dev/fd/)p +Fj(fd)630 1454 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 +1617 y Fs(/dev/stdin)630 1727 y Ft(File)i(descriptor)e(0)h(is)f +(duplicated.)150 1890 y Fs(/dev/stdout)630 1999 y Ft(File)i(descriptor) +e(1)h(is)f(duplicated.)150 2162 y Fs(/dev/stderr)630 +2272 y Ft(File)i(descriptor)e(2)h(is)f(duplicated.)150 2435 y Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630 -2544 y Ft(If)41 b Fq(host)i Ft(is)e(a)h(v)-5 b(alid)39 -b(hostname)j(or)f(In)m(ternet)h(address,)i(and)c Fq(p)s(ort)j -Ft(is)e(an)g(in)m(teger)h(p)s(ort)630 2654 y(n)m(um)m(b)s(er)i(or)h -(service)g(name,)k(Bash)c(attempts)h(to)g(op)s(en)f(a)g(TCP)g -(connection)g(to)h(the)630 2764 y(corresp)s(onding)28 +2544 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 2654 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 2764 y(corresp)s(onding)29 b(so)s(c)m(k)m(et.)150 2927 y Fs(/dev/udp/)p Fj(host)11 -b Fs(/)p Fj(port)630 3036 y Ft(If)41 b Fq(host)i Ft(is)e(a)h(v)-5 -b(alid)39 b(hostname)j(or)f(In)m(ternet)h(address,)i(and)c -Fq(p)s(ort)j Ft(is)e(an)g(in)m(teger)h(p)s(ort)630 3146 -y(n)m(um)m(b)s(er)h(or)i(service)f(name,)49 b(Bash)c(attempts)g(to)h -(op)s(en)e(a)h(UDP)g(connection)f(to)i(the)630 3255 y(corresp)s(onding) -28 b(so)s(c)m(k)m(et.)275 3420 y(A)i(failure)f(to)i(op)s(en)e(or)i -(create)h(a)e(\014le)g(causes)h(the)f(redirection)f(to)i(fail.)150 +b Fs(/)p Fj(port)630 3036 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 3146 +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 3255 y(corresp)s(onding)29 +b(so)s(c)m(k)m(et.)275 3420 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.)150 3651 y Fk(3.6.1)63 b(Redirecting)40 b(Input)275 3899 -y Ft(Redirection)33 b(of)h(input)f(causes)h(the)h(\014le)e(whose)h -(name)h(results)e(from)h(the)g(expansion)f(of)i Fq(w)m(ord)i -Ft(to)150 4009 y(b)s(e)d(op)s(ened)g(for)g(reading)f(on)i(\014le)e -(descriptor)h Fs(n)p Ft(,)h(or)g(the)f(standard)g(input)f(\(\014le)h -(descriptor)f(0\))i(if)f Fs(n)g Ft(is)150 4118 y(not)d(sp)s(eci\014ed.) -275 4256 y(The)e(general)i(format)f(for)h(redirecting)e(input)f(is:)390 +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 4009 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 4118 y(not)d(sp)s(eci\014ed.) +275 4256 y(The)e(general)j(format)e(for)h(redirecting)g(input)e(is:)390 4394 y Fs([)p Fj(n)11 b Fs(]<)p Fj(word)150 4626 y Fk(3.6.2)63 -b(Redirecting)40 b(Output)275 4873 y Ft(Redirection)29 -b(of)h(output)g(causes)h(the)g(\014le)e(whose)h(name)h(results)e(from)g -(the)i(expansion)e(of)i Fq(w)m(ord)i Ft(to)150 4983 y(b)s(e)e(op)s -(ened)g(for)g(writing)f(on)h(\014le)g(descriptor)f Fq(n)p -Ft(,)i(or)f(the)h(standard)f(output)g(\(\014le)g(descriptor)f(1\))i(if) -f Fq(n)g Ft(is)150 5092 y(not)j(sp)s(eci\014ed.)49 b(If)33 -b(the)h(\014le)f(do)s(es)g(not)h(exist)f(it)g(is)g(created;)k(if)32 -b(it)h(do)s(es)h(exist)f(it)g(is)g(truncated)h(to)g(zero)150 -5202 y(size.)275 5340 y(The)29 b(general)i(format)f(for)h(redirecting)e -(output)h(is:)p eop +b(Redirecting)40 b(Output)275 4873 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 4983 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 5092 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 +5202 y(size.)275 5340 y(The)29 b(general)j(format)e(for)h(redirecting)g +(output)f(is:)p eop end %%Page: 26 32 -26 31 bop 150 -116 a Ft(26)2572 b(Bash)31 b(Reference)g(Man)m(ual)390 -299 y Fs([)p Fj(n)11 b Fs(]>[|])p Fj(word)275 426 y Ft(If)30 -b(the)h(redirection)e(op)s(erator)i(is)f(`)p Fs(>)p Ft(',)h(and)f(the)h -Fs(noclobber)d Ft(option)i(to)h(the)g Fs(set)f Ft(builtin)d(has)k(b)s -(een)150 535 y(enabled,)h(the)g(redirection)f(will)e(fail)i(if)g(the)h -(\014le)f(whose)h(name)g(results)f(from)h(the)g(expansion)f(of)h -Fq(w)m(ord)150 645 y Ft(exists)e(and)g(is)f(a)i(regular)f(\014le.)40 -b(If)30 b(the)h(redirection)e(op)s(erator)i(is)e(`)p -Fs(>|)p Ft(',)i(or)f(the)h(redirection)e(op)s(erator)i(is)150 +TeXDict begin 26 31 bop 150 -116 a Ft(26)2572 b(Bash)31 +b(Reference)g(Man)m(ual)390 299 y Fs([)p Fj(n)11 b Fs(]>[|])p +Fj(word)275 426 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 535 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 +645 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 754 y(`)p Fs(>)p Ft(')36 b(and)f(the)g Fs(noclobber)e -Ft(option)i(is)g(not)h(enabled,)g(the)f(redirection)f(is)h(attempted)h -(ev)m(en)h(if)d(the)i(\014le)150 864 y(named)30 b(b)m(y)g +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 864 y(named)30 b(b)m(y)g Fq(w)m(ord)k Ft(exists.)150 1065 y Fk(3.6.3)63 b(App)s(ending)42 -b(Redirected)e(Output)275 1301 y Ft(Redirection)27 b(of)i(output)f(in)f -(this)h(fashion)f(causes)i(the)g(\014le)f(whose)g(name)h(results)e -(from)h(the)h(expan-)150 1411 y(sion)k(of)g Fq(w)m(ord)k -Ft(to)e(b)s(e)e(op)s(ened)g(for)g(app)s(ending)e(on)j(\014le)e -(descriptor)h Fq(n)p Ft(,)h(or)g(the)f(standard)g(output)g(\(\014le)150 -1520 y(descriptor)c(1\))i(if)f Fq(n)g Ft(is)f(not)i(sp)s(eci\014ed.)39 -b(If)29 b(the)i(\014le)e(do)s(es)i(not)f(exist)g(it)g(is)g(created.)275 -1647 y(The)f(general)i(format)f(for)h(app)s(ending)d(output)i(is:)390 +b(Redirected)e(Output)275 1301 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 1411 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 +1520 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 +1647 y(The)e(general)j(format)e(for)h(app)s(ending)e(output)h(is:)390 1774 y Fs([)p Fj(n)11 b Fs(]>>)p Fj(word)150 1975 y Fk(3.6.4)63 b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g(Error)275 -2211 y Ft(Bash)31 b(allo)m(ws)f(b)s(oth)g(the)h(standard)g(output)f -(\(\014le)h(descriptor)e(1\))j(and)e(the)i(standard)e(error)g(output) -150 2320 y(\(\014le)c(descriptor)g(2\))i(to)f(b)s(e)g(redirected)f(to)i -(the)f(\014le)f(whose)g(name)h(is)f(the)h(expansion)f(of)h -Fq(w)m(ord)j Ft(with)c(this)150 2430 y(construct.)275 -2557 y(There)j(are)i(t)m(w)m(o)h(formats)e(for)h(redirecting)e -(standard)g(output)h(and)g(standard)f(error:)390 2684 +2211 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 2320 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 2430 y(construct.)275 +2557 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 2684 y Fs(&>)p Fj(word)150 2810 y Ft(and)390 2937 y Fs(>&)p Fj(word)150 3064 y Ft(Of)h(the)g(t)m(w)m(o)i(forms,)e(the)h(\014rst)e -(is)h(preferred.)39 b(This)29 b(is)g(seman)m(tically)h(equiv)-5 -b(alen)m(t)30 b(to)390 3190 y Fs(>)p Fj(word)57 b Fs(2>&1)150 +(is)i(preferred.)39 b(This)30 b(is)g(seman)m(tically)j(equiv)-5 +b(alen)m(t)32 b(to)390 3190 y Fs(>)p Fj(word)57 b Fs(2>&1)150 3391 y Fk(3.6.5)63 b(Here)41 b(Do)s(cumen)m(ts)275 3628 -y Ft(This)27 b(t)m(yp)s(e)i(of)h(redirection)e(instructs)g(the)h(shell) -f(to)i(read)f(input)e(from)i(the)g(curren)m(t)h(source)f(un)m(til)f(a) -150 3737 y(line)h(con)m(taining)g(only)h Fq(w)m(ord)j -Ft(\(with)c(no)i(trailing)d(blanks\))h(is)g(seen.)41 -b(All)29 b(of)h(the)h(lines)d(read)i(up)f(to)i(that)150 -3847 y(p)s(oin)m(t)e(are)i(then)f(used)g(as)g(the)h(standard)f(input)e -(for)i(a)h(command.)275 3973 y(The)e(format)i(of)g(here-do)s(cumen)m +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 3737 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 +3847 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 3973 y(The)e(format)i(of)g(here-do)s(cumen)m (ts)f(is:)390 4100 y Fs(<<[)p Fp(\000)p Fs(])p Fj(word)772 4210 y(here-document)390 4319 y(delimiter)275 4446 y -Ft(No)j(parameter)h(expansion,)f(command)g(substitution,)f(arithmetic)h -(expansion,)g(or)g(\014lename)f(ex-)150 4556 y(pansion)i(is)g(p)s -(erformed)f(on)i Fq(w)m(ord)p Ft(.)55 b(If)34 b(an)m(y)i(c)m(haracters) -g(in)e Fq(w)m(ord)k Ft(are)d(quoted,)i(the)e Fq(delimiter)40 -b Ft(is)34 b(the)150 4665 y(result)39 b(of)i(quote)g(remo)m(v)-5 -b(al)41 b(on)f Fq(w)m(ord)p Ft(,)j(and)d(the)g(lines)f(in)g(the)i +Ft(No)j(parameter)h(expansion,)g(command)f(substitution,)h(arithmetic)h +(expansion,)f(or)f(\014lename)g(ex-)150 4556 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 4665 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 4775 -y(If)32 b Fq(w)m(ord)k Ft(is)c(unquoted,)g(all)g(lines)f(of)h(the)h +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 4884 y(command)25 b(substitution,)e(and)i(arithmetic)f -(expansion.)38 b(In)24 b(the)h(latter)g(case,)i(the)e(c)m(haracter)i -(sequence)150 4994 y Fs(\\newline)h Ft(is)i(ignored,)f(and)h(`)p +(expansion,)150 4884 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 4994 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 5121 y(If)21 b(the)i(redirection)e(op)s(erator)i(is)e -(`)p Fs(<<-)p Ft(',)j(then)e(all)f(leading)g(tab)i(c)m(haracters)h(are) -e(stripp)s(ed)e(from)i(input)150 5230 y(lines)31 b(and)h(the)h(line)f -(con)m(taining)g Fq(delimiter)p Ft(.)46 b(This)31 b(allo)m(ws)h -(here-do)s(cumen)m(ts)h(within)d(shell)i(scripts)f(to)150 -5340 y(b)s(e)f(inden)m(ted)f(in)g(a)i(natural)e(fashion.)p -eop +Fs(`)p Ft('.)275 5121 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 5230 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 +5340 y(b)s(e)e(inden)m(ted)g(in)g(a)h(natural)f(fashion.)p +eop end %%Page: 27 33 -27 32 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(27)150 299 y Fk(3.6.6)63 -b(Here)41 b(Strings)275 551 y Ft(A)30 b(v)-5 b(arian)m(t)30 -b(of)h(here)f(do)s(cumen)m(ts,)g(the)h(format)g(is:)390 +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)150 299 +y Fk(3.6.6)63 b(Here)41 b(Strings)275 551 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 694 y Fs(<<<)47 b Fj(word)275 836 y Ft(The)29 b Fq(w)m(ord)34 -b Ft(is)29 b(expanded)h(and)g(supplied)d(to)k(the)f(command)h(on)f(its) -g(standard)f(input.)150 1077 y Fk(3.6.7)63 b(Duplicating)41 -b(File)g(Descriptors)275 1329 y Ft(The)29 b(redirection)g(op)s(erator) +b Ft(is)c(expanded)g(and)g(supplied)f(to)i(the)f(command)h(on)f(its)h +(standard)e(input.)150 1077 y Fk(3.6.7)63 b(Duplicating)41 +b(File)g(Descriptors)275 1329 y Ft(The)29 b(redirection)i(op)s(erator) 390 1471 y Fs([)p Fj(n)11 b Fs(]<&)p Fj(word)150 1614 -y Ft(is)34 b(used)f(to)j(duplicate)d(input)g(\014le)g(descriptors.)52 -b(If)34 b Fq(w)m(ord)k Ft(expands)c(to)h(one)g(or)g(more)g(digits,)f -(the)h(\014le)150 1724 y(descriptor)d(denoted)i(b)m(y)g -Fq(n)f Ft(is)f(made)i(to)g(b)s(e)f(a)h(cop)m(y)g(of)g(that)g(\014le)f -(descriptor.)49 b(If)33 b(the)h(digits)e(in)g Fq(w)m(ord)150 -1833 y Ft(do)d(not)h(sp)s(ecify)e(a)i(\014le)e(descriptor)g(op)s(en)h -(for)g(input,)f(a)i(redirection)e(error)h(o)s(ccurs.)40 +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 1724 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 +1833 y Ft(do)c(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 1943 y(to)31 -b(`)p Fs(-)p Ft(',)g(\014le)f(descriptor)g Fq(n)g Ft(is)f(closed.)42 -b(If)30 b Fq(n)g Ft(is)f(not)i(sp)s(eci\014ed,)e(the)i(standard)f -(input)f(\(\014le)h(descriptor)f(0\))150 2052 y(is)g(used.)275 -2195 y(The)g(op)s(erator)390 2337 y Fs([)p Fj(n)11 b -Fs(]>&)p Fj(word)150 2480 y Ft(is)39 b(used)h(similarly)d(to)k -(duplicate)d(output)i(\014le)g(descriptors.)69 b(If)40 -b Fq(n)f Ft(is)h(not)g(sp)s(eci\014ed,)h(the)g(standard)150 -2590 y(output)30 b(\(\014le)f(descriptor)g(1\))i(is)e(used.)39 -b(If)30 b(the)g(digits)f(in)f Fq(w)m(ord)34 b Ft(do)29 -b(not)i(sp)s(ecify)d(a)j(\014le)e(descriptor)g(op)s(en)150 -2699 y(for)38 b(output,)i(a)e(redirection)f(error)h(o)s(ccurs.)63 -b(As)38 b(a)h(sp)s(ecial)d(case,)42 b(if)37 b Fq(n)g -Ft(is)g(omitted,)k(and)c Fq(w)m(ord)k Ft(do)s(es)150 -2809 y(not)28 b(expand)f(to)i(one)f(or)f(more)h(digits,)g(the)g -(standard)e(output)i(and)f(standard)g(error)g(are)i(redirected)e(as)150 -2918 y(describ)s(ed)h(previously)-8 b(.)150 3159 y Fk(3.6.8)63 -b(Mo)m(ving)41 b(File)h(Descriptors)275 3411 y Ft(The)29 -b(redirection)g(op)s(erator)390 3554 y Fs([)p Fj(n)11 -b Fs(]<&)p Fj(digit)p Fs(-)150 3696 y Ft(mo)m(v)m(es)33 -b(the)f(\014le)f(descriptor)f Fq(digit)j Ft(to)f(\014le)f(descriptor)g -Fq(n)p Ft(,)g(or)h(the)g(standard)f(input)e(\(\014le)j(descriptor)e -(0\))150 3806 y(if)f Fq(n)h Ft(is)g(not)g(sp)s(eci\014ed.)39 -b Fq(digit)31 b Ft(is)f(closed)g(after)h(b)s(eing)e(duplicated)f(to)j -Fq(n)p Ft(.)275 3948 y(Similarly)-8 b(,)27 b(the)j(redirection)f(op)s +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 2052 y(is)g(used.)275 +2195 y(The)f(op)s(erator)390 2337 y Fs([)p Fj(n)11 b +Fs(]>&)p Fj(word)150 2480 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 +2590 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 +2699 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 2809 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 2918 y(describ)s(ed)h(previously)-8 +b(.)150 3159 y Fk(3.6.8)63 b(Mo)m(ving)41 b(File)h(Descriptors)275 +3411 y Ft(The)29 b(redirection)i(op)s(erator)390 3554 +y Fs([)p Fj(n)11 b Fs(]<&)p Fj(digit)p Fs(-)150 3696 +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 3806 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 3948 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s (erator)390 4091 y Fs([)p Fj(n)11 b Fs(]>&)p Fj(digit)p -Fs(-)150 4233 y Ft(mo)m(v)m(es)29 b(the)g(\014le)e(descriptor)f -Fq(digit)j Ft(to)g(\014le)e(descriptor)g Fq(n)p Ft(,)h(or)g(the)g -(standard)f(output)h(\(\014le)f(descriptor)g(1\))150 -4343 y(if)i Fq(n)h Ft(is)g(not)g(sp)s(eci\014ed.)150 -4583 y Fk(3.6.9)63 b(Op)s(ening)42 b(File)f(Descriptors)h(for)f -(Reading)g(and)g(W)-10 b(riting)275 4836 y Ft(The)29 -b(redirection)g(op)s(erator)390 4978 y Fs([)p Fj(n)11 -b Fs(]<>)p Fj(word)150 5121 y Ft(causes)39 b(the)g(\014le)f(whose)h -(name)g(is)f(the)h(expansion)f(of)h Fq(w)m(ord)j Ft(to)d(b)s(e)g(op)s -(ened)f(for)g(b)s(oth)h(reading)f(and)150 5230 y(writing)31 -b(on)h(\014le)g(descriptor)f Fq(n)p Ft(,)i(or)g(on)f(\014le)g -(descriptor)g(0)h(if)e Fq(n)h Ft(is)g(not)h(sp)s(eci\014ed.)46 -b(If)32 b(the)h(\014le)e(do)s(es)i(not)150 5340 y(exist,)d(it)g(is)g -(created.)p eop +Fs(-)150 4233 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 +4343 y(if)i Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)150 +4583 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 4836 y Ft(The)29 +b(redirection)i(op)s(erator)390 4978 y Fs([)p Fj(n)11 +b Fs(]<>)p Fj(word)150 5121 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 5230 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 5340 y(exist,)e(it)g(is)g +(created.)p eop end %%Page: 28 34 -28 33 bop 150 -116 a Ft(28)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fr(3.7)68 b(Executing)46 b(Commands)150 632 y Fk(3.7.1)63 -b(Simple)40 b(Command)g(Expansion)275 876 y Ft(When)35 -b(a)h(simple)d(command)j(is)e(executed,)k(the)e(shell)e(p)s(erforms)g -(the)i(follo)m(wing)e(expansions,)h(as-)150 985 y(signmen)m(ts,)30 -b(and)g(redirections,)f(from)h(left)g(to)h(righ)m(t.)199 -1119 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)37 b(assignmen)m(ts)h(\(those)h(preceding)e -(the)330 1229 y(command)30 b(name\))h(and)f(redirections)f(are)h(sa)m -(v)m(ed)i(for)e(later)g(pro)s(cessing.)199 1363 y(2.)61 -b(The)39 b(w)m(ords)g(that)i(are)f(not)g(v)-5 b(ariable)38 -b(assignmen)m(ts)i(or)f(redirections)g(are)h(expanded)f(\(see)h(Sec-) -330 1473 y(tion)c(3.5)j([Shell)c(Expansions],)i(page)h(16\).)61 -b(If)37 b(an)m(y)g(w)m(ords)f(remain)g(after)i(expansion,)g(the)f -(\014rst)330 1582 y(w)m(ord)31 b(is)f(tak)m(en)i(to)g(b)s(e)f(the)g -(name)h(of)f(the)h(command)f(and)f(the)i(remaining)d(w)m(ords)i(are)g -(the)h(argu-)330 1692 y(men)m(ts.)199 1826 y(3.)61 b(Redirections)23 -b(are)h(p)s(erformed)f(as)h(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)g -(Section)f(3.6)h([Redirections],)g(page)f(24\).)199 1961 -y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p Fs(=)p Ft(')h(in)d(eac)m(h) -k(v)-5 b(ariable)23 b(assignmen)m(t)i(undergo)s(es)f(tilde)g -(expansion,)h(parameter)330 2070 y(expansion,)48 b(command)e -(substitution,)h(arithmetic)d(expansion,)49 b(and)c(quote)h(remo)m(v)-5 -b(al)45 b(b)s(efore)330 2180 y(b)s(eing)29 b(assigned)h(to)h(the)f(v)-5 -b(ariable.)275 2339 y(If)32 b(no)i(command)f(name)g(results,)g(the)h(v) --5 b(ariable)32 b(assignmen)m(ts)h(a\013ect)i(the)f(curren)m(t)f(shell) -f(en)m(viron-)150 2448 y(men)m(t.)39 b(Otherwise,)26 -b(the)f(v)-5 b(ariables)24 b(are)i(added)f(to)h(the)f(en)m(vironmen)m -(t)g(of)h(the)f(executed)h(command)g(and)150 2558 y(do)35 -b(not)f(a\013ect)j(the)d(curren)m(t)h(shell)e(en)m(vironmen)m(t.)53 -b(If)34 b(an)m(y)h(of)g(the)f(assignmen)m(ts)h(attempts)g(to)h(assign) -150 2667 y(a)j(v)-5 b(alue)38 b(to)h(a)g(readonly)e(v)-5 -b(ariable,)40 b(an)e(error)g(o)s(ccurs,)j(and)c(the)i(command)f(exits)g -(with)g(a)g(non-zero)150 2777 y(status.)275 2911 y(If)33 -b(no)g(command)g(name)h(results,)f(redirections)f(are)i(p)s(erformed,)f -(but)g(do)h(not)f(a\013ect)i(the)f(curren)m(t)150 3021 -y(shell)29 b(en)m(vironmen)m(t.)40 b(A)30 b(redirection)f(error)h -(causes)h(the)g(command)f(to)h(exit)f(with)f(a)i(non-zero)g(status.)275 -3155 y(If)26 b(there)i(is)e(a)i(command)f(name)h(left)f(after)h -(expansion,)f(execution)h(pro)s(ceeds)f(as)g(describ)s(ed)e(b)s(elo)m -(w.)150 3265 y(Otherwise,)38 b(the)f(command)g(exits.)61 -b(If)37 b(one)g(of)g(the)h(expansions)e(con)m(tained)h(a)h(command)f -(substitu-)150 3374 y(tion,)h(the)e(exit)g(status)h(of)f(the)h(command) -f(is)g(the)g(exit)g(status)h(of)f(the)h(last)f(command)g(substitution) -150 3484 y(p)s(erformed.)55 b(If)35 b(there)g(w)m(ere)h(no)g(command)f -(substitutions,)g(the)g(command)h(exits)f(with)f(a)i(status)g(of)150 -3593 y(zero.)150 3817 y Fk(3.7.2)63 b(Command)39 b(Searc)m(h)h(and)h -(Execution)275 4061 y Ft(After)35 b(a)h(command)f(has)h(b)s(een)e -(split)g(in)m(to)h(w)m(ords,)i(if)d(it)h(results)g(in)f(a)i(simple)d -(command)i(and)g(an)150 4170 y(optional)30 b(list)f(of)h(argumen)m(ts,) -h(the)g(follo)m(wing)d(actions)j(are)g(tak)m(en.)199 -4304 y(1.)61 b(If)24 b(the)g(command)g(name)g(con)m(tains)h(no)f -(slashes,)h(the)f(shell)f(attempts)i(to)g(lo)s(cate)g(it.)38 -b(If)24 b(there)g(exists)330 4414 y(a)h(shell)e(function)g(b)m(y)h -(that)h(name,)h(that)f(function)e(is)h(in)m(v)m(ok)m(ed)h(as)f(describ) -s(ed)f(in)g(Section)h(3.3)i([Shell)330 4524 y(F)-8 b(unctions],)30 -b(page)i(13.)199 4658 y(2.)61 b(If)41 b(the)g(name)h(do)s(es)f(not)g -(matc)m(h)i(a)e(function,)i(the)f(shell)d(searc)m(hes)k(for)e(it)g(in)f -(the)h(list)f(of)i(shell)330 4767 y(builtins.)37 b(If)30 -b(a)h(matc)m(h)g(is)e(found,)h(that)h(builtin)c(is)i(in)m(v)m(ok)m(ed.) -199 4902 y(3.)61 b(If)40 b(the)g(name)h(is)e(neither)h(a)g(shell)f -(function)g(nor)h(a)g(builtin,)g(and)g(con)m(tains)g(no)h(slashes,)h -(Bash)330 5011 y(searc)m(hes)d(eac)m(h)g(elemen)m(t)f(of)h -Fs($PATH)d Ft(for)i(a)g(directory)g(con)m(taining)f(an)h(executable)g -(\014le)f(b)m(y)h(that)330 5121 y(name.)56 b(Bash)36 -b(uses)f(a)h(hash)e(table)i(to)g(remem)m(b)s(er)f(the)h(full)d -(pathnames)i(of)h(executable)g(\014les)e(to)330 5230 -y(a)m(v)m(oid)e(m)m(ultiple)d Fs(PATH)i Ft(searc)m(hes)i(\(see)f(the)g -(description)e(of)h Fs(hash)g Ft(in)f(Section)i(4.1)g([Bourne)g(Shell) -330 5340 y(Builtins],)i(page)i(33\).)55 b(A)35 b(full)e(searc)m(h)i(of) -g(the)g(directories)f(in)g Fs($PATH)f Ft(is)h(p)s(erformed)g(only)g(if) -g(the)p eop +TeXDict begin 28 33 bop 150 -116 a Ft(28)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(3.7)68 b(Executing)46 +b(Commands)150 632 y Fk(3.7.1)63 b(Simple)41 b(Command)h(Expansion)275 +876 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 +985 y(signmen)m(ts,)31 b(and)f(redirections,)h(from)f(left)h(to)g(righ) +m(t.)199 1119 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 1229 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 +1363 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 1473 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g +(16\).)61 b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h +(the)e(\014rst)330 1582 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 1692 y(men)m(ts.)199 1826 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(24\).)199 +1961 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 2070 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 2180 y(b)s(eing)30 +b(assigned)h(to)g(the)f(v)-5 b(ariable.)275 2339 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 2448 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 2558 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 2667 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 +2777 y(status.)275 2911 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 3021 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 3155 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 3265 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 3374 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 3484 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 3593 y(zero.)150 +3817 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h(Execution)275 +4061 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 +4170 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 4304 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 4414 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 +4524 y(F)-8 b(unctions],)31 b(page)h(13.)199 4658 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 +4767 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 4902 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 5011 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 5121 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 5230 +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 5340 y(Builtins],)37 b(page)f(33\).)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)p eop end %%Page: 29 35 -29 34 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(29)330 299 y(command)31 -b(is)f(not)h(found)f(in)f(the)j(hash)e(table.)42 b(If)31 -b(the)g(searc)m(h)h(is)e(unsuccessful,)f(the)i(shell)e(prin)m(ts)330 -408 y(an)h(error)g(message)i(and)e(returns)f(an)h(exit)g(status)h(of)f -(127.)199 544 y(4.)61 b(If)33 b(the)g(searc)m(h)h(is)f(successful,)g -(or)g(if)f(the)i(command)f(name)g(con)m(tains)h(one)g(or)f(more)g -(slashes,)h(the)330 653 y(shell)f(executes)j(the)f(named)f(program)g -(in)g(a)h(separate)h(execution)e(en)m(vironmen)m(t.)54 -b(Argumen)m(t)35 b(0)330 763 y(is)29 b(set)i(to)h(the)e(name)h(giv)m -(en,)f(and)g(the)h(remaining)d(argumen)m(ts)j(to)g(the)g(command)f(are) -h(set)g(to)g(the)330 872 y(argumen)m(ts)g(supplied,)c(if)i(an)m(y)-8 -b(.)199 1008 y(5.)61 b(If)35 b(this)g(execution)h(fails)e(b)s(ecause)i -(the)f(\014le)g(is)g(not)h(in)e(executable)j(format,)g(and)e(the)h -(\014le)f(is)g(not)330 1117 y(a)e(directory)-8 b(,)33 -b(it)f(is)g(assumed)f(to)j(b)s(e)d(a)i Fq(shell)e(script)i -Ft(and)f(the)h(shell)d(executes)k(it)e(as)h(describ)s(ed)d(in)330 -1227 y(Section)g(3.8)i([Shell)c(Scripts],)h(page)j(31.)199 +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)330 299 +y(command)31 b(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 408 y(an)f(error)g(message)i(and)e(returns)f(an)h(exit)h +(status)g(of)f(127.)199 544 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 653 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 763 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 872 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8 +b(.)199 1008 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 1117 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 +1227 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(31.)199 1362 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(,)41 b(the)d(shell)f(w)m(aits)i(for)f(the)h(command)f -(to)330 1472 y(complete)31 b(and)f(collects)g(its)g(exit)g(status.)150 -1698 y Fk(3.7.3)63 b(Command)39 b(Execution)h(En)m(vironmen)m(t)275 -1944 y Ft(The)29 b(shell)g(has)h(an)g Fq(execution)h(en)m(vironmen)m(t) -p Ft(,)f(whic)m(h)f(consists)h(of)h(the)f(follo)m(wing:)225 -2080 y Fp(\017)60 b Ft(op)s(en)32 b(\014les)f(inherited)f(b)m(y)j(the)f -(shell)f(at)i(in)m(v)m(o)s(cation,)h(as)e(mo)s(di\014ed)f(b)m(y)h -(redirections)f(supplied)e(to)330 2189 y(the)i Fs(exec)e +m(hronously)-8 b(,)42 b(the)c(shell)h(w)m(aits)h(for)e(the)h(command)f +(to)330 1472 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150 +1698 y Fk(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)275 +1944 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 +2080 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 2189 y(the)g Fs(exec)e Ft(builtin)225 2325 y Fp(\017)60 b Ft(the)28 b(curren)m(t)g(w)m(orking) -g(directory)g(as)g(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)e(b)m(y)i(the)h(shell)d(at) +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 2434 y(in)m(v)m(o)s(cation)225 2569 y Fp(\017)60 -b Ft(the)31 b(\014le)e(creation)i(mo)s(de)f(mask)g(as)h(set)g(b)m(y)f -Fs(umask)f Ft(or)h(inherited)e(from)i(the)h(shell's)d(paren)m(t)225 +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 2705 y Fp(\017)60 b Ft(curren)m(t)30 b(traps)g(set)h(b)m(y)f -Fs(trap)225 2840 y Fp(\017)60 b Ft(shell)28 b(parameters)h(that)h(are)g -(set)g(b)m(y)g(v)-5 b(ariable)28 b(assignmen)m(t)h(or)h(with)e -Fs(set)g Ft(or)i(inherited)d(from)i(the)330 2949 y(shell's)g(paren)m(t) -h(in)f(the)i(en)m(vironmen)m(t)225 3084 y Fp(\017)60 -b Ft(shell)42 b(functions)g(de\014ned)g(during)g(execution)i(or)f -(inherited)f(from)h(the)h(shell's)e(paren)m(t)h(in)g(the)330 -3194 y(en)m(vironmen)m(t)225 3329 y Fp(\017)60 b Ft(options)32 -b(enabled)g(at)i(in)m(v)m(o)s(cation)f(\(either)g(b)m(y)g(default)f(or) -h(with)f(command-line)f(argumen)m(ts\))j(or)330 3439 -y(b)m(y)c Fs(set)225 3574 y Fp(\017)60 b Ft(options)30 -b(enabled)f(b)m(y)h Fs(shopt)225 3709 y Fp(\017)60 b -Ft(shell)29 b(aliases)g(de\014ned)h(with)f Fs(alias)g -Ft(\(see)i(Section)f(6.6)i([Aliases],)e(page)h(71\))225 -3844 y Fp(\017)60 b Ft(v)-5 b(arious)49 b(pro)s(cess)g -Fl(id)p Ft(s,)55 b(including)46 b(those)51 b(of)e(bac)m(kground)h(jobs) -f(\(see)i(Section)f(3.2.3)h([Lists],)330 3954 y(page)31 -b(9\),)g(the)g(v)-5 b(alue)30 b(of)g Fs($$)p Ft(,)g(and)g(the)h(v)-5 -b(alue)30 b(of)g Fs($PPID)275 4115 y Ft(When)k(a)g(simple)f(command)h -(other)g(than)g(a)h(builtin)c(or)j(shell)f(function)g(is)g(to)i(b)s(e)f -(executed,)i(it)e(is)150 4225 y(in)m(v)m(ok)m(ed)24 b(in)f(a)h -(separate)h(execution)f(en)m(vironmen)m(t)g(that)g(consists)f(of)i(the) -f(follo)m(wing.)37 b(Unless)23 b(otherwise)150 4335 y(noted,)31 -b(the)f(v)-5 b(alues)30 b(are)h(inherited)d(from)i(the)g(shell.)225 -4470 y Fp(\017)60 b Ft(the)31 b(shell's)f(op)s(en)g(\014les,)h(plus)e -(an)m(y)i(mo)s(di\014cations)f(and)g(additions)f(sp)s(eci\014ed)h(b)m -(y)h(redirections)e(to)330 4580 y(the)i(command)225 4715 -y Fp(\017)60 b Ft(the)31 b(curren)m(t)f(w)m(orking)f(directory)225 -4850 y Fp(\017)60 b Ft(the)31 b(\014le)e(creation)i(mo)s(de)f(mask)225 -4986 y Fp(\017)60 b Ft(shell)30 b(v)-5 b(ariables)31 -b(and)g(functions)g(mark)m(ed)h(for)g(exp)s(ort,)g(along)g(with)f(v)-5 -b(ariables)30 b(exp)s(orted)i(for)g(the)330 5095 y(command,)e(passed)g -(in)f(the)i(en)m(vironmen)m(t)f(\(see)h(Section)f(3.7.4)j([En)m -(vironmen)m(t],)d(page)h(30\))225 5230 y Fp(\017)60 b -Ft(traps)31 b(caugh)m(t)h(b)m(y)f(the)g(shell)f(are)h(reset)h(to)g(the) -f(v)-5 b(alues)31 b(inherited)d(from)j(the)g(shell's)f(paren)m(t,)i -(and)330 5340 y(traps)e(ignored)g(b)m(y)g(the)g(shell)f(are)i(ignored)p -eop +Fs(trap)225 2840 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 2949 y(shell's)i(paren)m(t) +f(in)g(the)h(en)m(vironmen)m(t)225 3084 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 +3194 y(en)m(vironmen)m(t)225 3329 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 3439 +y(b)m(y)c Fs(set)225 3574 y Fp(\017)60 b Ft(options)31 +b(enabled)f(b)m(y)g Fs(shopt)225 3709 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(71\))225 +3844 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 3954 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 4115 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 4225 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 4335 y(noted,)31 +b(the)f(v)-5 b(alues)31 b(are)g(inherited)f(from)g(the)g(shell.)225 +4470 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 4580 y(the)g(command)225 4715 +y Fp(\017)60 b Ft(the)31 b(curren)m(t)f(w)m(orking)g(directory)225 +4850 y Fp(\017)60 b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225 +4986 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 5095 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 5230 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 5340 y(traps)e(ignored)h(b)m(y)f(the)g(shell)h(are)g(ignored)p +eop end %%Page: 30 36 -30 35 bop 150 -116 a Ft(30)2572 b(Bash)31 b(Reference)g(Man)m(ual)275 -299 y(A)41 b(command)g(in)m(v)m(ok)m(ed)h(in)e(this)h(separate)h(en)m -(vironmen)m(t)f(cannot)h(a\013ect)h(the)f(shell's)e(execution)150 -408 y(en)m(vironmen)m(t.)275 540 y(Command)35 b(substitution,)h -(commands)g(group)s(ed)f(with)h(paren)m(theses,)i(and)e(async)m -(hronous)g(com-)150 650 y(mands)c(are)h(in)m(v)m(ok)m(ed)h(in)d(a)j -(subshell)c(en)m(vironmen)m(t)i(that)i(is)e(a)h(duplicate)f(of)h(the)g -(shell)e(en)m(vironmen)m(t,)150 760 y(except)k(that)g(traps)f(caugh)m -(t)h(b)m(y)f(the)h(shell)d(are)i(reset)h(to)g(the)f(v)-5 -b(alues)34 b(that)h(the)f(shell)f(inherited)e(from)150 -869 y(its)h(paren)m(t)g(at)h(in)m(v)m(o)s(cation.)47 -b(Builtin)29 b(commands)j(that)h(are)g(in)m(v)m(ok)m(ed)g(as)f(part)g -(of)h(a)f(pip)s(eline)d(are)k(also)150 979 y(executed)41 -b(in)e(a)i(subshell)c(en)m(vironmen)m(t.)71 b(Changes)40 -b(made)g(to)h(the)g(subshell)c(en)m(vironmen)m(t)j(cannot)150 -1088 y(a\013ect)32 b(the)f(shell's)d(execution)j(en)m(vironmen)m(t.)275 -1220 y(If)38 b(a)h(command)f(is)f(follo)m(w)m(ed)i(b)m(y)f(a)h(`)p -Fs(&)p Ft(')g(and)f(job)g(con)m(trol)h(is)e(not)i(activ)m(e,)j(the)d -(default)f(standard)150 1330 y(input)e(for)h(the)h(command)f(is)g(the)h -(empt)m(y)g(\014le)e(`)p Fs(/dev/null)p Ft('.)61 b(Otherwise,)38 -b(the)g(in)m(v)m(ok)m(ed)g(command)150 1440 y(inherits)28 -b(the)j(\014le)e(descriptors)g(of)i(the)f(calling)f(shell)g(as)h(mo)s -(di\014ed)f(b)m(y)h(redirections.)150 1656 y Fk(3.7.4)63 -b(En)m(vironmen)m(t)275 1898 y Ft(When)31 b(a)g(program)h(is)e(in)m(v)m -(ok)m(ed)i(it)f(is)f(giv)m(en)h(an)h(arra)m(y)g(of)f(strings)f(called)h -(the)g Fq(en)m(vironmen)m(t)p Ft(.)44 b(This)150 2007 -y(is)29 b(a)i(list)e(of)i(name-v)-5 b(alue)30 b(pairs,)f(of)i(the)f -(form)g Fs(name=value)p Ft(.)275 2139 y(Bash)39 b(pro)m(vides)f(sev)m -(eral)i(w)m(a)m(ys)h(to)f(manipulate)d(the)j(en)m(vironmen)m(t.)68 -b(On)38 b(in)m(v)m(o)s(cation,)k(the)e(shell)150 2249 -y(scans)g(its)g(o)m(wn)g(en)m(vironmen)m(t)g(and)g(creates)i(a)f -(parameter)f(for)g(eac)m(h)i(name)e(found,)i(automatically)150 -2359 y(marking)25 b(it)g(for)h Fq(exp)s(ort)h Ft(to)g(c)m(hild)d(pro)s -(cesses.)39 b(Executed)26 b(commands)g(inherit)e(the)i(en)m(vironmen)m -(t.)38 b(The)150 2468 y Fs(export)d Ft(and)i(`)p Fs(declare)29 -b(-x)p Ft(')36 b(commands)h(allo)m(w)g(parameters)g(and)g(functions)f -(to)i(b)s(e)e(added)h(to)h(and)150 2578 y(deleted)20 -b(from)g(the)h(en)m(vironmen)m(t.)37 b(If)20 b(the)h(v)-5 -b(alue)20 b(of)h(a)g(parameter)g(in)e(the)h(en)m(vironmen)m(t)h(is)e -(mo)s(di\014ed,)i(the)150 2687 y(new)31 b(v)-5 b(alue)31 -b(b)s(ecomes)g(part)h(of)f(the)h(en)m(vironmen)m(t,)f(replacing)g(the)g -(old.)43 b(The)31 b(en)m(vironmen)m(t)g(inherited)150 -2797 y(b)m(y)g(an)m(y)g(executed)h(command)f(consists)f(of)h(the)g -(shell's)f(initial)e(en)m(vironmen)m(t,)j(whose)g(v)-5 -b(alues)30 b(ma)m(y)i(b)s(e)150 2907 y(mo)s(di\014ed)25 -b(in)g(the)i(shell,)f(less)g(an)m(y)h(pairs)e(remo)m(v)m(ed)j(b)m(y)f +TeXDict begin 30 35 bop 150 -116 a Ft(30)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 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 408 y(en)m(vironmen)m(t.)275 +540 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 650 +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 760 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 869 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 979 +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 1088 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m +(t.)275 1220 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 1330 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 +1440 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 +1656 y Fk(3.7.4)63 b(En)m(vironmen)m(t)275 1898 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 2007 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 2139 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 2249 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 2359 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 +2468 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 2578 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 +2687 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 2797 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 2907 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 3016 y(an)m(y)k(additions)d(via)i(the)h Fs(export)d +(plus)150 3016 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 3148 -y(The)j(en)m(vironmen)m(t)h(for)g(an)m(y)g(simple)f(command)h(or)g -(function)f(ma)m(y)h(b)s(e)g(augmen)m(ted)h(temp)s(orarily)150 -3258 y(b)m(y)c(pre\014xing)d(it)i(with)g(parameter)h(assignmen)m(ts,)g -(as)f(describ)s(ed)f(in)g(Section)i(3.4)h([Shell)c(P)m(arameters],)150 -3367 y(page)i(15.)41 b(These)29 b(assignmen)m(t)h(statemen)m(ts)h -(a\013ect)f(only)f(the)g(en)m(vironmen)m(t)g(seen)h(b)m(y)f(that)h -(command.)275 3499 y(If)h(the)i(`)p Fs(-k)p Ft(')f(option)g(is)f(set)i -(\(see)g(Section)f(4.3)h([The)f(Set)h(Builtin],)d(page)j(50\),)h(then)e -(all)f(parameter)150 3609 y(assignmen)m(ts)e(are)h(placed)g(in)e(the)i -(en)m(vironmen)m(t)f(for)h(a)g(command,)f(not)h(just)f(those)i(that)f +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 +3258 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 +3367 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 3499 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(50\),)h(then)e +(all)h(parameter)150 3609 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 3719 y(command)g(name.)275 3851 y(When)f(Bash)h(in)m -(v)m(ok)m(es)h(an)f(external)f(command,)h(the)g(v)-5 -b(ariable)29 b(`)p Fs($_)p Ft(')h(is)f(set)h(to)h(the)f(full)d(path)j +(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 3960 y(of)h(the)f(command)g(and)g(passed)g(to)h(that)g -(command)f(in)f(its)h(en)m(vironmen)m(t.)150 4177 y Fk(3.7.5)63 -b(Exit)40 b(Status)275 4418 y Ft(F)-8 b(or)32 b(the)g(shell's)e(purp)s -(oses,)g(a)j(command)e(whic)m(h)g(exits)g(with)g(a)h(zero)g(exit)g -(status)g(has)f(succeeded.)150 4528 y(A)e(non-zero)h(exit)f(status)h -(indicates)e(failure.)38 b(This)27 b(seemingly)h(coun)m(ter-in)m -(tuitiv)m(e)h(sc)m(heme)h(is)e(used)h(so)150 4638 y(there)34 -b(is)f(one)h(w)m(ell-de\014ned)e(w)m(a)m(y)i(to)h(indicate)e(success)h -(and)f(a)h(v)-5 b(ariet)m(y)34 b(of)g(w)m(a)m(ys)h(to)f(indicate)f(v)-5 -b(arious)150 4747 y(failure)36 b(mo)s(des.)62 b(When)38 -b(a)g(command)f(terminates)h(on)f(a)i(fatal)f(signal)e(whose)i(n)m(um)m -(b)s(er)e(is)h Fq(N)p Ft(,)h(Bash)150 4857 y(uses)30 -b(the)g(v)-5 b(alue)30 b(128)p Fs(+)p Fq(N)42 b Ft(as)30 -b(the)h(exit)f(status.)275 4989 y(If)35 b(a)h(command)g(is)f(not)h -(found,)g(the)g(c)m(hild)f(pro)s(cess)g(created)i(to)g(execute)g(it)f -(returns)e(a)j(status)f(of)150 5098 y(127.)42 b(If)30 -b(a)h(command)f(is)f(found)g(but)h(is)f(not)i(executable,)g(the)g -(return)e(status)i(is)e(126.)275 5230 y(If)j(a)i(command)f(fails)e(b)s -(ecause)i(of)h(an)f(error)f(during)f(expansion)h(or)h(redirection,)g -(the)h(exit)f(status)150 5340 y(is)c(greater)j(than)e(zero.)p -eop +(command)f(in)g(its)h(en)m(vironmen)m(t.)150 4177 y Fk(3.7.5)63 +b(Exit)40 b(Status)275 4418 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 4528 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 4638 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 4747 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 4857 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 4989 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 5098 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 +5230 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 +5340 y(is)c(greater)i(than)e(zero.)p eop end %%Page: 31 37 -31 36 bop 150 -116 a Ft(Chapter)30 b(3:)41 b(Basic)31 -b(Shell)d(F)-8 b(eatures)2246 b(31)275 299 y(The)38 b(exit)g(status)h -(is)f(used)g(b)m(y)g(the)h(Bash)g(conditional)e(commands)h(\(see)h -(Section)g(3.2.4.2)i([Con-)150 408 y(ditional)f(Constructs],)k(page)f -(10\))g(and)e(some)i(of)f(the)g(list)e(constructs)i(\(see)h(Section)e -(3.2.3)j([Lists],)150 518 y(page)31 b(9\).)275 651 y(All)38 -b(of)i(the)h(Bash)f(builtins)c(return)j(an)h(exit)g(status)h(of)f(zero) -h(if)e(they)h(succeed)g(and)g(a)g(non-zero)150 760 y(status)34 -b(on)f(failure,)g(so)h(they)g(ma)m(y)g(b)s(e)f(used)g(b)m(y)g(the)h -(conditional)e(and)h(list)f(constructs.)50 b(All)33 b(builtins)150 -870 y(return)c(an)i(exit)f(status)h(of)f(2)h(to)g(indicate)e(incorrect) -i(usage.)150 1089 y Fk(3.7.6)63 b(Signals)275 1332 y -Ft(When)27 b(Bash)h(is)g(in)m(teractiv)m(e,)h(in)e(the)h(absence)h(of)f -(an)m(y)g(traps,)h(it)e(ignores)h Fs(SIGTERM)e Ft(\(so)i(that)h(`)p -Fs(kill)150 1441 y(0)p Ft(')k(do)s(es)g(not)g(kill)d(an)j(in)m -(teractiv)m(e)h(shell\),)f(and)f Fs(SIGINT)f Ft(is)h(caugh)m(t)i(and)f -(handled)e(\(so)i(that)h(the)f Fs(wait)150 1551 y Ft(builtin)21 -b(is)j(in)m(terruptible\).)36 b(When)24 b(Bash)g(receiv)m(es)i(a)e -Fs(SIGINT)p Ft(,)h(it)f(breaks)g(out)h(of)f(an)m(y)h(executing)g(lo)s -(ops.)150 1660 y(In)31 b(all)f(cases,)j(Bash)f(ignores)f -Fs(SIGQUIT)p Ft(.)42 b(If)32 b(job)f(con)m(trol)h(is)e(in)h(e\013ect)i -(\(see)f(Chapter)f(7)h([Job)g(Con)m(trol],)150 1770 y(page)f(79\),)h -(Bash)e(ignores)g Fs(SIGTTIN)p Ft(,)f Fs(SIGTTOU)p Ft(,)g(and)g -Fs(SIGTSTP)p Ft(.)275 1903 y(Non-builtin)f(commands)j(started)g(b)m(y)g -(Bash)h(ha)m(v)m(e)g(signal)e(handlers)f(set)j(to)g(the)g(v)-5 -b(alues)30 b(inherited)150 2012 y(b)m(y)37 b(the)h(shell)e(from)h(its)g -(paren)m(t.)62 b(When)38 b(job)f(con)m(trol)h(is)e(not)i(in)e -(e\013ect,)41 b(async)m(hronous)c(commands)150 2122 y(ignore)e -Fs(SIGINT)f Ft(and)h Fs(SIGQUIT)e Ft(in)i(addition)e(to)k(these)f -(inherited)d(handlers.)54 b(Commands)35 b(run)f(as)i(a)150 -2232 y(result)26 b(of)i(command)f(substitution)f(ignore)h(the)h(k)m -(eyb)s(oard-generated)g(job)g(con)m(trol)g(signals)e -Fs(SIGTTIN)p Ft(,)150 2341 y Fs(SIGTTOU)p Ft(,)j(and)g -Fs(SIGTSTP)p Ft(.)275 2474 y(The)h(shell)g(exits)h(b)m(y)g(default)f -(up)s(on)g(receipt)h(of)g(a)h Fs(SIGHUP)p Ft(.)42 b(Before)32 -b(exiting,)f(an)g(in)m(teractiv)m(e)h(shell)150 2584 -y(resends)41 b(the)i Fs(SIGHUP)e Ft(to)i(all)e(jobs,)k(running)40 -b(or)i(stopp)s(ed.)76 b(Stopp)s(ed)41 b(jobs)h(are)h(sen)m(t)g -Fs(SIGCONT)d Ft(to)150 2693 y(ensure)32 b(that)h(they)g(receiv)m(e)h -(the)f Fs(SIGHUP)p Ft(.)47 b(T)-8 b(o)33 b(prev)m(en)m(t)g(the)g(shell) -e(from)i(sending)e(the)i Fs(SIGHUP)e Ft(signal)150 2803 -y(to)i(a)g(particular)e(job,)i(it)f(should)f(b)s(e)h(remo)m(v)m(ed)h -(from)g(the)f(jobs)g(table)h(with)e(the)i Fs(disown)e -Ft(builtin)e(\(see)150 2912 y(Section)h(7.2)h([Job)f(Con)m(trol)g -(Builtins],)e(page)j(80\))h(or)e(mark)m(ed)g(to)h(not)f(receiv)m(e)h -Fs(SIGHUP)e Ft(using)g Fs(disown)150 3022 y(-h)p Ft(.)275 -3155 y(If)i(the)h Fs(huponexit)d Ft(shell)i(option)g(has)h(b)s(een)f -(set)h(with)f Fs(shopt)f Ft(\(see)j(Section)f(4.2)h([Bash)f(Builtins],) -150 3264 y(page)f(39\),)h(Bash)e(sends)g(a)h Fs(SIGHUP)d -Ft(to)j(all)f(jobs)g(when)f(an)h(in)m(teractiv)m(e)h(login)f(shell)e -(exits.)275 3397 y(If)38 b(Bash)h(is)f(w)m(aiting)g(for)h(a)g(command)f -(to)i(complete)f(and)f(receiv)m(es)i(a)f(signal)f(for)g(whic)m(h)g(a)h -(trap)150 3507 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)d(not)j(b)s -(e)f(executed)i(un)m(til)d(the)i(command)f(completes.)54 -b(When)35 b(Bash)g(is)150 3616 y(w)m(aiting)h(for)h(an)g(async)m -(hronous)g(command)g(via)g(the)g Fs(wait)f Ft(builtin,)f(the)j -(reception)f(of)g(a)g(signal)f(for)150 3726 y(whic)m(h)e(a)h(trap)g -(has)g(b)s(een)f(set)h(will)e(cause)i(the)g Fs(wait)f -Ft(builtin)e(to)j(return)f(immediately)f(with)h(an)h(exit)150 -3836 y(status)c(greater)g(than)f(128,)i(immediately)d(after)i(whic)m(h) -e(the)i(trap)f(is)f(executed.)150 4088 y Fr(3.8)68 b(Shell)45 -b(Scripts)275 4330 y Ft(A)c(shell)f(script)h(is)g(a)h(text)h(\014le)e -(con)m(taining)g(shell)f(commands.)75 b(When)41 b(suc)m(h)h(a)g(\014le) -f(is)g(used)g(as)150 4440 y(the)33 b(\014rst)f(non-option)g(argumen)m -(t)i(when)e(in)m(v)m(oking)g(Bash,)i(and)e(neither)g(the)h(`)p -Fs(-c)p Ft(')g(nor)g(`)p Fs(-s)p Ft(')f(option)h(is)150 -4550 y(supplied)i(\(see)40 b(Section)f(6.1)g([In)m(v)m(oking)g(Bash],)i +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)275 299 +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 +408 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 +518 y(page)31 b(9\).)275 651 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 760 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 870 y(return)29 b(an)i(exit)g(status)g(of)f +(2)h(to)g(indicate)g(incorrect)h(usage.)150 1089 y Fk(3.7.6)63 +b(Signals)275 1332 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 1441 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 1551 y Ft(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 1660 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 1770 y(page)f(79\),)h(Bash)e(ignores)h +Fs(SIGTTIN)p Ft(,)e Fs(SIGTTOU)p Ft(,)g(and)g Fs(SIGTSTP)p +Ft(.)275 1903 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 2012 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 2122 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)150 2232 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 2341 y Fs(SIGTTOU)p Ft(,)h(and)g Fs(SIGTSTP)p +Ft(.)275 2474 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 2584 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 2693 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 2803 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 +2912 y(Section)f(7.2)g([Job)f(Con)m(trol)h(Builtins],)g(page)g(80\))h +(or)e(mark)m(ed)g(to)h(not)f(receiv)m(e)i Fs(SIGHUP)d +Ft(using)h Fs(disown)150 3022 y(-h)p Ft(.)275 3155 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 +3264 y(page)f(39\),)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 3397 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 3507 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 3616 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 3726 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 +3836 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 4088 y Fr(3.8)68 b(Shell)45 +b(Scripts)275 4330 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 4440 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 +4550 y(supplied)j(\(see)j(Section)g(6.1)f([In)m(v)m(oking)h(Bash],)h (page)f(63\),)i(Bash)d(reads)f(and)g(executes)i(commands)150 -4659 y(from)31 b(the)h(\014le,)g(then)f(exits.)45 b(This)30 -b(mo)s(de)h(of)h(op)s(eration)g(creates)h(a)f(non-in)m(teractiv)m(e)g -(shell.)43 b(The)32 b(shell)150 4769 y(\014rst)26 b(searc)m(hes)h(for)f -(the)g(\014le)g(in)f(the)h(curren)m(t)h(directory)-8 -b(,)27 b(and)f(lo)s(oks)f(in)h(the)g(directories)f(in)g -Fs($PATH)g Ft(if)h(not)150 4878 y(found)j(there.)275 -5011 y(When)34 b(Bash)h(runs)e(a)i(shell)e(script,)h(it)h(sets)g(the)f -(sp)s(ecial)g(parameter)h Fs(0)f Ft(to)h(the)g(name)g(of)g(the)g -(\014le,)150 5121 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)h -(and)f(the)h(p)s(ositional)d(parameters)i(are)h(set)g(to)g(the)g -(remain-)150 5230 y(ing)e(argumen)m(ts,)k(if)c(an)m(y)h(are)g(giv)m -(en.)66 b(If)39 b(no)g(additional)d(argumen)m(ts)k(are)f(supplied,)f -(the)h(p)s(ositional)150 5340 y(parameters)31 b(are)f(unset.)p -eop +4659 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 4769 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 4878 y(found)i(there.)275 +5011 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 5121 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 5230 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 5340 y(parameters)31 b(are)f(unset.)p +eop end %%Page: 32 38 -32 37 bop 150 -116 a Ft(32)2572 b(Bash)31 b(Reference)g(Man)m(ual)275 -299 y(A)39 b(shell)f(script)g(ma)m(y)i(b)s(e)f(made)h(executable)g(b)m -(y)f(using)f(the)i Fs(chmod)e Ft(command)h(to)h(turn)e(on)i(the)150 -408 y(execute)j(bit.)72 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h -(\014le)e(while)f(searc)m(hing)i(the)g Fs($PATH)f Ft(for)h(a)h -(command,)h(it)150 518 y(spa)m(wns)30 b(a)g(subshell)e(to)j(execute)h -(it.)40 b(In)30 b(other)g(w)m(ords,)g(executing)390 653 -y Fs(filename)46 b Fj(arguments)150 787 y Ft(is)29 b(equiv)-5 -b(alen)m(t)30 b(to)h(executing)390 922 y Fs(bash)47 b(filename)e -Fj(arguments)150 1056 y Ft(if)29 b Fs(filename)e Ft(is)i(an)g -(executable)i(shell)d(script.)39 b(This)28 b(subshell)f(reinitializes)f -(itself,)j(so)h(that)h(the)e(e\013ect)150 1166 y(is)35 -b(as)i(if)f(a)g(new)g(shell)f(had)h(b)s(een)g(in)m(v)m(ok)m(ed)g(to)i -(in)m(terpret)d(the)i(script,)g(with)e(the)i(exception)g(that)g(the)150 -1275 y(lo)s(cations)23 b(of)i(commands)e(remem)m(b)s(ered)h(b)m(y)g -(the)g(paren)m(t)g(\(see)h(the)f(description)e(of)i Fs(hash)f -Ft(in)g(Section)h(4.1)150 1385 y([Bourne)30 b(Shell)f(Builtins],)f -(page)j(33\))h(are)e(retained)g(b)m(y)g(the)h(c)m(hild.)275 -1519 y(Most)36 b(v)m(ersions)f(of)h(Unix)e(mak)m(e)i(this)f(a)h(part)f -(of)h(the)g(op)s(erating)f(system's)g(command)h(execution)150 -1629 y(mec)m(hanism.)49 b(If)33 b(the)g(\014rst)g(line)f(of)h(a)h -(script)e(b)s(egins)g(with)g(the)h(t)m(w)m(o)i(c)m(haracters)g(`)p -Fs(#!)p Ft(',)f(the)g(remainder)150 1738 y(of)d(the)g(line)f(sp)s -(eci\014es)f(an)i(in)m(terpreter)f(for)h(the)g(program.)43 -b(Th)m(us,)30 b(y)m(ou)h(can)h(sp)s(ecify)d(Bash,)j Fs(awk)p -Ft(,)e(P)m(erl,)150 1848 y(or)g(some)h(other)g(in)m(terpreter)f(and)f -(write)h(the)g(rest)h(of)g(the)f(script)f(\014le)h(in)f(that)i +TeXDict begin 32 37 bop 150 -116 a Ft(32)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 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 408 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 +518 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 653 y Fs(filename)46 +b Fj(arguments)150 787 y Ft(is)30 b(equiv)-5 b(alen)m(t)32 +b(to)f(executing)390 922 y Fs(bash)47 b(filename)e Fj(arguments)150 +1056 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 1166 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 1275 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 +1385 y([Bourne)30 b(Shell)h(Builtins],)g(page)g(33\))h(are)e(retained)h +(b)m(y)f(the)h(c)m(hild.)275 1519 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 1629 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 +1738 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 1848 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 1983 y(The)40 b(argumen)m(ts)h(to)g(the)g(in)m -(terpreter)f(consist)g(of)h(a)g(single)f(optional)f(argumen)m(t)j -(follo)m(wing)d(the)150 2092 y(in)m(terpreter)32 b(name)i(on)f(the)g -(\014rst)f(line)g(of)h(the)g(script)f(\014le,)h(follo)m(w)m(ed)g(b)m(y) -g(the)g(name)g(of)g(the)h(script)e(\014le,)150 2202 y(follo)m(w)m(ed)f -(b)m(y)h(the)f(rest)h(of)g(the)f(argumen)m(ts.)45 b(Bash)31 -b(will)e(p)s(erform)h(this)h(action)h(on)f(op)s(erating)g(systems)150 -2311 y(that)24 b(do)g(not)f(handle)f(it)h(themselv)m(es.)39 -b(Note)25 b(that)f(some)g(older)f(v)m(ersions)f(of)i(Unix)e(limit)g -(the)i(in)m(terpreter)150 2421 y(name)30 b(and)g(argumen)m(t)h(to)g(a)g -(maxim)m(um)e(of)i(32)g(c)m(haracters.)275 2555 y(Bash)h(scripts)f -(often)h(b)s(egin)f(with)g Fs(#!)f(/bin/bash)g Ft(\(assuming)h(that)i -(Bash)f(has)g(b)s(een)f(installed)f(in)150 2665 y(`)p -Fs(/bin)p Ft('\),)25 b(since)d(this)g(ensures)g(that)i(Bash)f(will)e(b) -s(e)h(used)h(to)h(in)m(terpret)e(the)h(script,)h(ev)m(en)g(if)e(it)h +(terpreter)g(consist)g(of)g(a)g(single)h(optional)f(argumen)m(t)h +(follo)m(wing)g(the)150 2092 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 2202 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 +2311 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 2421 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 2555 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 2665 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 2775 y(under)29 b(another)h(shell.)p -eop +eop end %%Page: 33 39 -33 38 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(33)150 299 y Fo(4)80 b(Shell)55 -b(Builtin)g(Commands)275 525 y Ft(Builtin)22 b(commands)i(are)h(con)m -(tained)g(within)d(the)j(shell)e(itself.)38 b(When)24 -b(the)h(name)g(of)g(a)g(builtin)c(com-)150 635 y(mand)26 -b(is)h(used)f(as)i(the)g(\014rst)e(w)m(ord)h(of)h(a)f(simple)f(command) -h(\(see)h(Section)f(3.2.1)i([Simple)d(Commands],)150 -745 y(page)21 b(8\),)j(the)d(shell)e(executes)j(the)f(command)f -(directly)-8 b(,)22 b(without)e(in)m(v)m(oking)g(another)h(program.)37 -b(Builtin)150 854 y(commands)f(are)h(necessary)g(to)g(implemen)m(t)e -(functionalit)m(y)g(imp)s(ossible)e(or)k(incon)m(v)m(enien)m(t)f(to)h -(obtain)150 964 y(with)29 b(separate)i(utilities.)275 -1097 y(This)i(section)i(brie\015y)f(the)h(builtins)d(whic)m(h)i(Bash)h -(inherits)e(from)i(the)g(Bourne)g(Shell,)g(as)g(w)m(ell)g(as)150 -1206 y(the)c(builtin)26 b(commands)k(whic)m(h)g(are)g(unique)f(to)i(or) -f(ha)m(v)m(e)i(b)s(een)e(extended)g(in)f(Bash.)275 1339 -y(Sev)m(eral)44 b(builtin)c(commands)k(are)h(describ)s(ed)d(in)h(other) -h(c)m(hapters:)69 b(builtin)40 b(commands)k(whic)m(h)150 -1449 y(pro)m(vide)22 b(the)i(Bash)f(in)m(terface)h(to)g(the)g(job)f -(con)m(trol)h(facilities)d(\(see)j(Section)g(7.2)g([Job)f(Con)m(trol)g -(Builtins],)150 1558 y(page)40 b(80\),)j(the)c(directory)g(stac)m(k)h -(\(see)g(Section)f(6.8.1)i([Directory)f(Stac)m(k)g(Builtins],)f(page)h -(73\),)j(the)150 1668 y(command)23 b(history)g(\(see)h(Section)f(9.2)i -([Bash)f(History)f(Builtins],)f(page)j(109\),)h(and)d(the)h -(programmable)150 1778 y(completion)30 b(facilities)e(\(see)k(Section)e -(8.7)h([Programmable)f(Completion)f(Builtins],)f(page)k(105\).)275 -1911 y(Man)m(y)f(of)f(the)h(builtins)26 b(ha)m(v)m(e)32 -b(b)s(een)e(extended)g(b)m(y)g Fl(posix)g Ft(or)g(Bash.)275 -2044 y(Unless)19 b(otherwise)h(noted,)i(eac)m(h)g(builtin)17 -b(command)j(do)s(cumen)m(ted)g(as)h(accepting)g(options)e(preceded)150 -2153 y(b)m(y)30 b(`)p Fs(-)p Ft(')h(accepts)g(`)p Fs(--)p -Ft(')g(to)g(signify)d(the)j(end)f(of)g(the)h(options.)150 -2406 y Fr(4.1)68 b(Bourne)45 b(Shell)g(Builtins)275 2648 -y Ft(The)31 b(follo)m(wing)f(shell)f(builtin)g(commands)i(are)h -(inherited)d(from)i(the)h(Bourne)f(Shell.)43 b(These)31 -b(com-)150 2758 y(mands)e(are)i(implemen)m(ted)e(as)i(sp)s(eci\014ed)d -(b)m(y)j(the)f Fl(posix)g Ft(1003.2)j(standard.)150 2914 -y Fs(:)d Ft(\(a)h(colon\))870 3024 y Fs(:)47 b([)p Fj(arguments)11 -b Fs(])630 3157 y Ft(Do)43 b(nothing)e(b)s(ey)m(ond)h(expanding)e -Fq(argumen)m(ts)46 b Ft(and)c(p)s(erforming)e(redirections.)74 -b(The)630 3267 y(return)29 b(status)i(is)e(zero.)150 -3423 y Fs(.)h Ft(\(a)h(p)s(erio)s(d\))870 3532 y Fs(.)47 +TeXDict begin 33 38 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(33)150 299 y Fo(4)80 +b(Shell)53 b(Builtin)f(Commands)275 525 y Ft(Builtin)25 +b(commands)f(are)h(con)m(tained)h(within)e(the)h(shell)g(itself.)40 +b(When)24 b(the)h(name)g(of)g(a)g(builtin)f(com-)150 +635 y(mand)i(is)i(used)e(as)i(the)g(\014rst)e(w)m(ord)h(of)h(a)f +(simple)h(command)f(\(see)h(Section)g(3.2.1)h([Simple)f(Commands],)150 +745 y(page)21 b(8\),)j(the)d(shell)g(executes)h(the)f(command)f +(directly)-8 b(,)24 b(without)d(in)m(v)m(oking)h(another)f(program.)37 +b(Builtin)150 854 y(commands)f(are)h(necessary)g(to)g(implemen)m(t)g +(functionalit)m(y)h(imp)s(ossible)e(or)h(incon)m(v)m(enien)m(t)h(to)f +(obtain)150 964 y(with)30 b(separate)h(utilities.)275 +1097 y(This)j(section)i(brie\015y)f(the)g(builtins)g(whic)m(h)g(Bash)g +(inherits)g(from)g(the)g(Bourne)g(Shell,)i(as)e(w)m(ell)i(as)150 +1206 y(the)31 b(builtin)e(commands)h(whic)m(h)h(are)f(unique)g(to)h(or) +f(ha)m(v)m(e)i(b)s(een)e(extended)g(in)g(Bash.)275 1339 +y(Sev)m(eral)45 b(builtin)e(commands)h(are)h(describ)s(ed)e(in)h(other) +g(c)m(hapters:)69 b(builtin)43 b(commands)h(whic)m(h)150 +1449 y(pro)m(vide)23 b(the)h(Bash)f(in)m(terface)i(to)f(the)g(job)f +(con)m(trol)i(facilities)g(\(see)f(Section)h(7.2)f([Job)f(Con)m(trol)h +(Builtins],)150 1558 y(page)40 b(80\),)j(the)c(directory)h(stac)m(k)g +(\(see)g(Section)g(6.8.1)h([Directory)g(Stac)m(k)f(Builtins],)i(page)e +(73\),)j(the)150 1668 y(command)23 b(history)h(\(see)g(Section)g(9.2)h +([Bash)f(History)g(Builtins],)h(page)g(109\),)h(and)d(the)h +(programmable)150 1778 y(completion)32 b(facilities)g(\(see)g(Section)f +(8.7)g([Programmable)g(Completion)g(Builtins],)g(page)h(105\).)275 +1911 y(Man)m(y)f(of)f(the)h(builtins)e(ha)m(v)m(e)j(b)s(een)e(extended) +g(b)m(y)g Fl(posix)g Ft(or)g(Bash.)275 2044 y(Unless)20 +b(otherwise)h(noted,)h(eac)m(h)g(builtin)e(command)g(do)s(cumen)m(ted)g +(as)h(accepting)h(options)e(preceded)150 2153 y(b)m(y)30 +b(`)p Fs(-)p Ft(')h(accepts)g(`)p Fs(--)p Ft(')g(to)g(signify)f(the)h +(end)f(of)g(the)h(options.)150 2406 y Fr(4.1)68 b(Bourne)45 +b(Shell)g(Builtins)275 2648 y Ft(The)31 b(follo)m(wing)i(shell)e +(builtin)h(commands)f(are)h(inherited)f(from)g(the)h(Bourne)f(Shell.)45 +b(These)31 b(com-)150 2758 y(mands)e(are)i(implemen)m(ted)g(as)g(sp)s +(eci\014ed)e(b)m(y)i(the)f Fl(posix)g Ft(1003.2)j(standard.)150 +2914 y Fs(:)d Ft(\(a)h(colon\))870 3024 y Fs(:)47 b([)p +Fj(arguments)11 b Fs(])630 3157 y Ft(Do)43 b(nothing)f(b)s(ey)m(ond)g +(expanding)f Fq(argumen)m(ts)46 b Ft(and)c(p)s(erforming)f +(redirections.)76 b(The)630 3267 y(return)29 b(status)i(is)f(zero.)150 +3423 y Fs(.)g Ft(\(a)h(p)s(erio)s(d\))870 3532 y Fs(.)47 b Fj(filename)57 b Fs([)p Fj(arguments)11 b Fs(])630 3665 y Ft(Read)34 b(and)f(execute)i(commands)e(from)g(the)h -Fq(\014lename)k Ft(argumen)m(t)c(in)e(the)i(curren)m(t)g(shell)630 -3775 y(con)m(text.)45 b(If)31 b Fq(\014lename)36 b Ft(do)s(es)31 -b(not)g(con)m(tain)h(a)f(slash,)g(the)h Fs(PATH)e Ft(v)-5 -b(ariable)30 b(is)g(used)g(to)i(\014nd)630 3885 y Fq(\014lename)p -Ft(.)51 b(When)34 b(Bash)g(is)g(not)g(in)f Fl(posix)g -Ft(mo)s(de,)i(the)g(curren)m(t)f(directory)f(is)g(searc)m(hed)630 -3994 y(if)d Fq(\014lename)35 b Ft(is)30 b(not)i(found)d(in)h +Fq(\014lename)39 b Ft(argumen)m(t)34 b(in)f(the)h(curren)m(t)g(shell) +630 3775 y(con)m(text.)45 b(If)31 b Fq(\014lename)37 +b Ft(do)s(es)31 b(not)g(con)m(tain)i(a)e(slash,)h(the)g +Fs(PATH)e Ft(v)-5 b(ariable)32 b(is)f(used)f(to)i(\014nd)630 +3885 y Fq(\014lename)p Ft(.)52 b(When)34 b(Bash)g(is)h(not)f(in)g +Fl(posix)f Ft(mo)s(de,)i(the)g(curren)m(t)f(directory)g(is)g(searc)m +(hed)630 3994 y(if)d Fq(\014lename)36 b Ft(is)31 b(not)h(found)d(in)i Fs($PATH)p Ft(.)41 b(If)31 b(an)m(y)g Fq(argumen)m(ts)k -Ft(are)c(supplied,)d(they)k(b)s(ecome)630 4104 y(the)e(p)s(ositional)e -(parameters)j(when)e Fq(\014lename)34 b Ft(is)29 b(executed.)42 -b(Otherwise)29 b(the)h(p)s(ositional)630 4213 y(parameters)43 -b(are)h(unc)m(hanged.)79 b(The)42 b(return)g(status)i(is)e(the)h(exit)g -(status)h(of)f(the)g(last)630 4323 y(command)37 b(executed,)k(or)c -(zero)h(if)f(no)g(commands)g(are)h(executed.)63 b(If)36 -b Fq(\014lename)42 b Ft(is)37 b(not)630 4433 y(found,)22 -b(or)f(cannot)g(b)s(e)f(read,)j(the)e(return)f(status)h(is)f(non-zero.) -38 b(This)19 b(builtin)f(is)h(equiv)-5 b(alen)m(t)630 +Ft(are)c(supplied,)f(they)i(b)s(ecome)630 4104 y(the)e(p)s(ositional)h +(parameters)g(when)e Fq(\014lename)35 b Ft(is)30 b(executed.)42 +b(Otherwise)30 b(the)g(p)s(ositional)630 4213 y(parameters)43 +b(are)h(unc)m(hanged.)79 b(The)42 b(return)g(status)i(is)f(the)g(exit)h +(status)g(of)f(the)g(last)630 4323 y(command)37 b(executed,)k(or)c +(zero)h(if)g(no)f(commands)g(are)h(executed.)63 b(If)36 +b Fq(\014lename)43 b Ft(is)38 b(not)630 4433 y(found,)22 +b(or)f(cannot)g(b)s(e)f(read,)j(the)e(return)f(status)h(is)g(non-zero.) +38 b(This)20 b(builtin)h(is)f(equiv)-5 b(alen)m(t)630 4542 y(to)31 b Fs(source)p Ft(.)150 4699 y Fs(break)870 -4831 y(break)46 b([)p Fj(n)11 b Fs(])630 4964 y Ft(Exit)44 -b(from)g(a)g Fs(for)p Ft(,)k Fs(while)p Ft(,)e Fs(until)p -Ft(,)h(or)d Fs(select)f Ft(lo)s(op.)82 b(If)44 b Fq(n)g -Ft(is)f(supplied,)i(the)g Fq(n)p Ft(th)630 5074 y(enclosing)39 -b(lo)s(op)g(is)h(exited.)69 b Fq(n)40 b Ft(m)m(ust)g(b)s(e)f(greater)j -(than)d(or)i(equal)e(to)i(1.)70 b(The)40 b(return)630 -5184 y(status)31 b(is)e(zero)i(unless)e Fq(n)h Ft(is)f(not)i(greater)g -(than)g(or)f(equal)g(to)h(1.)150 5340 y Fs(cd)p eop +4831 y(break)46 b([)p Fj(n)11 b Fs(])630 4964 y Ft(Exit)45 +b(from)f(a)g Fs(for)p Ft(,)k Fs(while)p Ft(,)e Fs(until)p +Ft(,)h(or)d Fs(select)f Ft(lo)s(op.)83 b(If)44 b Fq(n)g +Ft(is)g(supplied,)j(the)e Fq(n)p Ft(th)630 5074 y(enclosing)c(lo)s(op)f +(is)h(exited.)70 b Fq(n)40 b Ft(m)m(ust)g(b)s(e)f(greater)j(than)d(or)i +(equal)f(to)h(1.)70 b(The)40 b(return)630 5184 y(status)31 +b(is)f(zero)h(unless)f Fq(n)g Ft(is)g(not)h(greater)g(than)g(or)f +(equal)h(to)g(1.)150 5340 y Fs(cd)p eop end %%Page: 34 40 -34 39 bop 150 -116 a Ft(34)2572 b(Bash)31 b(Reference)g(Man)m(ual)870 -299 y Fs(cd)47 b([-L|-P])f([)p Fj(directory)11 b Fs(])630 -431 y Ft(Change)37 b(the)g(curren)m(t)f(w)m(orking)h(directory)f(to)i -Fq(directory)p Ft(.)59 b(If)37 b Fq(directory)44 b Ft(is)36 -b(not)h(giv)m(en,)630 541 y(the)31 b(v)-5 b(alue)30 b(of)h(the)g -Fs(HOME)e Ft(shell)g(v)-5 b(ariable)30 b(is)g(used.)40 -b(If)31 b(the)g(shell)e(v)-5 b(ariable)29 b Fs(CDPATH)g -Ft(exists,)630 650 y(it)e(is)f(used)g(as)h(a)h(searc)m(h)f(path.)40 -b(If)26 b Fq(directory)34 b Ft(b)s(egins)26 b(with)g(a)h(slash,)g -Fs(CDPATH)e Ft(is)h(not)h(used.)630 783 y(The)h(`)p Fs(-P)p -Ft(')h(option)f(means)g(to)h(not)g(follo)m(w)f(sym)m(b)s(olic)f(links;) -g(sym)m(b)s(olic)g(links)f(are)j(follo)m(w)m(ed)630 892 -y(b)m(y)23 b(default)g(or)h(with)e(the)i(`)p Fs(-L)p -Ft(')f(option.)38 b(If)23 b Fq(directory)31 b Ft(is)22 -b(`)p Fs(-)p Ft(',)k(it)d(is)f(equiv)-5 b(alen)m(t)23 -b(to)i Fs($OLDPWD)p Ft(.)630 1025 y(If)33 b(a)h(non-empt)m(y)g -(directory)f(name)g(from)g Fs(CDPATH)f Ft(is)g(used,)i(or)g(if)e(`)p -Fs(-)p Ft(')i(is)e(the)i(\014rst)f(argu-)630 1134 y(men)m(t,)28 -b(and)e(the)h(directory)f(c)m(hange)i(is)e(successful,)h(the)g -(absolute)f(pathname)h(of)f(the)h(new)630 1244 y(w)m(orking)j -(directory)g(is)f(written)g(to)j(the)e(standard)g(output.)630 -1377 y(The)f(return)g(status)h(is)e(zero)j(if)d(the)i(directory)f(is)g -(successfully)f(c)m(hanged,)i(non-zero)g(oth-)630 1486 +TeXDict begin 34 39 bop 150 -116 a Ft(34)2572 b(Bash)31 +b(Reference)g(Man)m(ual)870 299 y Fs(cd)47 b([-L|-P])f([)p +Fj(directory)11 b Fs(])630 431 y Ft(Change)37 b(the)g(curren)m(t)f(w)m +(orking)i(directory)f(to)h Fq(directory)p Ft(.)60 b(If)37 +b Fq(directory)45 b Ft(is)37 b(not)g(giv)m(en,)630 541 +y(the)31 b(v)-5 b(alue)31 b(of)g(the)g Fs(HOME)e Ft(shell)i(v)-5 +b(ariable)32 b(is)f(used.)40 b(If)31 b(the)g(shell)g(v)-5 +b(ariable)31 b Fs(CDPATH)e Ft(exists,)630 650 y(it)f(is)f(used)f(as)h +(a)h(searc)m(h)f(path.)40 b(If)26 b Fq(directory)35 b +Ft(b)s(egins)27 b(with)g(a)g(slash,)h Fs(CDPATH)d Ft(is)i(not)g(used.) +630 783 y(The)h(`)p Fs(-P)p Ft(')h(option)g(means)f(to)h(not)g(follo)m +(w)h(sym)m(b)s(olic)f(links;)g(sym)m(b)s(olic)g(links)f(are)h(follo)m +(w)m(ed)630 892 y(b)m(y)23 b(default)h(or)g(with)f(the)h(`)p +Fs(-L)p Ft(')f(option.)39 b(If)23 b Fq(directory)32 b +Ft(is)23 b(`)p Fs(-)p Ft(',)j(it)e(is)f(equiv)-5 b(alen)m(t)25 +b(to)g Fs($OLDPWD)p Ft(.)630 1025 y(If)33 b(a)h(non-empt)m(y)g +(directory)g(name)f(from)g Fs(CDPATH)f Ft(is)h(used,)h(or)g(if)f(`)p +Fs(-)p Ft(')h(is)f(the)h(\014rst)f(argu-)630 1134 y(men)m(t,)28 +b(and)e(the)h(directory)g(c)m(hange)h(is)f(successful,)h(the)f +(absolute)g(pathname)g(of)f(the)h(new)630 1244 y(w)m(orking)k +(directory)g(is)f(written)g(to)i(the)e(standard)g(output.)630 +1377 y(The)f(return)g(status)h(is)f(zero)i(if)e(the)h(directory)g(is)g +(successfully)g(c)m(hanged,)g(non-zero)g(oth-)630 1486 y(erwise.)150 1641 y Fs(continue)870 1774 y(continue)46 -b([)p Fj(n)11 b Fs(])630 1906 y Ft(Resume)32 b(the)g(next)g(iteration)g -(of)g(an)g(enclosing)f Fs(for)p Ft(,)h Fs(while)p Ft(,)f +b([)p Fj(n)11 b Fs(])630 1906 y Ft(Resume)32 b(the)g(next)g(iteration)i +(of)e(an)g(enclosing)h Fs(for)p Ft(,)f Fs(while)p Ft(,)f Fs(until)p Ft(,)g(or)h Fs(select)f Ft(lo)s(op.)630 2016 -y(If)f Fq(n)h Ft(is)f(supplied,)d(the)32 b(execution)f(of)g(the)g -Fq(n)p Ft(th)f(enclosing)g(lo)s(op)g(is)f(resumed.)42 +y(If)f Fq(n)h Ft(is)g(supplied,)e(the)j(execution)g(of)f(the)g +Fq(n)p Ft(th)f(enclosing)i(lo)s(op)f(is)f(resumed.)42 b Fq(n)30 b Ft(m)m(ust)h(b)s(e)630 2125 y(greater)39 -b(than)f(or)g(equal)f(to)i(1.)63 b(The)38 b(return)e(status)j(is)d -(zero)j(unless)d Fq(n)i Ft(is)f(not)h(greater)630 2235 -y(than)30 b(or)g(equal)g(to)h(1.)150 2390 y Fs(eval)870 +b(than)f(or)g(equal)g(to)h(1.)63 b(The)38 b(return)e(status)j(is)e +(zero)i(unless)e Fq(n)h Ft(is)g(not)g(greater)630 2235 +y(than)30 b(or)g(equal)h(to)g(1.)150 2390 y Fs(eval)870 2523 y(eval)47 b([)p Fj(arguments)11 b Fs(])630 2655 -y Ft(The)25 b(argumen)m(ts)h(are)g(concatenated)i(together)f(in)m(to)e -(a)h(single)f(command,)h(whic)m(h)f(is)f(then)630 2765 -y(read)35 b(and)g(executed,)j(and)d(its)g(exit)g(status)h(returned)e -(as)h(the)h(exit)f(status)h(of)g Fs(eval)p Ft(.)54 b(If)630 -2874 y(there)31 b(are)f(no)h(argumen)m(ts)f(or)h(only)e(empt)m(y)i -(argumen)m(ts,)g(the)f(return)g(status)g(is)g(zero.)150 +y Ft(The)25 b(argumen)m(ts)h(are)g(concatenated)i(together)f(in)m(to)f +(a)g(single)h(command,)f(whic)m(h)g(is)f(then)630 2765 +y(read)35 b(and)g(executed,)j(and)d(its)h(exit)g(status)g(returned)e +(as)h(the)h(exit)g(status)g(of)g Fs(eval)p Ft(.)54 b(If)630 +2874 y(there)31 b(are)f(no)h(argumen)m(ts)f(or)h(only)f(empt)m(y)h +(argumen)m(ts,)g(the)f(return)g(status)g(is)h(zero.)150 3029 y Fs(exec)870 3162 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 3294 y Ft(If)28 b Fq(command)j Ft(is)d(supplied,)d(it)j -(replaces)g(the)g(shell)f(without)g(creating)i(a)f(new)g(pro)s(cess.)39 -b(If)630 3404 y(the)25 b(`)p Fs(-l)p Ft(')f(option)h(is)e(supplied,)g -(the)i(shell)e(places)h(a)h(dash)f(at)i(the)f(b)s(eginning)d(of)i(the)h +b Fs(]])630 3294 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 3404 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 3513 y(arg)h(passed)f(to)h Fq(command)p Ft(.)39 -b(This)23 b(is)i(what)g(the)h Fs(login)d Ft(program)j(do)s(es.)38 +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 3623 y(causes)g -Fq(command)i Ft(to)e(b)s(e)f(executed)h(with)e(an)h(empt)m(y)h(en)m -(vironmen)m(t.)38 b(If)24 b(`)p Fs(-a)p Ft(')g(is)f(supplied,)630 -3733 y(the)32 b(shell)e(passes)i Fq(name)37 b Ft(as)c(the)f(zeroth)h +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 +3733 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 3842 y(sp)s(eci\014ed,)f(redirections)f(ma)m(y)i -(b)s(e)f(used)f(to)i(a\013ect)h(the)f(curren)m(t)f(shell)f(en)m -(vironmen)m(t.)52 b(If)630 3952 y(there)34 b(are)h(no)f(redirection)f -(errors,)i(the)f(return)f(status)i(is)e(zero;)k(otherwise)d(the)g -(return)630 4061 y(status)d(is)e(non-zero.)150 4217 y +Fq(command)j Ft(is)630 3842 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 3952 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 4061 y(status)d(is)f(non-zero.)150 4217 y Fs(exit)870 4349 y(exit)47 b([)p Fj(n)11 b Fs(])630 4482 -y Ft(Exit)29 b(the)h(shell,)f(returning)e(a)k(status)f(of)g -Fq(n)f Ft(to)h(the)g(shell's)e(paren)m(t.)41 b(If)30 -b Fq(n)f Ft(is)g(omitted,)h(the)630 4591 y(exit)c(status)h(is)f(that)h -(of)g(the)g(last)f(command)g(executed.)41 b(An)m(y)26 -b(trap)h(on)f Fs(EXIT)f Ft(is)h(executed)630 4701 y(b)s(efore)k(the)h -(shell)d(terminates.)150 4856 y Fs(export)870 4988 y(export)46 +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 4591 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 4701 y(b)s(efore)j(the)h +(shell)f(terminates.)150 4856 y Fs(export)870 4988 y(export)46 b([-fn])g([-p])h([)p Fj(name)11 b Fs([=)p Fj(value)g Fs(]])630 5121 y Ft(Mark)40 b(eac)m(h)h Fq(name)k Ft(to)40 -b(b)s(e)f(passed)g(to)i(c)m(hild)d(pro)s(cesses)h(in)f(the)i(en)m -(vironmen)m(t.)69 b(If)39 b(the)630 5230 y(`)p Fs(-f)p -Ft(')29 b(option)g(is)g(supplied,)e(the)i Fq(name)5 b -Ft(s)30 b(refer)f(to)h(shell)e(functions;)g(otherwise)h(the)h(names)630 -5340 y(refer)36 b(to)i(shell)c(v)-5 b(ariables.)58 b(The)36 -b(`)p Fs(-n)p Ft(')h(option)f(means)g(to)h(no)g(longer)f(mark)g(eac)m -(h)i Fq(name)p eop +b(b)s(e)f(passed)g(to)i(c)m(hild)f(pro)s(cesses)f(in)g(the)h(en)m +(vironmen)m(t.)70 b(If)39 b(the)630 5230 y(`)p Fs(-f)p +Ft(')29 b(option)h(is)g(supplied,)f(the)g Fq(name)5 b +Ft(s)30 b(refer)f(to)h(shell)g(functions;)f(otherwise)h(the)g(names)630 +5340 y(refer)36 b(to)i(shell)e(v)-5 b(ariables.)60 b(The)36 +b(`)p Fs(-n)p Ft(')h(option)g(means)f(to)h(no)g(longer)g(mark)f(eac)m +(h)i Fq(name)p eop end %%Page: 35 41 -35 40 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(35)630 299 y(for)39 b(exp)s(ort.)65 -b(If)39 b(no)g Fq(names)j Ft(are)d(supplied,)f(or)h(if)f(the)h(`)p -Fs(-p)p Ft(')g(option)f(is)g(giv)m(en,)j(a)e(list)f(of)630 -408 y(exp)s(orted)e(names)h(is)e(displa)m(y)m(ed.)58 -b(The)37 b(`)p Fs(-p)p Ft(')f(option)g(displa)m(ys)f(output)h(in)f(a)i -(form)f(that)630 518 y(ma)m(y)c(b)s(e)e(reused)g(as)i(input.)41 -b(If)30 b(a)i(v)-5 b(ariable)29 b(name)j(is)e(follo)m(w)m(ed)g(b)m(y)h -(=)p Fq(v)-5 b(alue)p Ft(,)31 b(the)g(v)-5 b(alue)31 -b(of)630 628 y(the)g(v)-5 b(ariable)29 b(is)g(set)i(to)g -Fq(v)-5 b(alue)p Ft(.)630 761 y(The)29 b(return)e(status)j(is)e(zero)i -(unless)d(an)i(in)m(v)-5 b(alid)26 b(option)j(is)f(supplied,)e(one)k -(of)f(the)g(names)630 870 y(is)g(not)i(a)f(v)-5 b(alid)29 -b(shell)f(v)-5 b(ariable)29 b(name,)h(or)h(`)p Fs(-f)p -Ft(')f(is)f(supplied)e(with)h(a)j(name)f(that)h(is)e(not)i(a)630 -980 y(shell)e(function.)150 1136 y Fs(getopts)870 1270 +TeXDict begin 35 40 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(35)630 299 y(for)39 +b(exp)s(ort.)65 b(If)39 b(no)g Fq(names)j Ft(are)d(supplied,)h(or)f(if) +g(the)g(`)p Fs(-p)p Ft(')g(option)g(is)g(giv)m(en,)j(a)d(list)h(of)630 +408 y(exp)s(orted)c(names)h(is)f(displa)m(y)m(ed.)60 +b(The)37 b(`)p Fs(-p)p Ft(')f(option)h(displa)m(ys)g(output)f(in)g(a)h +(form)f(that)630 518 y(ma)m(y)c(b)s(e)e(reused)g(as)i(input.)42 +b(If)30 b(a)i(v)-5 b(ariable)31 b(name)h(is)f(follo)m(w)m(ed)h(b)m(y)f +(=)p Fq(v)-5 b(alue)p Ft(,)32 b(the)f(v)-5 b(alue)32 +b(of)630 628 y(the)f(v)-5 b(ariable)31 b(is)f(set)h(to)g +Fq(v)-5 b(alue)p Ft(.)630 761 y(The)29 b(return)e(status)j(is)f(zero)h +(unless)e(an)h(in)m(v)-5 b(alid)29 b(option)h(is)f(supplied,)f(one)i +(of)f(the)g(names)630 870 y(is)h(not)h(a)f(v)-5 b(alid)31 +b(shell)f(v)-5 b(ariable)31 b(name,)f(or)h(`)p Fs(-f)p +Ft(')f(is)g(supplied)f(with)g(a)i(name)f(that)h(is)f(not)h(a)630 +980 y(shell)g(function.)150 1136 y Fs(getopts)870 1270 y(getopts)46 b Fj(optstring)56 b(name)h Fs([)p Fj(args)11 -b Fs(])630 1403 y(getopts)28 b Ft(is)h(used)h(b)m(y)g(shell)e(scripts)h -(to)h(parse)g(p)s(ositional)e(parameters.)41 b Fq(optstring)c -Ft(con-)630 1512 y(tains)k(the)h(option)e(c)m(haracters)j(to)g(b)s(e)d -(recognized;)48 b(if)41 b(a)g(c)m(haracter)j(is)c(follo)m(w)m(ed)h(b)m -(y)h(a)630 1622 y(colon,)32 b(the)g(option)f(is)g(exp)s(ected)h(to)h -(ha)m(v)m(e)g(an)e(argumen)m(t,)i(whic)m(h)e(should)e(b)s(e)i -(separated)630 1731 y(from)37 b(it)g(b)m(y)g(white)g(space.)63 -b(The)37 b(colon)g(\(`)p Fs(:)p Ft('\))i(and)d(question)h(mark)g(\(`)p -Fs(?)p Ft('\))i(ma)m(y)f(not)g(b)s(e)630 1841 y(used)g(as)g(option)g(c) -m(haracters.)67 b(Eac)m(h)39 b(time)f(it)g(is)f(in)m(v)m(ok)m(ed,)k -Fs(getopts)c Ft(places)h(the)h(next)630 1951 y(option)28 -b(in)f(the)i(shell)e(v)-5 b(ariable)28 b Fq(name)p Ft(,)h(initializing) -c Fq(name)34 b Ft(if)27 b(it)h(do)s(es)h(not)g(exist,)g(and)f(the)630 -2060 y(index)k(of)h(the)h(next)f(argumen)m(t)h(to)g(b)s(e)e(pro)s -(cessed)h(in)m(to)g(the)h(v)-5 b(ariable)32 b Fs(OPTIND)p -Ft(.)48 b Fs(OPTIND)630 2170 y Ft(is)40 b(initialized)e(to)k(1)f(eac)m -(h)h(time)f(the)g(shell)e(or)i(a)g(shell)e(script)h(is)g(in)m(v)m(ok)m -(ed.)73 b(When)41 b(an)630 2279 y(option)35 b(requires)e(an)i(argumen)m -(t,)i Fs(getopts)c Ft(places)i(that)h(argumen)m(t)g(in)m(to)f(the)g(v) +b Fs(])630 1403 y(getopts)28 b Ft(is)i(used)g(b)m(y)g(shell)g(scripts)g +(to)g(parse)g(p)s(ositional)h(parameters.)41 b Fq(optstring)d +Ft(con-)630 1512 y(tains)k(the)g(option)f(c)m(haracters)i(to)g(b)s(e)d +(recognized;)49 b(if)42 b(a)f(c)m(haracter)j(is)d(follo)m(w)m(ed)i(b)m +(y)f(a)630 1622 y(colon,)33 b(the)f(option)g(is)g(exp)s(ected)g(to)h +(ha)m(v)m(e)g(an)e(argumen)m(t,)i(whic)m(h)f(should)e(b)s(e)h +(separated)630 1731 y(from)37 b(it)h(b)m(y)f(white)h(space.)63 +b(The)37 b(colon)h(\(`)p Fs(:)p Ft('\))h(and)d(question)i(mark)f(\(`)p +Fs(?)p Ft('\))i(ma)m(y)f(not)g(b)s(e)630 1841 y(used)g(as)g(option)h(c) +m(haracters.)67 b(Eac)m(h)39 b(time)g(it)g(is)f(in)m(v)m(ok)m(ed,)k +Fs(getopts)37 b Ft(places)i(the)g(next)630 1951 y(option)29 +b(in)f(the)h(shell)g(v)-5 b(ariable)30 b Fq(name)p Ft(,)f(initializing) +i Fq(name)j Ft(if)28 b(it)h(do)s(es)g(not)g(exist,)h(and)e(the)630 +2060 y(index)33 b(of)g(the)h(next)f(argumen)m(t)h(to)g(b)s(e)e(pro)s +(cessed)h(in)m(to)h(the)g(v)-5 b(ariable)34 b Fs(OPTIND)p +Ft(.)48 b Fs(OPTIND)630 2170 y Ft(is)41 b(initialized)i(to)f(1)f(eac)m +(h)h(time)g(the)f(shell)g(or)g(a)g(shell)g(script)g(is)g(in)m(v)m(ok)m +(ed.)74 b(When)41 b(an)630 2279 y(option)36 b(requires)e(an)h(argumen)m +(t,)i Fs(getopts)c Ft(places)j(that)g(argumen)m(t)g(in)m(to)g(the)f(v) -5 b(ariable)630 2389 y Fs(OPTARG)p Ft(.)55 b(The)35 -b(shell)e(do)s(es)j(not)g(reset)g Fs(OPTIND)e Ft(automatically;)k(it)d -(m)m(ust)g(b)s(e)g(man)m(ually)630 2498 y(reset)i(b)s(et)m(w)m(een)g(m) -m(ultiple)e(calls)g(to)i Fs(getopts)e Ft(within)f(the)j(same)g(shell)d -(in)m(v)m(o)s(cation)j(if)f(a)630 2608 y(new)30 b(set)h(of)f -(parameters)h(is)e(to)j(b)s(e)d(used.)630 2741 y(When)41 -b(the)h(end)e(of)i(options)f(is)f(encoun)m(tered,)45 -b Fs(getopts)39 b Ft(exits)i(with)f(a)i(return)e(v)-5 -b(alue)630 2851 y(greater)32 b(than)e(zero.)41 b Fs(OPTIND)29 -b Ft(is)g(set)i(to)g(the)g(index)e(of)h(the)h(\014rst)f(non-option)f -(argumen)m(t,)630 2960 y(and)h Fs(name)f Ft(is)g(set)i(to)g(`)p -Fs(?)p Ft('.)630 3093 y Fs(getopts)c Ft(normally)h(parses)g(the)i(p)s -(ositional)d(parameters,)j(but)e(if)h(more)g(argumen)m(ts)h(are)630 -3203 y(giv)m(en)g(in)f Fq(args)p Ft(,)i Fs(getopts)e +b(shell)g(do)s(es)h(not)g(reset)g Fs(OPTIND)e Ft(automatically;)41 +b(it)36 b(m)m(ust)f(b)s(e)g(man)m(ually)630 2498 y(reset)i(b)s(et)m(w)m +(een)g(m)m(ultiple)h(calls)f(to)g Fs(getopts)e Ft(within)h(the)h(same)g +(shell)f(in)m(v)m(o)s(cation)j(if)e(a)630 2608 y(new)30 +b(set)h(of)f(parameters)h(is)f(to)i(b)s(e)d(used.)630 +2741 y(When)41 b(the)h(end)e(of)i(options)g(is)f(encoun)m(tered,)k +Fs(getopts)39 b Ft(exits)j(with)f(a)h(return)e(v)-5 b(alue)630 +2851 y(greater)32 b(than)e(zero.)41 b Fs(OPTIND)29 b +Ft(is)h(set)h(to)g(the)g(index)f(of)g(the)h(\014rst)f(non-option)g +(argumen)m(t,)630 2960 y(and)g Fs(name)f Ft(is)h(set)h(to)g(`)p +Fs(?)p Ft('.)630 3093 y Fs(getopts)c Ft(normally)j(parses)e(the)i(p)s +(ositional)g(parameters,)g(but)e(if)i(more)f(argumen)m(ts)h(are)630 +3203 y(giv)m(en)h(in)f Fq(args)p Ft(,)h Fs(getopts)e Ft(parses)h(those)h(instead.)630 3336 y Fs(getopts)h -Ft(can)h(rep)s(ort)g(errors)g(in)g(t)m(w)m(o)i(w)m(a)m(ys.)51 -b(If)33 b(the)h(\014rst)e(c)m(haracter)k(of)d Fq(optstring)41 -b Ft(is)33 b(a)630 3446 y(colon,)i Fq(silen)m(t)h Ft(error)d(rep)s -(orting)g(is)h(used.)51 b(In)33 b(normal)h(op)s(eration)f(diagnostic)h -(messages)630 3555 y(are)c(prin)m(ted)d(when)h(in)m(v)-5 -b(alid)27 b(options)i(or)g(missing)e(option)h(argumen)m(ts)i(are)f -(encoun)m(tered.)630 3665 y(If)34 b(the)g(v)-5 b(ariable)33 -b Fs(OPTERR)f Ft(is)h(set)i(to)f(0,)i(no)e(error)g(messages)h(will)c(b) -s(e)i(displa)m(y)m(ed,)h(ev)m(en)h(if)630 3774 y(the)c(\014rst)e(c)m -(haracter)j(of)f Fs(optstring)d Ft(is)h(not)i(a)f(colon.)630 -3907 y(If)39 b(an)h(in)m(v)-5 b(alid)38 b(option)h(is)g(seen,)j -Fs(getopts)c Ft(places)i(`)p Fs(?)p Ft(')g(in)m(to)g -Fq(name)45 b Ft(and,)d(if)d(not)h(silen)m(t,)630 4017 -y(prin)m(ts)e(an)i(error)f(message)h(and)f(unsets)g Fs(OPTARG)p -Ft(.)67 b(If)39 b Fs(getopts)f Ft(is)h(silen)m(t,)i(the)e(option)630 -4127 y(c)m(haracter)32 b(found)d(is)g(placed)h(in)f Fs(OPTARG)g -Ft(and)h(no)g(diagnostic)g(message)h(is)f(prin)m(ted.)630 -4260 y(If)d(a)g(required)e(argumen)m(t)j(is)e(not)h(found,)g(and)f -Fs(getopts)f Ft(is)h(not)i(silen)m(t,)f(a)g(question)f(mark)630 -4369 y(\(`)p Fs(?)p Ft('\))i(is)f(placed)g(in)f Fq(name)p -Ft(,)i Fs(OPTARG)e Ft(is)g(unset,)i(and)f(a)g(diagnostic)g(message)i -(is)d(prin)m(ted.)38 b(If)630 4479 y Fs(getopts)28 b -Ft(is)g(silen)m(t,)h(then)g(a)h(colon)g(\(`)p Fs(:)p -Ft('\))g(is)f(placed)g(in)f Fq(name)35 b Ft(and)29 b -Fs(OPTARG)f Ft(is)g(set)i(to)h(the)630 4589 y(option)f(c)m(haracter)i +Ft(can)h(rep)s(ort)g(errors)g(in)h(t)m(w)m(o)h(w)m(a)m(ys.)51 +b(If)33 b(the)h(\014rst)e(c)m(haracter)k(of)d Fq(optstring)42 +b Ft(is)34 b(a)630 3446 y(colon,)i Fq(silen)m(t)i Ft(error)33 +b(rep)s(orting)h(is)h(used.)51 b(In)33 b(normal)i(op)s(eration)f +(diagnostic)i(messages)630 3555 y(are)30 b(prin)m(ted)e(when)g(in)m(v) +-5 b(alid)30 b(options)g(or)f(missing)g(option)g(argumen)m(ts)h(are)f +(encoun)m(tered.)630 3665 y(If)34 b(the)g(v)-5 b(ariable)35 +b Fs(OPTERR)d Ft(is)i(set)h(to)f(0,)i(no)e(error)g(messages)h(will)f(b) +s(e)f(displa)m(y)m(ed,)j(ev)m(en)f(if)630 3774 y(the)c(\014rst)e(c)m +(haracter)j(of)f Fs(optstring)d Ft(is)i(not)h(a)f(colon.)630 +3907 y(If)39 b(an)h(in)m(v)-5 b(alid)41 b(option)f(is)g(seen,)i +Fs(getopts)c Ft(places)j(`)p Fs(?)p Ft(')f(in)m(to)h +Fq(name)k Ft(and,)d(if)e(not)g(silen)m(t,)630 4017 y(prin)m(ts)f(an)h +(error)f(message)h(and)f(unsets)g Fs(OPTARG)p Ft(.)67 +b(If)39 b Fs(getopts)f Ft(is)i(silen)m(t,)j(the)c(option)630 +4127 y(c)m(haracter)32 b(found)d(is)h(placed)h(in)f Fs(OPTARG)f +Ft(and)h(no)g(diagnostic)i(message)f(is)g(prin)m(ted.)630 +4260 y(If)c(a)g(required)f(argumen)m(t)i(is)f(not)g(found,)g(and)f +Fs(getopts)f Ft(is)i(not)h(silen)m(t,)h(a)e(question)g(mark)630 +4369 y(\(`)p Fs(?)p Ft('\))h(is)g(placed)g(in)f Fq(name)p +Ft(,)h Fs(OPTARG)e Ft(is)h(unset,)h(and)f(a)g(diagnostic)i(message)g +(is)e(prin)m(ted.)39 b(If)630 4479 y Fs(getopts)28 b +Ft(is)h(silen)m(t,)i(then)e(a)h(colon)h(\(`)p Fs(:)p +Ft('\))f(is)g(placed)g(in)f Fq(name)35 b Ft(and)29 b +Fs(OPTARG)f Ft(is)h(set)h(to)h(the)630 4589 y(option)g(c)m(haracter)h (found.)150 4745 y Fs(hash)870 4878 y(hash)47 b([-'r])f([-p)h Fj(filename)11 b Fs(])45 b([-dt])h([)p Fj(name)11 b Fs(])630 -5011 y Ft(Remem)m(b)s(er)36 b(the)g(full)e(pathnames)i(of)g(commands)g -(sp)s(eci\014ed)f(as)h Fq(name)41 b Ft(argumen)m(ts,)e(so)630 +5011 y Ft(Remem)m(b)s(er)36 b(the)g(full)g(pathnames)g(of)g(commands)g +(sp)s(eci\014ed)g(as)g Fq(name)41 b Ft(argumen)m(ts,)e(so)630 5121 y(they)34 b(need)h(not)f(b)s(e)g(searc)m(hed)h(for)f(on)g -(subsequen)m(t)f(in)m(v)m(o)s(cations.)53 b(The)34 b(commands)g(are)630 -5230 y(found)39 b(b)m(y)i(searc)m(hing)f(through)g(the)h(directories)e -(listed)g(in)g Fs($PATH)p Ft(.)70 b(The)40 b(`)p Fs(-p)p -Ft(')g(option)630 5340 y(inhibits)35 b(the)k(path)g(searc)m(h,)j(and)c -Fq(\014lename)43 b Ft(is)38 b(used)g(as)i(the)f(lo)s(cation)f(of)h -Fq(name)p Ft(.)66 b(The)p eop +(subsequen)m(t)f(in)m(v)m(o)s(cations.)55 b(The)34 b(commands)g(are)630 +5230 y(found)39 b(b)m(y)i(searc)m(hing)g(through)f(the)h(directories)g +(listed)g(in)f Fs($PATH)p Ft(.)70 b(The)40 b(`)p Fs(-p)p +Ft(')g(option)630 5340 y(inhibits)e(the)h(path)g(searc)m(h,)j(and)c +Fq(\014lename)44 b Ft(is)39 b(used)f(as)i(the)f(lo)s(cation)h(of)f +Fq(name)p Ft(.)66 b(The)p eop end %%Page: 36 42 -36 41 bop 150 -116 a Ft(36)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(`)p Fs(-r)p Ft(')d(option)f(causes)h(the)g(shell)f(to)h(forget)h -(all)e(remem)m(b)s(ered)g(lo)s(cations.)39 b(The)28 b(`)p -Fs(-d)p Ft(')f(option)630 408 y(causes)38 b(the)g(shell)e(to)i(forget)g -(the)g(remem)m(b)s(ered)f(lo)s(cation)g(of)h(eac)m(h)h -Fq(name)p Ft(.)62 b(If)37 b(the)h(`)p Fs(-t)p Ft(')630 -518 y(option)21 b(is)g(supplied,)f(the)i(full)d(pathname)j(to)g(whic)m -(h)f(eac)m(h)h Fq(name)27 b Ft(corresp)s(onds)20 b(is)h(prin)m(ted.)630 -628 y(If)33 b(m)m(ultiple)e Fq(name)38 b Ft(argumen)m(ts)c(are)f -(supplied)d(with)i(`)p Fs(-t)p Ft(')h(the)h Fq(name)k -Ft(is)33 b(prin)m(ted)e(b)s(efore)630 737 y(the)i(hashed)f(full)e -(pathname.)48 b(The)32 b(`)p Fs(-l)p Ft(')h(option)f(causes)h(output)f -(to)i(b)s(e)e(displa)m(y)m(ed)f(in)h(a)630 847 y(format)g(that)g(ma)m -(y)g(b)s(e)f(reused)g(as)g(input.)42 b(If)31 b(no)h(argumen)m(ts)g(are) -f(giv)m(en,)i(or)e(if)f(only)h(`)p Fs(-l)p Ft(')630 956 -y(is)j(supplied,)e(information)h(ab)s(out)i(remem)m(b)s(ered)f -(commands)g(is)g(prin)m(ted.)52 b(The)34 b(return)630 -1066 y(status)d(is)e(zero)i(unless)e(a)i Fq(name)k Ft(is)30 -b(not)g(found)f(or)i(an)f(in)m(v)-5 b(alid)28 b(option)i(is)f -(supplied.)150 1217 y Fs(pwd)870 1347 y(pwd)47 b([-LP])630 -1477 y Ft(Prin)m(t)23 b(the)i(absolute)f(pathname)h(of)f(the)h(curren)m -(t)f(w)m(orking)g(directory)-8 b(.)39 b(If)23 b(the)i(`)p -Fs(-P)p Ft(')f(option)630 1587 y(is)35 b(supplied,)e(the)j(pathname)f -(prin)m(ted)f(will)f(not)j(con)m(tain)g(sym)m(b)s(olic)e(links.)53 -b(If)35 b(the)h(`)p Fs(-L)p Ft(')630 1696 y(option)43 -b(is)g(supplied,)h(the)g(pathname)f(prin)m(ted)g(ma)m(y)h(con)m(tain)g -(sym)m(b)s(olic)e(links.)78 b(The)630 1806 y(return)26 -b(status)h(is)g(zero)h(unless)d(an)i(error)g(is)f(encoun)m(tered)h -(while)f(determining)f(the)i(name)630 1915 y(of)k(the)f(curren)m(t)g -(directory)g(or)g(an)h(in)m(v)-5 b(alid)28 b(option)i(is)f(supplied.) -150 2066 y Fs(readonly)870 2196 y(readonly)46 b([-apf])g([)p -Fj(name)11 b Fs([=)p Fj(value)g Fs(]])43 b(...)630 2326 -y Ft(Mark)24 b(eac)m(h)h Fq(name)k Ft(as)24 b(readonly)-8 -b(.)38 b(The)24 b(v)-5 b(alues)23 b(of)h(these)g(names)g(ma)m(y)g(not)g -(b)s(e)g(c)m(hanged)g(b)m(y)630 2436 y(subsequen)m(t)e(assignmen)m(t.) -38 b(If)22 b(the)h(`)p Fs(-f)p Ft(')f(option)h(is)e(supplied,)g(eac)m -(h)j Fq(name)k Ft(refers)22 b(to)i(a)f(shell)630 2545 -y(function.)51 b(The)34 b(`)p Fs(-a)p Ft(')g(option)g(means)h(eac)m(h)g +TeXDict begin 36 41 bop 150 -116 a Ft(36)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(`)p Fs(-r)p Ft(')d(option)g(causes)g +(the)g(shell)h(to)f(forget)h(all)g(remem)m(b)s(ered)e(lo)s(cations.)41 +b(The)28 b(`)p Fs(-d)p Ft(')f(option)630 408 y(causes)38 +b(the)g(shell)g(to)g(forget)g(the)g(remem)m(b)s(ered)f(lo)s(cation)i +(of)f(eac)m(h)h Fq(name)p Ft(.)62 b(If)37 b(the)h(`)p +Fs(-t)p Ft(')630 518 y(option)22 b(is)g(supplied,)g(the)g(full)f +(pathname)h(to)g(whic)m(h)g(eac)m(h)g Fq(name)27 b Ft(corresp)s(onds)20 +b(is)i(prin)m(ted.)630 628 y(If)33 b(m)m(ultiple)h Fq(name)k +Ft(argumen)m(ts)c(are)f(supplied)f(with)h(`)p Fs(-t)p +Ft(')g(the)h Fq(name)k Ft(is)c(prin)m(ted)e(b)s(efore)630 +737 y(the)h(hashed)f(full)g(pathname.)48 b(The)32 b(`)p +Fs(-l)p Ft(')h(option)g(causes)g(output)f(to)i(b)s(e)e(displa)m(y)m(ed) +h(in)g(a)630 847 y(format)f(that)g(ma)m(y)g(b)s(e)f(reused)g(as)g +(input.)43 b(If)31 b(no)h(argumen)m(ts)g(are)f(giv)m(en,)j(or)d(if)g +(only)h(`)p Fs(-l)p Ft(')630 956 y(is)j(supplied,)f(information)h(ab)s +(out)g(remem)m(b)s(ered)f(commands)g(is)h(prin)m(ted.)53 +b(The)34 b(return)630 1066 y(status)d(is)f(zero)h(unless)f(a)h +Fq(name)k Ft(is)c(not)f(found)f(or)i(an)f(in)m(v)-5 b(alid)31 +b(option)g(is)f(supplied.)150 1217 y Fs(pwd)870 1347 +y(pwd)47 b([-LP])630 1477 y Ft(Prin)m(t)24 b(the)h(absolute)g(pathname) +g(of)f(the)h(curren)m(t)f(w)m(orking)h(directory)-8 b(.)40 +b(If)23 b(the)i(`)p Fs(-P)p Ft(')f(option)630 1587 y(is)36 +b(supplied,)f(the)h(pathname)f(prin)m(ted)g(will)h(not)g(con)m(tain)h +(sym)m(b)s(olic)f(links.)55 b(If)35 b(the)h(`)p Fs(-L)p +Ft(')630 1696 y(option)44 b(is)g(supplied,)i(the)e(pathname)f(prin)m +(ted)h(ma)m(y)g(con)m(tain)h(sym)m(b)s(olic)f(links.)80 +b(The)630 1806 y(return)26 b(status)h(is)h(zero)g(unless)e(an)h(error)g +(is)g(encoun)m(tered)g(while)h(determining)f(the)g(name)630 +1915 y(of)k(the)f(curren)m(t)g(directory)h(or)f(an)h(in)m(v)-5 +b(alid)31 b(option)g(is)f(supplied.)150 2066 y Fs(readonly)870 +2196 y(readonly)46 b([-apf])g([)p Fj(name)11 b Fs([=)p +Fj(value)g Fs(]])43 b(...)630 2326 y Ft(Mark)24 b(eac)m(h)h +Fq(name)k Ft(as)24 b(readonly)-8 b(.)39 b(The)24 b(v)-5 +b(alues)24 b(of)g(these)g(names)g(ma)m(y)g(not)g(b)s(e)g(c)m(hanged)g +(b)m(y)630 2436 y(subsequen)m(t)e(assignmen)m(t.)39 b(If)22 +b(the)h(`)p Fs(-f)p Ft(')f(option)i(is)e(supplied,)h(eac)m(h)h +Fq(name)k Ft(refers)22 b(to)i(a)f(shell)630 2545 y(function.)52 +b(The)34 b(`)p Fs(-a)p Ft(')g(option)h(means)g(eac)m(h)g Fq(name)40 b Ft(refers)33 b(to)j(an)e(arra)m(y)h(v)-5 -b(ariable.)51 b(If)34 b(no)630 2655 y Fq(name)d Ft(argumen)m(ts)26 -b(are)g(giv)m(en,)h(or)e(if)g(the)h(`)p Fs(-p)p Ft(')f(option)g(is)g -(supplied,)e(a)j(list)f(of)g(all)g(readonly)630 2765 -y(names)37 b(is)f(prin)m(ted.)58 b(The)37 b(`)p Fs(-p)p -Ft(')f(option)h(causes)g(output)g(to)g(b)s(e)f(displa)m(y)m(ed)g(in)f -(a)j(format)630 2874 y(that)25 b(ma)m(y)g(b)s(e)f(reused)g(as)h(input.) -37 b(If)24 b(a)h(v)-5 b(ariable)23 b(name)i(is)f(follo)m(w)m(ed)g(b)m -(y)g(=)p Fq(v)-5 b(alue)p Ft(,)26 b(the)e(v)-5 b(alue)630 -2984 y(of)27 b(the)g(v)-5 b(ariable)25 b(is)h(set)h(to)g -Fq(v)-5 b(alue)p Ft(.)39 b(The)26 b(return)g(status)h(is)e(zero)j -(unless)d(an)h(in)m(v)-5 b(alid)24 b(option)630 3093 -y(is)29 b(supplied,)e(one)j(of)g(the)g Fq(name)35 b Ft(argumen)m(ts)30 -b(is)f(not)h(a)g(v)-5 b(alid)29 b(shell)f(v)-5 b(ariable)28 -b(or)i(function)630 3203 y(name,)h(or)f(the)h(`)p Fs(-f)p -Ft(')f(option)g(is)f(supplied)e(with)i(a)i(name)f(that)h(is)f(not)g(a)h -(shell)e(function.)150 3354 y Fs(return)870 3484 y(return)46 -b([)p Fj(n)11 b Fs(])630 3614 y Ft(Cause)30 b(a)g(shell)e(function)h -(to)i(exit)e(with)g(the)h(return)f(v)-5 b(alue)30 b Fq(n)p -Ft(.)40 b(If)29 b Fq(n)h Ft(is)f(not)h(supplied,)d(the)630 -3724 y(return)35 b(v)-5 b(alue)36 b(is)f(the)h(exit)g(status)g(of)h -(the)f(last)g(command)g(executed)h(in)e(the)h(function.)630 -3833 y(This)20 b(ma)m(y)j(also)f(b)s(e)f(used)g(to)i(terminate)f -(execution)g(of)g(a)h(script)e(b)s(eing)f(executed)j(with)e(the)630 -3943 y Fs(.)27 b Ft(\(or)g Fs(source)p Ft(\))f(builtin,)f(returning)g -(either)h Fq(n)h Ft(or)g(the)g(exit)g(status)h(of)f(the)g(last)g -(command)630 4052 y(executed)46 b(within)d(the)i(script)f(as)i(the)f -(exit)g(status)h(of)f(the)h(script.)84 b(An)m(y)45 b(command)630 -4162 y(asso)s(ciated)29 b(with)e(the)h Fs(RETURN)f Ft(trap)h(is)f -(executed)i(b)s(efore)f(execution)g(resumes)g(after)h(the)630 -4271 y(function)37 b(or)g(script.)62 b(The)38 b(return)e(status)i(is)f -(non-zero)i(if)d Fs(return)h Ft(is)f(used)h(outside)h(a)630 -4381 y(function)29 b(and)h(not)g(during)f(the)h(execution)h(of)f(a)h -(script)e(b)m(y)i Fs(.)f Ft(or)g Fs(source)p Ft(.)150 +b(ariable.)53 b(If)34 b(no)630 2655 y Fq(name)d Ft(argumen)m(ts)26 +b(are)g(giv)m(en,)i(or)d(if)h(the)g(`)p Fs(-p)p Ft(')f(option)h(is)g +(supplied,)f(a)h(list)h(of)e(all)i(readonly)630 2765 +y(names)37 b(is)g(prin)m(ted.)59 b(The)37 b(`)p Fs(-p)p +Ft(')f(option)i(causes)f(output)g(to)g(b)s(e)f(displa)m(y)m(ed)i(in)e +(a)i(format)630 2874 y(that)25 b(ma)m(y)g(b)s(e)f(reused)g(as)h(input.) +38 b(If)24 b(a)h(v)-5 b(ariable)25 b(name)g(is)g(follo)m(w)m(ed)h(b)m +(y)e(=)p Fq(v)-5 b(alue)p Ft(,)27 b(the)d(v)-5 b(alue)630 +2984 y(of)27 b(the)g(v)-5 b(ariable)27 b(is)g(set)g(to)g +Fq(v)-5 b(alue)p Ft(.)40 b(The)26 b(return)g(status)h(is)f(zero)i +(unless)e(an)g(in)m(v)-5 b(alid)27 b(option)630 3093 +y(is)j(supplied,)f(one)h(of)g(the)g Fq(name)35 b Ft(argumen)m(ts)30 +b(is)g(not)g(a)g(v)-5 b(alid)31 b(shell)f(v)-5 b(ariable)30 +b(or)g(function)630 3203 y(name,)h(or)f(the)h(`)p Fs(-f)p +Ft(')f(option)h(is)f(supplied)f(with)h(a)h(name)f(that)h(is)g(not)f(a)h +(shell)g(function.)150 3354 y Fs(return)870 3484 y(return)46 +b([)p Fj(n)11 b Fs(])630 3614 y Ft(Cause)30 b(a)g(shell)g(function)g +(to)h(exit)f(with)g(the)g(return)f(v)-5 b(alue)31 b Fq(n)p +Ft(.)40 b(If)29 b Fq(n)h Ft(is)g(not)g(supplied,)f(the)630 +3724 y(return)35 b(v)-5 b(alue)37 b(is)f(the)g(exit)h(status)f(of)h +(the)f(last)h(command)f(executed)h(in)f(the)g(function.)630 +3833 y(This)21 b(ma)m(y)i(also)g(b)s(e)e(used)g(to)i(terminate)g +(execution)g(of)f(a)h(script)f(b)s(eing)f(executed)i(with)f(the)630 +3943 y Fs(.)27 b Ft(\(or)g Fs(source)p Ft(\))f(builtin,)i(returning)e +(either)h Fq(n)g Ft(or)g(the)g(exit)h(status)g(of)f(the)g(last)h +(command)630 4052 y(executed)46 b(within)f(the)g(script)g(as)h(the)f +(exit)h(status)g(of)f(the)h(script.)85 b(An)m(y)45 b(command)630 +4162 y(asso)s(ciated)30 b(with)e(the)g Fs(RETURN)f Ft(trap)h(is)g +(executed)h(b)s(efore)f(execution)h(resumes)f(after)h(the)630 +4271 y(function)38 b(or)f(script.)63 b(The)38 b(return)e(status)i(is)g +(non-zero)h(if)e Fs(return)g Ft(is)g(used)g(outside)i(a)630 +4381 y(function)30 b(and)g(not)g(during)g(the)g(execution)i(of)e(a)h +(script)f(b)m(y)h Fs(.)f Ft(or)g Fs(source)p Ft(.)150 4532 y Fs(shift)870 4662 y(shift)46 b([)p Fj(n)11 b Fs(])630 -4792 y Ft(Shift)40 b(the)h(p)s(ositional)e(parameters)j(to)g(the)f -(left)g(b)m(y)h Fq(n)p Ft(.)73 b(The)40 b(p)s(ositional)g(parameters) +4792 y Ft(Shift)41 b(the)g(p)s(ositional)h(parameters)g(to)g(the)f +(left)h(b)m(y)g Fq(n)p Ft(.)73 b(The)40 b(p)s(ositional)j(parameters) 630 4902 y(from)27 b Fq(n)p Fs(+)p Ft(1)33 b(.)22 b(.)g(.)39 b Fs($#)27 b Ft(are)g(renamed)g(to)i Fs($1)j Ft(.)22 b(.)h(.)38 b Fs($#)p Ft(-)p Fq(n)p Fs(+)p Ft(1.)h(P)m(arameters)29 b(represen)m(ted)e(b)m(y)h(the)630 5011 y(n)m(um)m(b)s(ers)34 b Fs($#)h Ft(to)h Fq(n)p Fs(+)p Ft(1)f(are)g(unset.)55 -b Fq(n)35 b Ft(m)m(ust)g(b)s(e)g(a)h(non-negativ)m(e)g(n)m(um)m(b)s(er) -e(less)h(than)g(or)630 5121 y(equal)d(to)i Fs($#)p Ft(.)47 -b(If)33 b Fq(n)f Ft(is)g(zero)h(or)g(greater)h(than)f -Fs($#)p Ft(,)g(the)g(p)s(ositional)d(parameters)j(are)h(not)630 -5230 y(c)m(hanged.)48 b(If)32 b Fq(n)g Ft(is)g(not)g(supplied,)f(it)h -(is)f(assumed)h(to)h(b)s(e)f(1.)48 b(The)32 b(return)g(status)h(is)e -(zero)630 5340 y(unless)e Fq(n)g Ft(is)h(greater)h(than)g -Fs($#)e Ft(or)i(less)e(than)i(zero,)g(non-zero)g(otherwise.)p -eop +b Fq(n)35 b Ft(m)m(ust)g(b)s(e)g(a)h(non-negativ)m(e)h(n)m(um)m(b)s(er) +d(less)i(than)f(or)630 5121 y(equal)e(to)h Fs($#)p Ft(.)47 +b(If)33 b Fq(n)f Ft(is)h(zero)g(or)g(greater)h(than)f +Fs($#)p Ft(,)g(the)g(p)s(ositional)g(parameters)g(are)h(not)630 +5230 y(c)m(hanged.)48 b(If)32 b Fq(n)g Ft(is)h(not)f(supplied,)h(it)g +(is)f(assumed)g(to)h(b)s(e)f(1.)48 b(The)32 b(return)g(status)h(is)f +(zero)630 5340 y(unless)e Fq(n)f Ft(is)i(greater)g(than)g +Fs($#)e Ft(or)i(less)f(than)h(zero,)g(non-zero)g(otherwise.)p +eop end %%Page: 37 43 -37 42 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(37)150 299 y Fs(test)150 -408 y([)432 b Ft(Ev)-5 b(aluate)31 b(a)g(conditional)e(expression)g +TeXDict begin 37 42 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(37)150 299 y Fs(test)150 +408 y([)432 b Ft(Ev)-5 b(aluate)32 b(a)f(conditional)h(expression)e Fq(expr)p Ft(.)41 b(Eac)m(h)31 b(op)s(erator)g(and)f(op)s(erand)g(m)m (ust)h(b)s(e)f(a)630 518 y(separate)d(argumen)m(t.)40 -b(Expressions)24 b(are)j(comp)s(osed)e(of)i(the)f(primaries)e(describ)s -(ed)g(b)s(elo)m(w)630 628 y(in)29 b(Section)h(6.4)i([Bash)e -(Conditional)e(Expressions],)h(page)j(69.)630 762 y(When)e(the)h -Fs([)f Ft(form)g(is)f(used,)h(the)g(last)h(argumen)m(t)f(to)i(the)e +b(Expressions)25 b(are)i(comp)s(osed)e(of)i(the)f(primaries)g(describ)s +(ed)f(b)s(elo)m(w)630 628 y(in)30 b(Section)h(6.4)h([Bash)e +(Conditional)h(Expressions],)f(page)i(69.)630 762 y(When)e(the)h +Fs([)f Ft(form)g(is)g(used,)g(the)g(last)i(argumen)m(t)e(to)i(the)e (command)g(m)m(ust)h(b)s(e)e(a)i Fs(])p Ft(.)630 897 -y(Expressions)22 b(ma)m(y)i(b)s(e)e(com)m(bined)h(using)f(the)i(follo)m -(wing)e(op)s(erators,)j(listed)d(in)g(decreasing)630 +y(Expressions)23 b(ma)m(y)h(b)s(e)e(com)m(bined)i(using)f(the)h(follo)m +(wing)h(op)s(erators,)g(listed)f(in)f(decreasing)630 1006 y(order)30 b(of)g(precedence.)630 1166 y Fs(!)g -Fj(expr)210 b Ft(T)-8 b(rue)30 b(if)f Fq(expr)37 b Ft(is)29 -b(false.)630 1325 y Fs(\()h Fj(expr)40 b Fs(\))122 b -Ft(Returns)23 b(the)i(v)-5 b(alue)24 b(of)g Fq(expr)p -Ft(.)38 b(This)23 b(ma)m(y)i(b)s(e)e(used)h(to)h(o)m(v)m(erride)f(the)h +Fj(expr)210 b Ft(T)-8 b(rue)30 b(if)g Fq(expr)37 b Ft(is)30 +b(false.)630 1325 y Fs(\()g Fj(expr)40 b Fs(\))122 b +Ft(Returns)23 b(the)i(v)-5 b(alue)25 b(of)f Fq(expr)p +Ft(.)38 b(This)24 b(ma)m(y)h(b)s(e)e(used)h(to)h(o)m(v)m(erride)g(the)g (normal)1110 1435 y(precedence)31 b(of)f(op)s(erators.)630 1594 y Fj(expr1)39 b Fs(-a)30 b Fj(expr2)1110 1704 y -Ft(T)-8 b(rue)30 b(if)f(b)s(oth)h Fq(expr1)37 b Ft(and)30 +Ft(T)-8 b(rue)30 b(if)g(b)s(oth)g Fq(expr1)37 b Ft(and)30 b Fq(expr2)38 b Ft(are)30 b(true.)630 1863 y Fj(expr1)39 -b Fs(-o)30 b Fj(expr2)1110 1973 y Ft(T)-8 b(rue)30 b(if)f(either)h -Fq(expr1)38 b Ft(or)30 b Fq(expr2)37 b Ft(is)30 b(true.)630 -2132 y(The)37 b Fs(test)f Ft(and)g Fs([)h Ft(builtins)d(ev)-5 -b(aluate)38 b(conditional)d(expressions)h(using)g(a)h(set)h(of)f(rules) +b Fs(-o)30 b Fj(expr2)1110 1973 y Ft(T)-8 b(rue)30 b(if)g(either)h +Fq(expr1)38 b Ft(or)30 b Fq(expr2)37 b Ft(is)31 b(true.)630 +2132 y(The)37 b Fs(test)f Ft(and)g Fs([)h Ft(builtins)g(ev)-5 +b(aluate)39 b(conditional)f(expressions)f(using)g(a)g(set)h(of)f(rules) 630 2242 y(based)30 b(on)g(the)h(n)m(um)m(b)s(er)e(of)h(argumen)m(ts.) -630 2401 y(0)h(argumen)m(ts)1110 2511 y(The)f(expression)f(is)g(false.) -630 2670 y(1)i(argumen)m(t)1110 2780 y(The)f(expression)f(is)g(true)i -(if)e(and)h(only)f(if)h(the)g(argumen)m(t)h(is)e(not)i(n)m(ull.)630 +630 2401 y(0)h(argumen)m(ts)1110 2511 y(The)f(expression)g(is)g(false.) +630 2670 y(1)h(argumen)m(t)1110 2780 y(The)f(expression)g(is)g(true)h +(if)f(and)g(only)g(if)h(the)f(argumen)m(t)h(is)f(not)h(n)m(ull.)630 2939 y(2)g(argumen)m(ts)1110 3049 y(If)f(the)h(\014rst)f(argumen)m(t)h -(is)f(`)p Fs(!)p Ft(',)h(the)g(expression)f(is)g(true)g(if)g(and)g -(only)g(if)g(the)1110 3158 y(second)k(argumen)m(t)f(is)g(n)m(ull.)48 -b(If)33 b(the)h(\014rst)e(argumen)m(t)i(is)f(one)h(of)f(the)h(unary) -1110 3268 y(conditional)39 b(op)s(erators)i(\(see)g(Section)g(6.4)g -([Bash)g(Conditional)d(Expres-)1110 3377 y(sions],)33 -b(page)g(69\),)i(the)e(expression)e(is)h(true)h(if)f(the)h(unary)e -(test)j(is)e(true.)47 b(If)1110 3487 y(the)33 b(\014rst)g(argumen)m(t)h -(is)e(not)h(a)h(v)-5 b(alid)32 b(unary)g(op)s(erator,)i(the)g -(expression)e(is)1110 3597 y(false.)630 3756 y(3)f(argumen)m(ts)1110 -3866 y(If)k(the)g(second)g(argumen)m(t)g(is)f(one)i(of)f(the)g(binary)e -(conditional)h(op)s(erators)1110 3975 y(\(see)23 b(Section)f(6.4)g -([Bash)h(Conditional)c(Expressions],)j(page)h(69\),)i(the)d(result)1110 -4085 y(of)44 b(the)h(expression)e(is)g(the)h(result)f(of)i(the)f -(binary)f(test)i(using)d(the)j(\014rst)1110 4194 y(and)33 -b(third)f(argumen)m(ts)i(as)g(op)s(erands.)50 b(If)33 -b(the)h(\014rst)g(argumen)m(t)g(is)f(`)p Fs(!)p Ft(',)i(the)1110 -4304 y(v)-5 b(alue)24 b(is)g(the)h(negation)g(of)g(the)g(t)m(w)m -(o-argumen)m(t)i(test)f(using)d(the)i(second)g(and)1110 -4413 y(third)31 b(argumen)m(ts.)47 b(If)33 b(the)f(\014rst)g(argumen)m -(t)h(is)f(exactly)h(`)p Fs(\()p Ft(')g(and)f(the)h(third)1110 -4523 y(argumen)m(t)h(is)f(exactly)h(`)p Fs(\))p Ft(',)h(the)f(result)e -(is)h(the)h(one-argumen)m(t)g(test)h(of)f(the)1110 4633 -y(second)d(argumen)m(t.)45 b(Otherwise,)30 b(the)i(expression)e(is)g -(false.)43 b(The)31 b(`)p Fs(-a)p Ft(')h(and)1110 4742 -y(`)p Fs(-o)p Ft(')e(op)s(erators)h(are)g(considered)e(binary)f(op)s -(erators)j(in)e(this)g(case.)630 4902 y(4)i(argumen)m(ts)1110 -5011 y(If)h(the)i(\014rst)e(argumen)m(t)h(is)f(`)p Fs(!)p -Ft(',)i(the)f(result)f(is)g(the)h(negation)g(of)g(the)g(three-)1110 -5121 y(argumen)m(t)h(expression)e(comp)s(osed)i(of)f(the)h(remaining)e -(argumen)m(ts.)50 b(Oth-)1110 5230 y(erwise,)33 b(the)g(expression)f -(is)g(parsed)h(and)f(ev)-5 b(aluated)33 b(according)h(to)f(prece-)1110 -5340 y(dence)e(using)d(the)j(rules)e(listed)g(ab)s(o)m(v)m(e.)p -eop +(is)g(`)p Fs(!)p Ft(',)g(the)g(expression)g(is)g(true)f(if)h(and)f +(only)h(if)g(the)1110 3158 y(second)j(argumen)m(t)f(is)h(n)m(ull.)50 +b(If)33 b(the)h(\014rst)e(argumen)m(t)i(is)g(one)g(of)f(the)h(unary) +1110 3268 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f +([Bash)g(Conditional)g(Expres-)1110 3377 y(sions],)34 +b(page)f(69\),)i(the)e(expression)f(is)h(true)g(if)g(the)g(unary)e +(test)j(is)f(true.)47 b(If)1110 3487 y(the)33 b(\014rst)g(argumen)m(t)h +(is)f(not)g(a)h(v)-5 b(alid)34 b(unary)e(op)s(erator,)i(the)g +(expression)f(is)1110 3597 y(false.)630 3756 y(3)e(argumen)m(ts)1110 +3866 y(If)k(the)g(second)g(argumen)m(t)g(is)g(one)h(of)f(the)g(binary)f +(conditional)j(op)s(erators)1110 3975 y(\(see)23 b(Section)g(6.4)f +([Bash)h(Conditional)f(Expressions],)h(page)g(69\),)i(the)d(result)1110 +4085 y(of)44 b(the)h(expression)f(is)g(the)g(result)g(of)h(the)f +(binary)g(test)h(using)e(the)i(\014rst)1110 4194 y(and)33 +b(third)g(argumen)m(ts)h(as)g(op)s(erands.)50 b(If)33 +b(the)h(\014rst)g(argumen)m(t)g(is)g(`)p Fs(!)p Ft(',)h(the)1110 +4304 y(v)-5 b(alue)25 b(is)g(the)g(negation)h(of)f(the)g(t)m(w)m +(o-argumen)m(t)i(test)f(using)e(the)h(second)g(and)1110 +4413 y(third)32 b(argumen)m(ts.)47 b(If)33 b(the)f(\014rst)g(argumen)m +(t)h(is)g(exactly)h(`)p Fs(\()p Ft(')f(and)f(the)h(third)1110 +4523 y(argumen)m(t)h(is)g(exactly)h(`)p Fs(\))p Ft(',)g(the)f(result)f +(is)h(the)g(one-argumen)m(t)g(test)h(of)f(the)1110 4633 +y(second)d(argumen)m(t.)45 b(Otherwise,)31 b(the)h(expression)f(is)g +(false.)44 b(The)31 b(`)p Fs(-a)p Ft(')h(and)1110 4742 +y(`)p Fs(-o)p Ft(')e(op)s(erators)h(are)g(considered)f(binary)f(op)s +(erators)i(in)f(this)g(case.)630 4902 y(4)h(argumen)m(ts)1110 +5011 y(If)h(the)i(\014rst)e(argumen)m(t)h(is)g(`)p Fs(!)p +Ft(',)h(the)f(result)g(is)g(the)g(negation)h(of)f(the)g(three-)1110 +5121 y(argumen)m(t)h(expression)f(comp)s(osed)h(of)f(the)h(remaining)g +(argumen)m(ts.)50 b(Oth-)1110 5230 y(erwise,)34 b(the)f(expression)g +(is)g(parsed)g(and)f(ev)-5 b(aluated)34 b(according)h(to)e(prece-)1110 +5340 y(dence)e(using)e(the)i(rules)f(listed)h(ab)s(o)m(v)m(e.)p +eop end %%Page: 38 44 -38 43 bop 150 -116 a Ft(38)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(5)g(or)f(more)h(argumen)m(ts)1110 408 y(The)43 -b(expression)e(is)i(parsed)f(and)g(ev)-5 b(aluated)44 -b(according)f(to)g(precedence)1110 518 y(using)29 b(the)h(rules)f -(listed)g(ab)s(o)m(v)m(e.)150 675 y Fs(times)870 808 -y(times)630 941 y Ft(Prin)m(t)36 b(out)i(the)g(user)e(and)h(system)g -(times)g(used)g(b)m(y)g(the)h(shell)d(and)i(its)g(c)m(hildren.)59 -b(The)630 1050 y(return)29 b(status)i(is)e(zero.)150 +TeXDict begin 38 43 bop 150 -116 a Ft(38)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(5)g(or)f(more)h(argumen)m(ts)1110 +408 y(The)43 b(expression)f(is)i(parsed)e(and)g(ev)-5 +b(aluated)45 b(according)f(to)f(precedence)1110 518 y(using)30 +b(the)g(rules)g(listed)h(ab)s(o)m(v)m(e.)150 675 y Fs(times)870 +808 y(times)630 941 y Ft(Prin)m(t)37 b(out)h(the)g(user)e(and)h(system) +g(times)h(used)f(b)m(y)g(the)h(shell)f(and)g(its)h(c)m(hildren.)61 +b(The)630 1050 y(return)29 b(status)i(is)f(zero.)150 1207 y Fs(trap)870 1340 y(trap)47 b([-lp])f([)p Fj(arg)11 b Fs(])46 b([)p Fj(sigspec)56 b Fs(...)o(])630 1473 y -Ft(The)43 b(commands)f(in)g Fq(arg)51 b Ft(are)44 b(to)g(b)s(e)e(read)h -(and)g(executed)h(when)e(the)h(shell)e(receiv)m(es)630 -1583 y(signal)34 b Fq(sigsp)s(ec)p Ft(.)56 b(If)35 b -Fq(arg)44 b Ft(is)35 b(absen)m(t)h(\(and)f(there)h(is)f(a)g(single)g -Fq(sigsp)s(ec)6 b Ft(\))34 b(or)i(equal)f(to)i(`)p Fs(-)p -Ft(',)630 1692 y(eac)m(h)28 b(sp)s(eci\014ed)d(signal's)g(disp)s -(osition)e(is)j(reset)h(to)g(the)g(v)-5 b(alue)26 b(it)g(had)g(when)f -(the)i(shell)e(w)m(as)630 1802 y(started.)63 b(If)37 -b Fq(arg)46 b Ft(is)36 b(the)i(n)m(ull)e(string,)i(then)f(the)h(signal) -f(sp)s(eci\014ed)e(b)m(y)j(eac)m(h)h Fq(sigsp)s(ec)j -Ft(is)630 1911 y(ignored)35 b(b)m(y)h(the)g(shell)e(and)i(commands)f -(it)h(in)m(v)m(ok)m(es.)58 b(If)35 b Fq(arg)45 b Ft(is)35 -b(not)h(presen)m(t)g(and)f(`)p Fs(-p)p Ft(')630 2021 -y(has)e(b)s(een)g(supplied,)d(the)k(shell)d(displa)m(ys)h(the)h(trap)g -(commands)g(asso)s(ciated)h(with)e(eac)m(h)630 2131 y -Fq(sigsp)s(ec)p Ft(.)39 b(If)29 b(no)g(argumen)m(ts)g(are)g(supplied,)d -(or)j(only)f(`)p Fs(-p)p Ft(')h(is)f(giv)m(en,)h Fs(trap)f -Ft(prin)m(ts)f(the)i(list)630 2240 y(of)f(commands)f(asso)s(ciated)h -(with)f(eac)m(h)i(signal)d(n)m(um)m(b)s(er)g(in)h(a)h(form)f(that)h(ma) -m(y)h(b)s(e)e(reused)630 2350 y(as)c(shell)e(input.)36 -b(The)23 b(`)p Fs(-l)p Ft(')f(option)h(causes)g(the)g(shell)e(to)i -(prin)m(t)f(a)h(list)e(of)i(signal)f(names)h(and)630 -2459 y(their)32 b(corresp)s(onding)f(n)m(um)m(b)s(ers.)47 -b(Eac)m(h)34 b Fq(sigsp)s(ec)k Ft(is)32 b(either)g(a)i(signal)e(name)h -(or)g(a)g(signal)630 2569 y(n)m(um)m(b)s(er.)46 b(Signal)31 -b(names)i(are)g(case)h(insensitiv)m(e)c(and)j(the)f Fs(SIG)g -Ft(pre\014x)g(is)g(optional.)46 b(If)33 b(a)630 2679 -y Fq(sigsp)s(ec)g Ft(is)27 b Fs(0)g Ft(or)h Fs(EXIT)p -Ft(,)f Fq(arg)37 b Ft(is)26 b(executed)j(when)e(the)h(shell)e(exits.)40 -b(If)27 b(a)i Fq(sigsp)s(ec)j Ft(is)27 b Fs(DEBUG)p Ft(,)630 -2788 y(the)40 b(command)g Fq(arg)48 b Ft(is)39 b(executed)i(b)s(efore)f -(ev)m(ery)g(simple)e(command,)43 b Fs(for)c Ft(command,)630 +Ft(The)43 b(commands)f(in)h Fq(arg)51 b Ft(are)44 b(to)g(b)s(e)e(read)h +(and)g(executed)h(when)e(the)h(shell)g(receiv)m(es)630 +1583 y(signal)36 b Fq(sigsp)s(ec)p Ft(.)57 b(If)35 b +Fq(arg)44 b Ft(is)36 b(absen)m(t)g(\(and)f(there)h(is)g(a)f(single)i +Fq(sigsp)s(ec)6 b Ft(\))35 b(or)h(equal)g(to)h(`)p Fs(-)p +Ft(',)630 1692 y(eac)m(h)28 b(sp)s(eci\014ed)e(signal's)h(disp)s +(osition)f(is)h(reset)g(to)g(the)g(v)-5 b(alue)27 b(it)g(had)f(when)f +(the)i(shell)g(w)m(as)630 1802 y(started.)63 b(If)37 +b Fq(arg)46 b Ft(is)37 b(the)h(n)m(ull)g(string,)h(then)e(the)h(signal) +h(sp)s(eci\014ed)d(b)m(y)i(eac)m(h)h Fq(sigsp)s(ec)k +Ft(is)630 1911 y(ignored)36 b(b)m(y)g(the)g(shell)g(and)g(commands)f +(it)i(in)m(v)m(ok)m(es.)59 b(If)35 b Fq(arg)45 b Ft(is)36 +b(not)g(presen)m(t)g(and)f(`)p Fs(-p)p Ft(')630 2021 +y(has)e(b)s(een)g(supplied,)f(the)i(shell)f(displa)m(ys)h(the)f(trap)g +(commands)g(asso)s(ciated)i(with)e(eac)m(h)630 2131 y +Fq(sigsp)s(ec)p Ft(.)40 b(If)29 b(no)g(argumen)m(ts)g(are)g(supplied,)f +(or)h(only)g(`)p Fs(-p)p Ft(')g(is)g(giv)m(en,)h Fs(trap)e +Ft(prin)m(ts)g(the)h(list)630 2240 y(of)f(commands)f(asso)s(ciated)i +(with)f(eac)m(h)h(signal)f(n)m(um)m(b)s(er)e(in)i(a)g(form)f(that)h(ma) +m(y)h(b)s(e)e(reused)630 2350 y(as)c(shell)g(input.)37 +b(The)23 b(`)p Fs(-l)p Ft(')f(option)i(causes)f(the)g(shell)g(to)g +(prin)m(t)g(a)g(list)g(of)g(signal)h(names)f(and)630 +2459 y(their)33 b(corresp)s(onding)f(n)m(um)m(b)s(ers.)47 +b(Eac)m(h)34 b Fq(sigsp)s(ec)39 b Ft(is)33 b(either)g(a)h(signal)g +(name)f(or)g(a)g(signal)630 2569 y(n)m(um)m(b)s(er.)46 +b(Signal)33 b(names)g(are)g(case)h(insensitiv)m(e)f(and)g(the)f +Fs(SIG)g Ft(pre\014x)g(is)h(optional.)48 b(If)33 b(a)630 +2679 y Fq(sigsp)s(ec)h Ft(is)28 b Fs(0)f Ft(or)h Fs(EXIT)p +Ft(,)f Fq(arg)37 b Ft(is)27 b(executed)i(when)e(the)h(shell)g(exits.)41 +b(If)27 b(a)i Fq(sigsp)s(ec)k Ft(is)28 b Fs(DEBUG)p Ft(,)630 +2788 y(the)40 b(command)g Fq(arg)48 b Ft(is)40 b(executed)h(b)s(efore)f +(ev)m(ery)g(simple)g(command,)j Fs(for)c Ft(command,)630 2898 y Fs(case)28 b Ft(command,)i Fs(select)d Ft(command,)j(ev)m(ery)g -(arithmetic)f Fs(for)f Ft(command,)i(and)e(b)s(efore)630 -3007 y(the)k(\014rst)e(command)h(executes)i(in)d(a)i(shell)d(function.) -43 b(Refer)31 b(to)h(the)g(description)d(of)j(the)630 -3117 y Fs(extglob)d Ft(option)i(to)h(the)g Fs(shopt)e -Ft(builtin)e(\(see)k(Section)g(4.2)g([Bash)g(Builtins],)e(page)i(39\)) -630 3226 y(for)c(details)g(of)g(its)g(e\013ect)i(on)f(the)g -Fs(DEBUG)e Ft(trap.)40 b(If)28 b(a)g Fq(sigsp)s(ec)34 -b Ft(is)27 b Fs(ERR)p Ft(,)i(the)f(command)g Fq(arg)630 -3336 y Ft(is)i(executed)h(whenev)m(er)g(a)g(simple)d(command)j(has)f(a) -h(non-zero)g(exit)g(status,)g(sub)5 b(ject)30 b(to)630 -3446 y(the)k(follo)m(wing)f(conditions.)51 b(The)34 b -Fs(ERR)f Ft(trap)h(is)f(not)i(executed)g(if)e(the)h(failed)f(command) -630 3555 y(is)27 b(part)h(of)h(the)f(command)g(list)f(immediately)g -(follo)m(wing)f(an)i Fs(until)f Ft(or)h Fs(while)f Ft(k)m(eyw)m(ord,) -630 3665 y(part)h(of)h(the)g(test)g(in)e(an)i Fs(if)f +(arithmetic)h Fs(for)d Ft(command,)i(and)e(b)s(efore)630 +3007 y(the)k(\014rst)e(command)h(executes)i(in)e(a)h(shell)f(function.) +44 b(Refer)31 b(to)h(the)g(description)f(of)h(the)630 +3117 y Fs(extglob)d Ft(option)j(to)g(the)g Fs(shopt)e +Ft(builtin)h(\(see)h(Section)h(4.2)f([Bash)g(Builtins],)h(page)f(39\)) +630 3226 y(for)c(details)i(of)e(its)h(e\013ect)h(on)f(the)g +Fs(DEBUG)e Ft(trap.)40 b(If)28 b(a)g Fq(sigsp)s(ec)35 +b Ft(is)28 b Fs(ERR)p Ft(,)h(the)f(command)g Fq(arg)630 +3336 y Ft(is)j(executed)g(whenev)m(er)g(a)g(simple)f(command)h(has)f(a) +h(non-zero)g(exit)h(status,)f(sub)5 b(ject)30 b(to)630 +3446 y(the)k(follo)m(wing)i(conditions.)53 b(The)34 b +Fs(ERR)f Ft(trap)h(is)g(not)h(executed)g(if)f(the)g(failed)h(command) +630 3555 y(is)28 b(part)g(of)h(the)f(command)g(list)h(immediately)h +(follo)m(wing)f(an)f Fs(until)f Ft(or)h Fs(while)f Ft(k)m(eyw)m(ord,) +630 3665 y(part)h(of)h(the)g(test)g(in)f(an)h Fs(if)f Ft(statemen)m(t,)j(part)d(of)h(a)f Fs(&&)g Ft(or)h Fs(||)f -Ft(list,)f(or)i(if)e(the)i(command's)630 3774 y(return)i(status)i(is)e +Ft(list,)h(or)g(if)f(the)h(command's)630 3774 y(return)i(status)i(is)f (b)s(eing)f(in)m(v)m(erted)i(using)f Fs(!)p Ft(.)46 b(These)32 -b(are)g(the)h(same)f(conditions)f(ob)s(ey)m(ed)630 3884 -y(b)m(y)k(the)g Fs(errexit)e Ft(option.)54 b(If)34 b(a)i -Fq(sigsp)s(ec)j Ft(is)34 b Fs(RETURN)p Ft(,)h(the)g(command)g -Fq(arg)43 b Ft(is)34 b(executed)630 3994 y(eac)m(h)k(time)e(a)g(shell)f -(function)g(or)h(a)h(script)e(executed)j(with)d(the)h -Fs(.)g Ft(or)h Fs(source)e Ft(builtins)630 4103 y(\014nishes)28 -b(executing.)630 4236 y(Signals)35 b(ignored)g(up)s(on)g(en)m(try)i(to) -g(the)f(shell)f(cannot)i(b)s(e)f(trapp)s(ed)f(or)h(reset.)59 -b(T)-8 b(rapp)s(ed)630 4346 y(signals)29 b(are)i(reset)g(to)g(their)e -(original)g(v)-5 b(alues)29 b(in)g(a)i(c)m(hild)e(pro)s(cess)h(when)f -(it)h(is)g(created.)630 4479 y(The)g(return)f(status)i(is)e(zero)i -(unless)e(a)i Fq(sigsp)s(ec)k Ft(do)s(es)30 b(not)h(sp)s(ecify)e(a)h(v) --5 b(alid)29 b(signal.)150 4635 y Fs(umask)870 4769 y(umask)46 -b([-p])h([-S])g([)p Fj(mode)11 b Fs(])630 4902 y Ft(Set)30 -b(the)f(shell)f(pro)s(cess's)h(\014le)g(creation)g(mask)h(to)g -Fq(mo)s(de)p Ft(.)40 b(If)29 b Fq(mo)s(de)34 b Ft(b)s(egins)28 -b(with)g(a)i(digit,)630 5011 y(it)d(is)f(in)m(terpreted)g(as)h(an)g(o)s -(ctal)h(n)m(um)m(b)s(er;)f(if)f(not,)i(it)f(is)f(in)m(terpreted)g(as)h -(a)h(sym)m(b)s(olic)d(mo)s(de)630 5121 y(mask)k(similar)d(to)j(that)h -(accepted)g(b)m(y)f(the)g Fs(chmod)e Ft(command.)40 b(If)28 -b Fq(mo)s(de)34 b Ft(is)27 b(omitted,)j(the)630 5230 -y(curren)m(t)36 b(v)-5 b(alue)35 b(of)h(the)h(mask)f(is)f(prin)m(ted.) -56 b(If)35 b(the)h(`)p Fs(-S)p Ft(')g(option)g(is)f(supplied)e(without) -i(a)630 5340 y Fq(mo)s(de)40 b Ft(argumen)m(t,)d(the)e(mask)g(is)f -(prin)m(ted)g(in)g(a)i(sym)m(b)s(olic)d(format.)55 b(If)35 -b(the)g(`)p Fs(-p)p Ft(')g(option)p eop +b(are)g(the)h(same)f(conditions)h(ob)s(ey)m(ed)630 3884 +y(b)m(y)i(the)g Fs(errexit)e Ft(option.)55 b(If)34 b(a)i +Fq(sigsp)s(ec)k Ft(is)35 b Fs(RETURN)p Ft(,)g(the)g(command)g +Fq(arg)43 b Ft(is)35 b(executed)630 3994 y(eac)m(h)j(time)f(a)f(shell)h +(function)f(or)g(a)h(script)f(executed)i(with)e(the)g +Fs(.)g Ft(or)h Fs(source)e Ft(builtins)630 4103 y(\014nishes)29 +b(executing.)630 4236 y(Signals)37 b(ignored)f(up)s(on)f(en)m(try)i(to) +g(the)f(shell)h(cannot)g(b)s(e)f(trapp)s(ed)f(or)h(reset.)59 +b(T)-8 b(rapp)s(ed)630 4346 y(signals)31 b(are)g(reset)g(to)g(their)f +(original)i(v)-5 b(alues)30 b(in)g(a)h(c)m(hild)g(pro)s(cess)f(when)f +(it)i(is)g(created.)630 4479 y(The)f(return)f(status)i(is)f(zero)h +(unless)f(a)h Fq(sigsp)s(ec)36 b Ft(do)s(es)30 b(not)h(sp)s(ecify)f(a)g +(v)-5 b(alid)31 b(signal.)150 4635 y Fs(umask)870 4769 +y(umask)46 b([-p])h([-S])g([)p Fj(mode)11 b Fs(])630 +4902 y Ft(Set)30 b(the)f(shell)h(pro)s(cess's)f(\014le)h(creation)g +(mask)g(to)g Fq(mo)s(de)p Ft(.)40 b(If)29 b Fq(mo)s(de)34 +b Ft(b)s(egins)29 b(with)g(a)h(digit,)630 5011 y(it)e(is)f(in)m +(terpreted)g(as)g(an)g(o)s(ctal)i(n)m(um)m(b)s(er;)e(if)g(not,)h(it)g +(is)f(in)m(terpreted)g(as)g(a)h(sym)m(b)s(olic)f(mo)s(de)630 +5121 y(mask)i(similar)g(to)g(that)h(accepted)g(b)m(y)f(the)g +Fs(chmod)e Ft(command.)40 b(If)28 b Fq(mo)s(de)34 b Ft(is)28 +b(omitted,)j(the)630 5230 y(curren)m(t)36 b(v)-5 b(alue)36 +b(of)g(the)h(mask)f(is)g(prin)m(ted.)57 b(If)35 b(the)h(`)p +Fs(-S)p Ft(')g(option)h(is)f(supplied)f(without)h(a)630 +5340 y Fq(mo)s(de)k Ft(argumen)m(t,)d(the)e(mask)g(is)g(prin)m(ted)g +(in)g(a)h(sym)m(b)s(olic)f(format.)55 b(If)35 b(the)g(`)p +Fs(-p)p Ft(')g(option)p eop end %%Page: 39 45 -39 44 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(39)630 299 y(is)33 b(supplied,)e(and)i -Fq(mo)s(de)38 b Ft(is)32 b(omitted,)j(the)f(output)f(is)f(in)h(a)h -(form)f(that)h(ma)m(y)g(b)s(e)f(reused)630 408 y(as)e(input.)40 -b(The)31 b(return)f(status)h(is)f(zero)i(if)d(the)i(mo)s(de)g(is)f -(successfully)f(c)m(hanged)i(or)g(if)f(no)630 518 y Fq(mo)s(de)35 -b Ft(argumen)m(t)c(is)e(supplied,)f(and)h(non-zero)i(otherwise.)630 -653 y(Note)38 b(that)e(when)g(the)g(mo)s(de)g(is)f(in)m(terpreted)h(as) -g(an)g(o)s(ctal)h(n)m(um)m(b)s(er,)f(eac)m(h)i(n)m(um)m(b)s(er)d(of)630 -762 y(the)f(umask)g(is)g(subtracted)g(from)f Fs(7)p Ft(.)53 -b(Th)m(us,)34 b(a)h(umask)e(of)i Fs(022)e Ft(results)g(in)g(p)s -(ermissions)630 872 y(of)e Fs(755)p Ft(.)150 1031 y Fs(unset)870 -1166 y(unset)46 b([-fv])h([)p Fj(name)11 b Fs(])630 1300 -y Ft(Eac)m(h)34 b(v)-5 b(ariable)31 b(or)i(function)f -Fq(name)38 b Ft(is)32 b(remo)m(v)m(ed.)50 b(If)32 b(no)h(options)g(are) -g(supplied,)e(or)i(the)630 1410 y(`)p Fs(-v)p Ft(')h(option)g(is)g(giv) -m(en,)h(eac)m(h)h Fq(name)k Ft(refers)34 b(to)h(a)g(shell)d(v)-5 -b(ariable.)52 b(If)34 b(the)h(`)p Fs(-f)p Ft(')f(option)g(is)630 -1520 y(giv)m(en,)26 b(the)e Fq(name)5 b Ft(s)25 b(refer)f(to)h(shell)e -(functions,)h(and)g(the)g(function)f(de\014nition)f(is)i(remo)m(v)m -(ed.)630 1629 y(Readonly)31 b(v)-5 b(ariables)31 b(and)h(functions)e -(ma)m(y)j(not)f(b)s(e)g(unset.)45 b(The)32 b(return)f(status)h(is)f -(zero)630 1739 y(unless)e(a)h Fq(name)36 b Ft(is)29 b(readonly)-8 +TeXDict begin 39 44 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(39)630 299 y(is)34 +b(supplied,)f(and)g Fq(mo)s(de)38 b Ft(is)33 b(omitted,)j(the)e(output) +f(is)g(in)h(a)g(form)f(that)h(ma)m(y)g(b)s(e)f(reused)630 +408 y(as)e(input.)41 b(The)31 b(return)f(status)h(is)g(zero)h(if)e(the) +h(mo)s(de)g(is)g(successfully)g(c)m(hanged)g(or)g(if)g(no)630 +518 y Fq(mo)s(de)k Ft(argumen)m(t)c(is)f(supplied,)g(and)f(non-zero)i +(otherwise.)630 653 y(Note)38 b(that)e(when)g(the)g(mo)s(de)g(is)g(in)m +(terpreted)h(as)f(an)g(o)s(ctal)i(n)m(um)m(b)s(er,)e(eac)m(h)i(n)m(um)m +(b)s(er)d(of)630 762 y(the)f(umask)g(is)h(subtracted)f(from)f +Fs(7)p Ft(.)53 b(Th)m(us,)34 b(a)h(umask)e(of)i Fs(022)e +Ft(results)h(in)g(p)s(ermissions)630 872 y(of)d Fs(755)p +Ft(.)150 1031 y Fs(unset)870 1166 y(unset)46 b([-fv])h([)p +Fj(name)11 b Fs(])630 1300 y Ft(Eac)m(h)34 b(v)-5 b(ariable)33 +b(or)g(function)g Fq(name)38 b Ft(is)33 b(remo)m(v)m(ed.)50 +b(If)32 b(no)h(options)h(are)f(supplied,)g(or)g(the)630 +1410 y(`)p Fs(-v)p Ft(')h(option)h(is)g(giv)m(en,)h(eac)m(h)g +Fq(name)k Ft(refers)34 b(to)h(a)g(shell)f(v)-5 b(ariable.)54 +b(If)34 b(the)h(`)p Fs(-f)p Ft(')f(option)h(is)630 1520 +y(giv)m(en,)27 b(the)d Fq(name)5 b Ft(s)25 b(refer)f(to)h(shell)g +(functions,)g(and)f(the)g(function)g(de\014nition)g(is)h(remo)m(v)m +(ed.)630 1629 y(Readonly)32 b(v)-5 b(ariables)33 b(and)f(functions)f +(ma)m(y)i(not)f(b)s(e)g(unset.)45 b(The)32 b(return)f(status)h(is)g +(zero)630 1739 y(unless)e(a)g Fq(name)36 b Ft(is)30 b(readonly)-8 b(.)150 1997 y Fr(4.2)68 b(Bash)45 b(Builtin)g(Commands)275 -2241 y Ft(This)29 b(section)j(describ)s(es)e(builtin)f(commands)i(whic) -m(h)f(are)j(unique)c(to)k(or)f(ha)m(v)m(e)h(b)s(een)e(extended)g(in)150 +2241 y Ft(This)30 b(section)j(describ)s(es)e(builtin)h(commands)f(whic) +m(h)g(are)i(unique)d(to)j(or)f(ha)m(v)m(e)h(b)s(een)e(extended)g(in)150 2350 y(Bash.)41 b(Some)30 b(of)h(these)g(commands)f(are)g(sp)s -(eci\014ed)f(in)g(the)i Fl(posix)e Ft(1003.2)k(standard.)150 +(eci\014ed)g(in)g(the)h Fl(posix)e Ft(1003.2)k(standard.)150 2510 y Fs(alias)870 2645 y(alias)46 b([-p])h([)p Fj(name)11 -b Fs([=)p Fj(value)g Fs(])43 b(...)o(])630 2779 y Ft(Without)g(argumen) -m(ts)g(or)g(with)f(the)i(`)p Fs(-p)p Ft(')f(option,)j -Fs(alias)41 b Ft(prin)m(ts)h(the)h(list)f(of)h(aliases)630 -2889 y(on)36 b(the)g(standard)f(output)h(in)e(a)j(form)e(that)i(allo)m -(ws)e(them)h(to)g(b)s(e)g(reused)f(as)h(input.)55 b(If)630 -2998 y(argumen)m(ts)29 b(are)g(supplied,)d(an)j(alias)f(is)g(de\014ned) -f(for)i(eac)m(h)h Fq(name)k Ft(whose)28 b Fq(v)-5 b(alue)34 -b Ft(is)28 b(giv)m(en.)630 3108 y(If)39 b(no)h Fq(v)-5 -b(alue)44 b Ft(is)39 b(giv)m(en,)j(the)e(name)f(and)g(v)-5 -b(alue)39 b(of)h(the)g(alias)f(is)g(prin)m(ted.)67 b(Aliases)39 -b(are)630 3217 y(describ)s(ed)28 b(in)h(Section)i(6.6)g([Aliases],)f -(page)h(71.)150 3377 y Fs(bind)870 3512 y(bind)47 b([-m)g +b Fs([=)p Fj(value)g Fs(])43 b(...)o(])630 2779 y Ft(Without)h(argumen) +m(ts)f(or)g(with)g(the)h(`)p Fs(-p)p Ft(')f(option,)k +Fs(alias)41 b Ft(prin)m(ts)i(the)g(list)h(of)f(aliases)630 +2889 y(on)36 b(the)g(standard)f(output)h(in)f(a)i(form)e(that)i(allo)m +(ws)g(them)f(to)g(b)s(e)g(reused)f(as)h(input.)56 b(If)630 +2998 y(argumen)m(ts)29 b(are)g(supplied,)f(an)h(alias)h(is)f(de\014ned) +e(for)i(eac)m(h)h Fq(name)k Ft(whose)28 b Fq(v)-5 b(alue)35 +b Ft(is)29 b(giv)m(en.)630 3108 y(If)39 b(no)h Fq(v)-5 +b(alue)45 b Ft(is)40 b(giv)m(en,)j(the)d(name)f(and)g(v)-5 +b(alue)40 b(of)g(the)g(alias)h(is)f(prin)m(ted.)68 b(Aliases)41 +b(are)630 3217 y(describ)s(ed)29 b(in)h(Section)i(6.6)f([Aliases],)h +(page)f(71.)150 3377 y Fs(bind)870 3512 y(bind)47 b([-m)g Fj(keymap)11 b Fs(])45 b([-lpsvPSV])870 3621 y(bind)i([-m)g Fj(keymap)11 b Fs(])45 b([-q)i Fj(function)11 b Fs(])45 b([-u)h Fj(function)11 b Fs(])45 b([-r)i Fj(keyseq)11 @@ -5744,1545 +7441,1548 @@ b Fs(])870 3731 y(bind)47 b([-m)g Fj(keymap)11 b Fs(])45 b(-f)i Fj(filename)870 3840 y Fs(bind)g([-m)g Fj(keymap)11 b Fs(])45 b(-x)i Fj(keyseq:shell-command)870 3950 y Fs(bind)g([-m)g Fj(keymap)11 b Fs(])45 b Fj(keyseq:function-name)870 -4060 y Fs(bind)i Fj(readline-command)630 4194 y Ft(Displa)m(y)24 -b(curren)m(t)h(Readline)f(\(see)i(Chapter)f(8)g([Command)g(Line)f -(Editing],)h(page)h(83\))g(k)m(ey)630 4304 y(and)36 b(function)f -(bindings,)h(bind)e(a)j(k)m(ey)g(sequence)g(to)h(a)f(Readline)e -(function)g(or)i(macro,)630 4413 y(or)44 b(set)h(a)g(Readline)d(v)-5 -b(ariable.)81 b(Eac)m(h)45 b(non-option)f(argumen)m(t)g(is)f(a)i -(command)f(as)g(it)630 4523 y(w)m(ould)34 b(app)s(ear)g(in)f(a)j(a)f -(Readline)e(initialization)f(\014le)i(\(see)i(Section)e(8.3)i -([Readline)e(Init)630 4632 y(File],)41 b(page)e(86\),)k(but)38 -b(eac)m(h)i(binding)c(or)j(command)g(m)m(ust)g(b)s(e)f(passed)g(as)i(a) +4060 y Fs(bind)i Fj(readline-command)630 4194 y Ft(Displa)m(y)26 +b(curren)m(t)f(Readline)h(\(see)g(Chapter)f(8)g([Command)g(Line)g +(Editing],)i(page)f(83\))g(k)m(ey)630 4304 y(and)36 b(function)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 4413 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 4523 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 4632 y(File],)43 b(page)c(86\),)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)630 4742 y(argumen)m(t;)d(e.g.,)f(`)p Fs -("\\C-x\\C-r":re-read-init-fi)o(le)p Ft('.)43 b(Options,)33 -b(if)g(supplied,)e(ha)m(v)m(e)630 4852 y(the)g(follo)m(wing)d -(meanings:)630 5011 y Fs(-m)i Fj(keymap)1110 5121 y Ft(Use)54 +("\\C-x\\C-r":re-read-init-fi)o(le)p Ft('.)43 b(Options,)34 +b(if)g(supplied,)f(ha)m(v)m(e)630 4852 y(the)e(follo)m(wing)g +(meanings:)630 5011 y Fs(-m)f Fj(keymap)1110 5121 y Ft(Use)54 b Fq(k)m(eymap)j Ft(as)d(the)g(k)m(eymap)g(to)h(b)s(e)e(a\013ected)i(b) -m(y)f(the)g(subsequen)m(t)1110 5230 y(bindings.)44 b(Acceptable)33 -b Fq(k)m(eymap)j Ft(names)c(are)h Fs(emacs)p Ft(,)f Fs(emacs-standard)p +m(y)f(the)g(subsequen)m(t)1110 5230 y(bindings.)46 b(Acceptable)34 +b Fq(k)m(eymap)i Ft(names)c(are)h Fs(emacs)p Ft(,)f Fs(emacs-standard)p Ft(,)1110 5340 y Fs(emacs-meta)p Ft(,)99 b Fs(emacs-ctlx)p Ft(,)f Fs(vi)p Ft(,)j Fs(vi-move)p Ft(,)f Fs(vi-command)p -Ft(,)f(and)p eop +Ft(,)f(and)p eop end %%Page: 40 46 -40 45 bop 150 -116 a Ft(40)2572 b(Bash)31 b(Reference)g(Man)m(ual)1110 -299 y Fs(vi-insert)p Ft(.)64 b Fs(vi)38 b Ft(is)g(equiv)-5 -b(alen)m(t)39 b(to)g Fs(vi-command)p Ft(;)i Fs(emacs)c -Ft(is)h(equiv)-5 b(alen)m(t)1110 408 y(to)31 b Fs(emacs-standard)p -Ft(.)630 562 y Fs(-l)384 b Ft(List)30 b(the)g(names)g(of)h(all)e -(Readline)g(functions.)630 715 y Fs(-p)384 b Ft(Displa)m(y)32 -b(Readline)f(function)h(names)h(and)f(bindings)d(in)j(suc)m(h)g(a)i(w)m -(a)m(y)f(that)1110 825 y(they)e(can)f(b)s(e)g(used)g(as)g(input)f(or)h -(in)f(a)i(Readline)e(initialization)e(\014le.)630 978 -y Fs(-P)384 b Ft(List)30 b(curren)m(t)g(Readline)f(function)g(names)h -(and)g(bindings.)630 1132 y Fs(-v)384 b Ft(Displa)m(y)23 -b(Readline)f(v)-5 b(ariable)23 b(names)h(and)f(v)-5 b(alues)23 -b(in)g(suc)m(h)g(a)i(w)m(a)m(y)f(that)h(they)1110 1241 -y(can)31 b(b)s(e)e(used)h(as)h(input)d(or)i(in)f(a)i(Readline)e -(initialization)f(\014le.)630 1395 y Fs(-V)384 b Ft(List)30 -b(curren)m(t)g(Readline)f(v)-5 b(ariable)29 b(names)h(and)g(v)-5 -b(alues.)630 1548 y Fs(-s)384 b Ft(Displa)m(y)37 b(Readline)f(k)m(ey)i +TeXDict begin 40 45 bop 150 -116 a Ft(40)2572 b(Bash)31 +b(Reference)g(Man)m(ual)1110 299 y Fs(vi-insert)p Ft(.)64 +b Fs(vi)38 b Ft(is)h(equiv)-5 b(alen)m(t)41 b(to)e Fs(vi-command)p +Ft(;)i Fs(emacs)c Ft(is)i(equiv)-5 b(alen)m(t)1110 408 +y(to)31 b Fs(emacs-standard)p Ft(.)630 562 y Fs(-l)384 +b Ft(List)31 b(the)f(names)g(of)h(all)g(Readline)g(functions.)630 +715 y Fs(-p)384 b Ft(Displa)m(y)34 b(Readline)f(function)g(names)g(and) +f(bindings)f(in)i(suc)m(h)f(a)i(w)m(a)m(y)f(that)1110 +825 y(they)e(can)f(b)s(e)g(used)g(as)g(input)g(or)g(in)g(a)h(Readline)g +(initialization)i(\014le.)630 978 y Fs(-P)384 b Ft(List)31 +b(curren)m(t)f(Readline)h(function)f(names)g(and)g(bindings.)630 +1132 y Fs(-v)384 b Ft(Displa)m(y)25 b(Readline)f(v)-5 +b(ariable)25 b(names)f(and)f(v)-5 b(alues)24 b(in)g(suc)m(h)f(a)i(w)m +(a)m(y)f(that)h(they)1110 1241 y(can)31 b(b)s(e)e(used)h(as)h(input)e +(or)h(in)g(a)h(Readline)g(initialization)j(\014le.)630 +1395 y Fs(-V)384 b Ft(List)31 b(curren)m(t)f(Readline)h(v)-5 +b(ariable)31 b(names)f(and)g(v)-5 b(alues.)630 1548 y +Fs(-s)384 b Ft(Displa)m(y)39 b(Readline)f(k)m(ey)g(sequences)f(b)s +(ound)f(to)i(macros)g(and)f(the)g(strings)1110 1658 y(they)d(output)f +(in)h(suc)m(h)f(a)h(w)m(a)m(y)h(that)f(they)g(can)g(b)s(e)f(used)g(as)h +(input)e(or)i(in)g(a)1110 1767 y(Readline)d(initialization)i(\014le.) +630 1921 y Fs(-S)384 b Ft(Displa)m(y)39 b(Readline)f(k)m(ey)g (sequences)f(b)s(ound)f(to)i(macros)g(and)f(the)g(strings)1110 -1658 y(they)d(output)f(in)g(suc)m(h)g(a)h(w)m(a)m(y)h(that)f(they)g -(can)g(b)s(e)f(used)g(as)h(input)d(or)j(in)f(a)1110 1767 -y(Readline)c(initialization)e(\014le.)630 1921 y Fs(-S)384 -b Ft(Displa)m(y)37 b(Readline)f(k)m(ey)i(sequences)f(b)s(ound)f(to)i -(macros)g(and)f(the)g(strings)1110 2030 y(they)31 b(output.)630 -2184 y Fs(-f)f Fj(filename)1110 2293 y Ft(Read)h(k)m(ey)g(bindings)c -(from)j Fq(\014lename)p Ft(.)630 2447 y Fs(-q)g Fj(function)1110 -2556 y Ft(Query)g(ab)s(out)g(whic)m(h)f(k)m(eys)i(in)m(v)m(ok)m(e)g -(the)g(named)f Fq(function)p Ft(.)630 2710 y Fs(-u)g -Fj(function)1110 2819 y Ft(Un)m(bind)e(all)h(k)m(eys)i(b)s(ound)e(to)i -(the)f(named)g Fq(function)p Ft(.)630 2973 y Fs(-r)g -Fj(keyseq)1110 3082 y Ft(Remo)m(v)m(e)i(an)m(y)f(curren)m(t)f(binding)d -(for)j Fq(k)m(eyseq)p Ft(.)630 3236 y Fs(-x)g Fj(keyseq:shell-command) -1110 3345 y Ft(Cause)g Fq(shell-command)i Ft(to)g(b)s(e)d(executed)j -(whenev)m(er)e Fq(k)m(eyseq)j Ft(is)d(en)m(tered.)630 -3499 y(The)c(return)f(status)i(is)e(zero)j(unless)c(an)j(in)m(v)-5 -b(alid)24 b(option)i(is)f(supplied)e(or)k(an)f(error)g(o)s(ccurs.)150 +2030 y(they)31 b(output.)630 2184 y Fs(-f)f Fj(filename)1110 +2293 y Ft(Read)h(k)m(ey)g(bindings)e(from)h Fq(\014lename)p +Ft(.)630 2447 y Fs(-q)g Fj(function)1110 2556 y Ft(Query)g(ab)s(out)g +(whic)m(h)g(k)m(eys)h(in)m(v)m(ok)m(e)h(the)f(named)f +Fq(function)p Ft(.)630 2710 y Fs(-u)g Fj(function)1110 +2819 y Ft(Un)m(bind)f(all)i(k)m(eys)g(b)s(ound)e(to)i(the)f(named)g +Fq(function)p Ft(.)630 2973 y Fs(-r)g Fj(keyseq)1110 +3082 y Ft(Remo)m(v)m(e)i(an)m(y)f(curren)m(t)f(binding)f(for)h +Fq(k)m(eyseq)p Ft(.)630 3236 y Fs(-x)g Fj(keyseq:shell-command)1110 +3345 y Ft(Cause)g Fq(shell-command)k Ft(to)e(b)s(e)d(executed)j(whenev) +m(er)e Fq(k)m(eyseq)j Ft(is)e(en)m(tered.)630 3499 y(The)26 +b(return)f(status)i(is)f(zero)i(unless)d(an)i(in)m(v)-5 +b(alid)27 b(option)g(is)f(supplied)f(or)i(an)f(error)g(o)s(ccurs.)150 3652 y Fs(builtin)870 3784 y(builtin)46 b([)p Fj(shell-builtin)54 -b Fs([)p Fj(args)11 b Fs(]])630 3915 y Ft(Run)35 b(a)i(shell)d -(builtin,)h(passing)g(it)h Fq(args)p Ft(,)i(and)e(return)f(its)h(exit)g -(status.)59 b(This)34 b(is)i(useful)630 4025 y(when)29 -b(de\014ning)g(a)h(shell)f(function)g(with)g(the)h(same)h(name)f(as)h -(a)g(shell)d(builtin,)f(retaining)630 4134 y(the)34 b(functionalit)m(y) -e(of)i(the)f(builtin)d(within)h(the)j(function.)49 b(The)33 -b(return)g(status)h(is)e(non-)630 4244 y(zero)f(if)f -Fq(shell-builtin)25 b Ft(is)k(not)i(a)g(shell)d(builtin)f(command.)150 +b Fs([)p Fj(args)11 b Fs(]])630 3915 y Ft(Run)35 b(a)i(shell)f +(builtin,)i(passing)e(it)h Fq(args)p Ft(,)h(and)e(return)f(its)i(exit)g +(status.)59 b(This)35 b(is)i(useful)630 4025 y(when)29 +b(de\014ning)h(a)g(shell)h(function)f(with)g(the)g(same)h(name)f(as)h +(a)g(shell)f(builtin,)g(retaining)630 4134 y(the)k(functionalit)m(y)h +(of)f(the)f(builtin)g(within)g(the)h(function.)50 b(The)33 +b(return)g(status)h(is)f(non-)630 4244 y(zero)e(if)g +Fq(shell-builtin)f Ft(is)g(not)h(a)g(shell)f(builtin)g(command.)150 4398 y Fs(caller)870 4529 y(caller)46 b([)p Fj(expr)11 b Fs(])630 4661 y Ft(Returns)34 b(the)g(con)m(text)j(of)e(an)m(y)g -(activ)m(e)h(subroutine)c(call)i(\(a)h(shell)e(function)g(or)i(a)g -(script)630 4770 y(executed)c(with)e(the)i Fs(.)f Ft(or)g -Fs(source)f Ft(builtins\).)630 4902 y(Without)44 b Fq(expr)p -Ft(,)k Fs(caller)43 b Ft(displa)m(ys)g(the)h(line)f(n)m(um)m(b)s(er)h -(and)g(source)g(\014lename)g(of)h(the)630 5011 y(curren)m(t)35 -b(subroutine)f(call.)56 b(If)35 b(a)h(non-negativ)m(e)h(in)m(teger)f -(is)f(supplied)d(as)k Fq(expr)p Ft(,)h Fs(caller)630 -5121 y Ft(displa)m(ys)i(the)h(line)f(n)m(um)m(b)s(er,)j(subroutine)c -(name,)44 b(and)c(source)g(\014le)g(corresp)s(onding)e(to)630 -5230 y(that)d(p)s(osition)e(in)g(the)i(curren)m(t)f(execution)h(call)f -(stac)m(k.)54 b(This)33 b(extra)i(information)e(ma)m(y)630 -5340 y(b)s(e)d(used,)g(for)g(example,)g(to)h(prin)m(t)e(a)i(stac)m(k)h -(trace.)42 b(The)29 b(curren)m(t)i(frame)f(is)f(frame)i(0.)p -eop +(activ)m(e)i(subroutine)c(call)j(\(a)f(shell)g(function)f(or)h(a)g +(script)630 4770 y(executed)c(with)f(the)h Fs(.)f Ft(or)g +Fs(source)f Ft(builtins\).)630 4902 y(Without)45 b Fq(expr)p +Ft(,)j Fs(caller)43 b Ft(displa)m(ys)i(the)f(line)h(n)m(um)m(b)s(er)f +(and)g(source)g(\014lename)h(of)g(the)630 5011 y(curren)m(t)35 +b(subroutine)g(call.)58 b(If)35 b(a)h(non-negativ)m(e)i(in)m(teger)f +(is)f(supplied)e(as)i Fq(expr)p Ft(,)h Fs(caller)630 +5121 y Ft(displa)m(ys)k(the)f(line)h(n)m(um)m(b)s(er,)h(subroutine)d +(name,)44 b(and)c(source)g(\014le)h(corresp)s(onding)e(to)630 +5230 y(that)c(p)s(osition)g(in)f(the)h(curren)m(t)f(execution)i(call)g +(stac)m(k.)54 b(This)34 b(extra)h(information)g(ma)m(y)630 +5340 y(b)s(e)30 b(used,)g(for)g(example,)h(to)g(prin)m(t)f(a)h(stac)m +(k)h(trace.)42 b(The)29 b(curren)m(t)i(frame)f(is)g(frame)h(0.)p +eop end %%Page: 41 47 -41 46 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(41)630 299 y(The)29 b(return)f(v)-5 -b(alue)28 b(is)h(0)g(unless)f(the)h(shell)e(is)i(not)g(executing)g(a)h -(subroutine)d(call)h(or)i Fq(expr)630 408 y Ft(do)s(es)g(not)h(corresp) -s(ond)e(to)i(a)g(v)-5 b(alid)28 b(p)s(osition)h(in)g(the)h(call)g(stac) -m(k.)150 578 y Fs(command)870 717 y(command)46 b([-pVv])g -Fj(command)56 b Fs([)p Fj(arguments)g Fs(...)o(])630 -857 y Ft(Runs)32 b Fq(command)k Ft(with)c Fq(argumen)m(ts)37 -b Ft(ignoring)31 b(an)m(y)i(shell)f(function)f(named)i -Fq(command)p Ft(.)630 966 y(Only)38 b(shell)h(builtin)d(commands)k(or)g -(commands)f(found)g(b)m(y)h(searc)m(hing)g(the)g Fs(PATH)f -Ft(are)630 1076 y(executed.)g(If)23 b(there)h(is)e(a)i(shell)d -(function)h(named)h Fs(ls)p Ft(,)i(running)20 b(`)p Fs(command)29 -b(ls)p Ft(')23 b(within)e(the)630 1186 y(function)32 -b(will)e(execute)35 b(the)f(external)f(command)g Fs(ls)f -Ft(instead)h(of)g(calling)f(the)h(function)630 1295 y(recursiv)m(ely)-8 -b(.)82 b(The)44 b(`)p Fs(-p)p Ft(')h(option)f(means)g(to)h(use)g(a)f -(default)g(v)-5 b(alue)44 b(for)g Fs(PATH)g Ft(that)h(is)630 -1405 y(guaran)m(teed)35 b(to)f(\014nd)e(all)h(of)h(the)g(standard)f -(utilities.)48 b(The)33 b(return)g(status)h(in)e(this)h(case)630 -1514 y(is)28 b(127)h(if)f Fq(command)k Ft(cannot)d(b)s(e)e(found)h(or)g -(an)g(error)h(o)s(ccurred,)f(and)g(the)h(exit)f(status)h(of)630 +TeXDict begin 41 46 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(41)630 299 y(The)29 +b(return)f(v)-5 b(alue)29 b(is)h(0)f(unless)g(the)g(shell)g(is)h(not)f +(executing)h(a)g(subroutine)e(call)i(or)g Fq(expr)630 +408 y Ft(do)s(es)g(not)h(corresp)s(ond)e(to)i(a)g(v)-5 +b(alid)30 b(p)s(osition)h(in)f(the)g(call)i(stac)m(k.)150 +578 y Fs(command)870 717 y(command)46 b([-pVv])g Fj(command)56 +b Fs([)p Fj(arguments)g Fs(...)o(])630 857 y Ft(Runs)32 +b Fq(command)k Ft(with)d Fq(argumen)m(ts)k Ft(ignoring)c(an)m(y)g +(shell)h(function)e(named)h Fq(command)p Ft(.)630 966 +y(Only)39 b(shell)i(builtin)e(commands)h(or)g(commands)f(found)g(b)m(y) +h(searc)m(hing)h(the)f Fs(PATH)f Ft(are)630 1076 y(executed.)g(If)23 +b(there)h(is)f(a)h(shell)f(function)g(named)g Fs(ls)p +Ft(,)i(running)c(`)p Fs(command)29 b(ls)p Ft(')23 b(within)g(the)630 +1186 y(function)33 b(will)g(execute)i(the)f(external)g(command)f +Fs(ls)f Ft(instead)i(of)f(calling)i(the)e(function)630 +1295 y(recursiv)m(ely)-8 b(.)84 b(The)44 b(`)p Fs(-p)p +Ft(')h(option)g(means)f(to)h(use)g(a)f(default)h(v)-5 +b(alue)45 b(for)f Fs(PATH)g Ft(that)h(is)630 1405 y(guaran)m(teed)35 +b(to)f(\014nd)e(all)j(of)f(the)g(standard)f(utilities.)52 +b(The)33 b(return)g(status)h(in)f(this)h(case)630 1514 +y(is)29 b(127)g(if)g Fq(command)j Ft(cannot)d(b)s(e)e(found)h(or)g(an)g +(error)h(o)s(ccurred,)f(and)g(the)h(exit)g(status)g(of)630 1624 y Fq(command)34 b Ft(otherwise.)630 1763 y(If)25 -b(either)f(the)i(`)p Fs(-V)p Ft(')f(or)g(`)p Fs(-v)p -Ft(')g(option)f(is)g(supplied,)g(a)h(description)e(of)j -Fq(command)i Ft(is)c(prin)m(ted.)630 1873 y(The)j(`)p -Fs(-v)p Ft(')h(option)g(causes)g(a)h(single)d(w)m(ord)i(indicating)e -(the)i(command)g(or)g(\014le)f(name)h(used)630 1983 y(to)36 -b(in)m(v)m(ok)m(e)f Fq(command)k Ft(to)c(b)s(e)g(displa)m(y)m(ed;)h -(the)f(`)p Fs(-V)p Ft(')g(option)f(pro)s(duces)f(a)j(more)f(v)m(erb)s -(ose)630 2092 y(description.)59 b(In)36 b(this)g(case,)k(the)e(return)e -(status)h(is)f(zero)i(if)e Fq(command)41 b Ft(is)36 b(found,)i(and)630 -2202 y(non-zero)31 b(if)e(not.)150 2371 y Fs(declare)870 +b(either)g(the)h(`)p Fs(-V)p Ft(')f(or)g(`)p Fs(-v)p +Ft(')g(option)g(is)g(supplied,)h(a)f(description)g(of)h +Fq(command)i Ft(is)d(prin)m(ted.)630 1873 y(The)i(`)p +Fs(-v)p Ft(')h(option)h(causes)f(a)h(single)f(w)m(ord)g(indicating)h +(the)f(command)g(or)g(\014le)g(name)g(used)630 1983 y(to)36 +b(in)m(v)m(ok)m(e)g Fq(command)j Ft(to)c(b)s(e)g(displa)m(y)m(ed;)j +(the)d(`)p Fs(-V)p Ft(')g(option)g(pro)s(duces)e(a)j(more)f(v)m(erb)s +(ose)630 2092 y(description.)61 b(In)36 b(this)h(case,)j(the)e(return)e +(status)h(is)g(zero)h(if)f Fq(command)k Ft(is)c(found,)h(and)630 +2202 y(non-zero)31 b(if)f(not.)150 2371 y Fs(declare)870 2511 y(declare)46 b([-afFirtx])f([-p])h([)p Fj(name)11 -b Fs([=)p Fj(value)g Fs(])44 b(...)o(])630 2650 y Ft(Declare)28 -b(v)-5 b(ariables)26 b(and)g(giv)m(e)i(them)f(attributes.)39 -b(If)27 b(no)g Fq(name)5 b Ft(s)27 b(are)h(giv)m(en,)g(then)f(displa)m -(y)630 2760 y(the)k(v)-5 b(alues)29 b(of)i(v)-5 b(ariables)29 -b(instead.)630 2899 y(The)f(`)p Fs(-p)p Ft(')g(option)f(will)f(displa)m -(y)g(the)j(attributes)e(and)h(v)-5 b(alues)27 b(of)i(eac)m(h)g +b Fs([=)p Fj(value)g Fs(])44 b(...)o(])630 2650 y Ft(Declare)29 +b(v)-5 b(ariables)28 b(and)e(giv)m(e)j(them)e(attributes.)40 +b(If)27 b(no)g Fq(name)5 b Ft(s)27 b(are)h(giv)m(en,)h(then)e(displa)m +(y)630 2760 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31 +b(instead.)630 2899 y(The)d(`)p Fs(-p)p Ft(')g(option)g(will)h(displa)m +(y)f(the)h(attributes)f(and)g(v)-5 b(alues)28 b(of)h(eac)m(h)g Fq(name)p Ft(.)40 b(When)28 b(`)p Fs(-p)p Ft(')630 3009 -y(is)j(used,)h(additional)e(options)h(are)i(ignored.)45 -b(The)31 b(`)p Fs(-F)p Ft(')h(option)g(inhibits)c(the)k(displa)m(y)f -(of)630 3118 y(function)g(de\014nitions;)g(only)h(the)g(function)f -(name)i(and)f(attributes)g(are)g(prin)m(ted.)46 b(If)32 -b(the)630 3228 y Fs(extdebug)e Ft(shell)h(option)h(is)g(enabled)f -(using)g Fs(shopt)h Ft(\(see)h(Section)f(4.2)i([Bash)f(Builtins],)630 -3337 y(page)k(39\),)h(the)e(source)g(\014le)f(name)h(and)g(line)e(n)m -(um)m(b)s(er)g(where)i(the)g(function)e(is)h(de\014ned)630 -3447 y(are)g(displa)m(y)m(ed)f(as)h(w)m(ell.)53 b(`)p -Fs(-F)p Ft(')34 b(implies)e(`)p Fs(-f)p Ft('.)54 b(The)35 -b(follo)m(wing)e(options)h(can)h(b)s(e)f(used)g(to)630 -3557 y(restrict)40 b(output)h(to)g(v)-5 b(ariables)40 -b(with)f(the)i(sp)s(eci\014ed)e(attributes)h(or)h(to)g(giv)m(e)g(v)-5 +y(is)k(used,)g(additional)h(options)f(are)h(ignored.)46 +b(The)31 b(`)p Fs(-F)p Ft(')h(option)h(inhibits)e(the)h(displa)m(y)h +(of)630 3118 y(function)f(de\014nitions;)h(only)g(the)f(function)g +(name)h(and)f(attributes)h(are)f(prin)m(ted.)47 b(If)32 +b(the)630 3228 y Fs(extdebug)e Ft(shell)j(option)g(is)g(enabled)f +(using)g Fs(shopt)g Ft(\(see)h(Section)g(4.2)h([Bash)f(Builtins],)630 +3337 y(page)k(39\),)h(the)e(source)g(\014le)g(name)g(and)g(line)g(n)m +(um)m(b)s(er)e(where)i(the)g(function)f(is)h(de\014ned)630 +3447 y(are)f(displa)m(y)m(ed)h(as)f(w)m(ell.)55 b(`)p +Fs(-F)p Ft(')34 b(implies)h(`)p Fs(-f)p Ft('.)54 b(The)35 +b(follo)m(wing)h(options)f(can)g(b)s(e)f(used)g(to)630 +3557 y(restrict)41 b(output)g(to)g(v)-5 b(ariables)42 +b(with)e(the)h(sp)s(eci\014ed)f(attributes)h(or)g(to)g(giv)m(e)h(v)-5 b(ariables)630 3666 y(attributes:)630 3836 y Fs(-a)384 -b Ft(Eac)m(h)30 b Fq(name)k Ft(is)28 b(an)h(arra)m(y)h(v)-5 -b(ariable)28 b(\(see)i(Section)f(6.7)h([Arra)m(ys],)h(page)e(72\).)630 -4005 y Fs(-f)384 b Ft(Use)31 b(function)e(names)h(only)-8 -b(.)630 4174 y Fs(-i)384 b Ft(The)36 b(v)-5 b(ariable)35 -b(is)g(to)i(b)s(e)f(treated)h(as)g(an)f(in)m(teger;)k(arithmetic)35 -b(ev)-5 b(aluation)1110 4284 y(\(see)29 b(Section)e(6.5)i([Shell)d -(Arithmetic],)i(page)g(70\))h(is)e(p)s(erformed)f(when)h(the)1110 -4394 y(v)-5 b(ariable)29 b(is)h(assigned)f(a)i(v)-5 b(alue.)630 -4563 y Fs(-r)384 b Ft(Mak)m(e)25 b Fq(name)5 b Ft(s)23 -b(readonly)-8 b(.)38 b(These)24 b(names)f(cannot)h(then)f(b)s(e)g -(assigned)g(v)-5 b(alues)1110 4672 y(b)m(y)30 b(subsequen)m(t)g -(assignmen)m(t)g(statemen)m(ts)i(or)f(unset.)630 4842 -y Fs(-t)384 b Ft(Giv)m(e)32 b(eac)m(h)i Fq(name)j Ft(the)32 -b Fs(trace)f Ft(attribute.)45 b(T)-8 b(raced)32 b(functions)f(inherit)f -(the)1110 4951 y Fs(DEBUG)21 b Ft(trap)h(from)h(the)f(calling)f(shell.) -37 b(The)22 b(trace)h(attribute)g(has)f(no)g(sp)s(ecial)1110 -5061 y(meaning)30 b(for)g(v)-5 b(ariables.)630 5230 y +b Ft(Eac)m(h)30 b Fq(name)k Ft(is)29 b(an)g(arra)m(y)h(v)-5 +b(ariable)30 b(\(see)g(Section)g(6.7)g([Arra)m(ys],)h(page)e(72\).)630 +4005 y Fs(-f)384 b Ft(Use)31 b(function)f(names)g(only)-8 +b(.)630 4174 y Fs(-i)384 b Ft(The)36 b(v)-5 b(ariable)37 +b(is)f(to)h(b)s(e)f(treated)h(as)g(an)f(in)m(teger;)41 +b(arithmetic)c(ev)-5 b(aluation)1110 4284 y(\(see)29 +b(Section)f(6.5)h([Shell)f(Arithmetic],)i(page)e(70\))h(is)f(p)s +(erformed)e(when)h(the)1110 4394 y(v)-5 b(ariable)31 +b(is)g(assigned)f(a)h(v)-5 b(alue.)630 4563 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 4672 y(b)m(y)30 b(subsequen)m(t)g(assignmen)m(t)h +(statemen)m(ts)h(or)f(unset.)630 4842 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 4951 +y Fs(DEBUG)21 b Ft(trap)h(from)h(the)f(calling)i(shell.)39 +b(The)22 b(trace)h(attribute)h(has)e(no)g(sp)s(ecial)1110 +5061 y(meaning)31 b(for)f(v)-5 b(ariables.)630 5230 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)f(the)h(en)m(vi-)1110 -5340 y(ronmen)m(t.)p eop +b(exp)s(ort)h(to)g(subsequen)m(t)f(commands)h(via)g(the)g(en)m(vi-)1110 +5340 y(ronmen)m(t.)p eop end %%Page: 42 48 -42 47 bop 150 -116 a Ft(42)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(Using)24 b(`)p Fs(+)p Ft(')h(instead)g(of)g(`)p -Fs(-)p Ft(')g(turns)f(o\013)h(the)g(attribute)g(instead.)38 -b(When)25 b(used)f(in)g(a)h(function,)630 408 y Fs(declare)37 -b Ft(mak)m(es)i(eac)m(h)h Fq(name)k Ft(lo)s(cal,)d(as)d(with)g(the)h -Fs(local)e Ft(command.)66 b(If)38 b(a)h(v)-5 b(ariable)630 -518 y(name)30 b(is)g(follo)m(w)m(ed)g(b)m(y)g(=)p Fq(v)-5 -b(alue)p Ft(,)30 b(the)g(v)-5 b(alue)30 b(of)h(the)f(v)-5 -b(ariable)30 b(is)f(set)i(to)g Fq(v)-5 b(alue)p Ft(.)630 -658 y(The)35 b(return)f(status)i(is)f(zero)h(unless)e(an)h(in)m(v)-5 -b(alid)33 b(option)i(is)g(encoun)m(tered,)i(an)f(attempt)630 -767 y(is)31 b(made)h(to)g(de\014ne)f(a)h(function)f(using)f(`)p -Fs(-f)g(foo=bar)p Ft(',)h(an)h(attempt)g(is)f(made)h(to)h(assign)630 -877 y(a)42 b(v)-5 b(alue)42 b(to)h(a)f(readonly)f(v)-5 -b(ariable,)45 b(an)d(attempt)h(is)e(made)h(to)h(assign)e(a)i(v)-5 -b(alue)41 b(to)i(an)630 986 y(arra)m(y)30 b(v)-5 b(ariable)28 -b(without)h(using)e(the)j(comp)s(ound)e(assignmen)m(t)h(syn)m(tax)h -(\(see)h(Section)e(6.7)630 1096 y([Arra)m(ys],)47 b(page)c(72\),)48 -b(one)43 b(of)g(the)g Fq(names)k Ft(is)42 b(not)h(a)g(v)-5 -b(alid)41 b(shell)g(v)-5 b(ariable)42 b(name,)k(an)630 -1205 y(attempt)28 b(is)e(made)i(to)f(turn)f(o\013)i(readonly)e(status)h -(for)g(a)h(readonly)e(v)-5 b(ariable,)27 b(an)g(attempt)630 -1315 y(is)g(made)i(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,)28 b(or)g(an)g(attempt)i(is)d(made)h(to)630 -1425 y(displa)m(y)h(a)h(non-existen)m(t)h(function)e(with)g(`)p +TeXDict begin 42 47 bop 150 -116 a Ft(42)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 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 +408 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 518 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 658 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 767 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 877 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 986 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 1096 y([Arra)m(ys],)47 b(page)c(72\),)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 +1205 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 +1315 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 +1425 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g(`)p Fs(-f)p Ft('.)150 1594 y Fs(echo)870 1733 y(echo)47 b([-neE])f([)p Fj(arg)57 b Fs(...)o(])630 1873 y Ft(Output)31 b(the)i -Fq(arg)8 b Ft(s,)33 b(separated)g(b)m(y)g(spaces,)g(terminated)f(with)f -(a)i(newline.)45 b(The)32 b(return)630 1983 y(status)f(is)f(alw)m(a)m -(ys)h(0.)41 b(If)31 b(`)p Fs(-n)p Ft(')f(is)g(sp)s(eci\014ed,)f(the)i -(trailing)d(newline)h(is)g(suppressed.)40 b(If)30 b(the)630 -2092 y(`)p Fs(-e)p Ft(')23 b(option)h(is)e(giv)m(en,)j(in)m -(terpretation)e(of)h(the)g(follo)m(wing)e(bac)m(kslash-escap)s(ed)h(c)m -(haracters)630 2202 y(is)32 b(enabled.)47 b(The)32 b(`)p -Fs(-E)p Ft(')h(option)f(disables)f(the)i(in)m(terpretation)f(of)h +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 1983 y(status)f(is)g(alw)m(a)m +(ys)h(0.)41 b(If)31 b(`)p Fs(-n)p Ft(')f(is)h(sp)s(eci\014ed,)f(the)h +(trailing)g(newline)g(is)f(suppressed.)40 b(If)30 b(the)630 +2092 y(`)p Fs(-e)p Ft(')23 b(option)i(is)e(giv)m(en,)j(in)m +(terpretation)f(of)f(the)g(follo)m(wing)h(bac)m(kslash-escap)s(ed)f(c)m +(haracters)630 2202 y(is)33 b(enabled.)48 b(The)32 b(`)p +Fs(-E)p Ft(')h(option)g(disables)g(the)g(in)m(terpretation)h(of)f (these)g(escap)s(e)g(c)m(harac-)630 2311 y(ters,)42 b(ev)m(en)f(on)e -(systems)h(where)f(they)h(are)g(in)m(terpreted)f(b)m(y)h(default.)68 -b(The)39 b Fs(xpg_echo)630 2421 y Ft(shell)d(option)i(ma)m(y)h(b)s(e)e -(used)h(to)h(dynamically)d(determine)h(whether)h(or)g(not)g +(systems)h(where)f(they)h(are)g(in)m(terpreted)g(b)m(y)g(default.)69 +b(The)39 b Fs(xpg_echo)630 2421 y Ft(shell)f(option)h(ma)m(y)g(b)s(e)e +(used)h(to)h(dynamically)g(determine)f(whether)g(or)g(not)g Fs(echo)f Ft(ex-)630 2531 y(pands)30 b(these)h(escap)s(e)h(c)m -(haracters)g(b)m(y)f(default.)42 b Fs(echo)30 b Ft(in)m(terprets)h(the) -g(follo)m(wing)e(escap)s(e)630 2640 y(sequences:)630 -2809 y Fs(\\a)384 b Ft(alert)30 b(\(b)s(ell\))630 2979 +(haracters)g(b)m(y)f(default.)43 b Fs(echo)30 b Ft(in)m(terprets)i(the) +f(follo)m(wing)h(escap)s(e)630 2640 y(sequences:)630 +2809 y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630 2979 y Fs(\\b)384 b Ft(bac)m(kspace)630 3148 y Fs(\\c)g Ft(suppress)28 -b(trailing)h(newline)630 3318 y Fs(\\e)384 b Ft(escap)s(e)630 +b(trailing)k(newline)630 3318 y Fs(\\e)384 b Ft(escap)s(e)630 3487 y Fs(\\f)g Ft(form)30 b(feed)630 3656 y Fs(\\n)384 -b Ft(new)30 b(line)630 3826 y Fs(\\r)384 b Ft(carriage)31 -b(return)630 3995 y Fs(\\t)384 b Ft(horizon)m(tal)30 -b(tab)630 4164 y Fs(\\v)384 b Ft(v)m(ertical)30 b(tab)630 +b Ft(new)30 b(line)630 3826 y Fs(\\r)384 b Ft(carriage)32 +b(return)630 3995 y Fs(\\t)384 b Ft(horizon)m(tal)32 +b(tab)630 4164 y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630 4334 y Fs(\\\\)384 b Ft(bac)m(kslash)630 4503 y Fs(\\0)p -Fj(nnn)240 b Ft(the)32 b(eigh)m(t-bit)g(c)m(haracter)i(whose)e(v)-5 -b(alue)32 b(is)f(the)h(o)s(ctal)h(v)-5 b(alue)31 b Fq(nnn)g -Ft(\(zero)i(to)1110 4613 y(three)e(o)s(ctal)f(digits\))630 -4782 y Fs(\\)p Fj(nnn)288 b Ft(the)35 b(eigh)m(t-bit)f(c)m(haracter)i -(whose)e(v)-5 b(alue)34 b(is)g(the)g(o)s(ctal)h(v)-5 -b(alue)34 b Fq(nnn)f Ft(\(one)i(to)1110 4892 y(three)c(o)s(ctal)f -(digits\))630 5061 y Fs(\\x)p Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)f(c) -m(haracter)i(whose)e(v)-5 b(alue)38 b(is)h(the)g(hexadecimal)g(v)-5 -b(alue)39 b Fq(HH)1110 5171 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e -(digits\))150 5340 y Fs(enable)p eop +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 4613 y(three)e(o)s(ctal)g(digits\))630 +4782 y Fs(\\)p Fj(nnn)288 b Ft(the)35 b(eigh)m(t-bit)h(c)m(haracter)g +(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 +b(alue)35 b Fq(nnn)e Ft(\(one)i(to)1110 4892 y(three)c(o)s(ctal)g +(digits\))630 5061 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 5171 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e +(digits\))150 5340 y Fs(enable)p eop end %%Page: 43 49 -43 48 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(43)870 299 y Fs(enable)46 +TeXDict begin 43 48 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(43)870 299 y Fs(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 429 y Ft(Enable)35 b(and)g(disable)f -(builtin)f(shell)h(commands.)56 b(Disabling)34 b(a)j(builtin)32 -b(allo)m(ws)j(a)h(disk)630 539 y(command)e(whic)m(h)f(has)h(the)g(same) -h(name)f(as)h(a)f(shell)f(builtin)d(to)35 b(b)s(e)f(executed)h(without) -630 649 y(sp)s(ecifying)25 b(a)i(full)e(pathname,)i(ev)m(en)h(though)f -(the)g(shell)e(normally)g(searc)m(hes)j(for)f(builtins)630 -758 y(b)s(efore)32 b(disk)e(commands.)46 b(If)31 b(`)p -Fs(-n)p Ft(')h(is)f(used,)h(the)g Fq(name)5 b Ft(s)32 -b(b)s(ecome)h(disabled.)43 b(Otherwise)630 868 y Fq(name)5 -b Ft(s)44 b(are)h(enabled.)81 b(F)-8 b(or)45 b(example,)j(to)d(use)f -(the)g Fs(test)f Ft(binary)g(found)g(via)g Fs($PATH)630 -977 y Ft(instead)30 b(of)g(the)h(shell)d(builtin)f(v)m(ersion,)j(t)m -(yp)s(e)h(`)p Fs(enable)e(-n)h(test)p Ft('.)630 1108 -y(If)42 b(the)h(`)p Fs(-p)p Ft(')f(option)g(is)f(supplied,)i(or)f(no)h -Fq(name)k Ft(argumen)m(ts)c(app)s(ear,)i(a)e(list)e(of)i(shell)630 -1217 y(builtins)34 b(is)j(prin)m(ted.)62 b(With)37 b(no)g(other)h -(argumen)m(ts,)j(the)d(list)e(consists)h(of)h(all)f(enabled)630 -1327 y(shell)31 b(builtins.)43 b(The)32 b(`)p Fs(-a)p -Ft(')h(option)f(means)g(to)i(list)d(eac)m(h)j(builtin)29 -b(with)i(an)h(indication)f(of)630 1437 y(whether)f(or)g(not)h(it)f(is)f -(enabled.)630 1567 y(The)40 b(`)p Fs(-f)p Ft(')g(option)f(means)h(to)h -(load)f(the)g(new)f(builtin)e(command)j Fq(name)45 b -Ft(from)40 b(shared)630 1677 y(ob)5 b(ject)27 b Fq(\014lename)p -Ft(,)f(on)g(systems)g(that)h(supp)s(ort)d(dynamic)h(loading.)38 -b(The)26 b(`)p Fs(-d)p Ft(')g(option)g(will)630 1786 -y(delete)31 b(a)f(builtin)d(loaded)j(with)f(`)p Fs(-f)p -Ft('.)630 1917 y(If)i(there)g(are)g(no)g(options,)g(a)g(list)f(of)h -(the)g(shell)e(builtins)f(is)i(displa)m(y)m(ed.)41 b(The)31 -b(`)p Fs(-s)p Ft(')f(option)630 2026 y(restricts)e Fs(enable)f -Ft(to)i(the)f Fl(posix)g Ft(sp)s(ecial)f(builtins.)37 -b(If)27 b(`)p Fs(-s)p Ft(')i(is)e(used)h(with)f(`)p Fs(-f)p -Ft(',)i(the)f(new)630 2136 y(builtin)f(b)s(ecomes)k(a)f(sp)s(ecial)f -(builtin)e(\(see)32 b(Section)e(4.4)h([Sp)s(ecial)e(Builtins],)f(page)j -(53\).)630 2266 y(The)26 b(return)f(status)h(is)f(zero)i(unless)d(a)j -Fq(name)k Ft(is)25 b(not)h(a)h(shell)d(builtin)f(or)j(there)g(is)f(an)h -(error)630 2376 y(loading)j(a)i(new)f(builtin)d(from)j(a)g(shared)g(ob) -5 b(ject.)150 2527 y Fs(help)870 2658 y(help)47 b([-s])f([)p -Fj(pattern)11 b Fs(])630 2788 y Ft(Displa)m(y)38 b(helpful)e -(information)h(ab)s(out)i(builtin)c(commands.)66 b(If)38 -b Fq(pattern)h Ft(is)f(sp)s(eci\014ed,)630 2898 y Fs(help)28 -b Ft(giv)m(es)h(detailed)f(help)f(on)i(all)f(commands)g(matc)m(hing)h -Fq(pattern)p Ft(,)h(otherwise)e(a)h(list)f(of)630 3007 -y(the)36 b(builtins)c(is)j(prin)m(ted.)55 b(The)35 b(`)p -Fs(-s)p Ft(')h(option)f(restricts)g(the)h(information)e(displa)m(y)m -(ed)g(to)630 3117 y(a)e(short)g(usage)h(synopsis.)43 -b(The)32 b(return)f(status)h(is)f(zero)i(unless)d(no)i(command)g(matc)m +Fj(name)57 b Fs(...)o(])630 429 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 539 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 +649 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 +758 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 868 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 +977 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 1108 +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 +1217 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 +1327 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 1437 y(whether)c(or)g(not)h(it)g(is)f(enabled.)630 +1567 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 +1677 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 1786 y(delete)32 b(a)e(builtin)g(loaded)h +(with)f(`)p Fs(-f)p Ft('.)630 1917 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 2026 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 2136 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 +(53\).)630 2266 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 2376 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g +(ob)5 b(ject.)150 2527 y Fs(help)870 2658 y(help)47 b([-s])f([)p +Fj(pattern)11 b Fs(])630 2788 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 2898 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 3007 +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 3117 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 3226 y Fq(pattern)p Ft(.)150 3378 y Fs(let)870 3508 y(let)47 b Fj(expression)55 b Fs([)p Fj(expression)11 -b Fs(])630 3639 y Ft(The)41 b Fs(let)g Ft(builtin)d(allo)m(ws)j -(arithmetic)f(to)j(b)s(e)d(p)s(erformed)g(on)i(shell)e(v)-5 -b(ariables.)72 b(Eac)m(h)630 3748 y Fq(expression)30 -b Ft(is)g(ev)-5 b(aluated)31 b(according)f(to)i(the)f(rules)f(giv)m(en) -h(b)s(elo)m(w)f(in)f(Section)i(6.5)h([Shell)630 3858 -y(Arithmetic],)49 b(page)d(70.)87 b(If)45 b(the)g(last)g -Fq(expression)g Ft(ev)-5 b(aluates)46 b(to)g(0,)k Fs(let)44 -b Ft(returns)g(1;)630 3968 y(otherwise)30 b(0)h(is)e(returned.)150 +b Fs(])630 3639 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 3748 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 3858 +y(Arithmetic],)51 b(page)46 b(70.)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 3968 y(otherwise)31 b(0)g(is)f(returned.)150 4119 y Fs(local)870 4249 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 -4380 y Ft(F)-8 b(or)27 b(eac)m(h)g(argumen)m(t,)g(a)f(lo)s(cal)f(v)-5 -b(ariable)25 b(named)g Fq(name)31 b Ft(is)25 b(created,)j(and)d -(assigned)g Fq(v)-5 b(alue)p Ft(.)630 4489 y(The)37 b -Fq(option)g Ft(can)g(b)s(e)g(an)m(y)h(of)f(the)h(options)f(accepted)h +4380 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 4489 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 -4599 y(b)s(e)j(used)h(within)d(a)k(function;)k(it)41 -b(mak)m(es)i(the)f(v)-5 b(ariable)41 b Fq(name)48 b Ft(ha)m(v)m(e)43 -b(a)f(visible)e(scop)s(e)630 4709 y(restricted)e(to)h(that)g(function)e -(and)g(its)h(c)m(hildren.)62 b(The)38 b(return)f(status)h(is)g(zero)h -(unless)630 4818 y Fs(local)g Ft(is)g(used)h(outside)f(a)i(function,)g -(an)f(in)m(v)-5 b(alid)38 b Fq(name)46 b Ft(is)39 b(supplied,)h(or)g -Fq(name)45 b Ft(is)40 b(a)630 4928 y(readonly)29 b(v)-5 +4599 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)630 4709 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 4818 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 4928 y(readonly)30 b(v)-5 b(ariable.)150 5079 y Fs(logout)870 5210 y(logout)46 -b([)p Fj(n)11 b Fs(])630 5340 y Ft(Exit)30 b(a)h(login)e(shell,)g -(returning)f(a)j(status)g(of)f Fq(n)g Ft(to)h(the)g(shell's)d(paren)m -(t.)p eop +b([)p Fj(n)11 b Fs(])630 5340 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.)p eop end %%Page: 44 50 -44 49 bop 150 -116 a Ft(44)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fs(printf)870 445 y(printf)46 b Fj(format)57 b -Fs([)p Fj(arguments)11 b Fs(])630 591 y Ft(W)-8 b(rite)26 -b(the)h(formatted)f Fq(argumen)m(ts)k Ft(to)d(the)f(standard)f(output)h -(under)e(the)i(con)m(trol)h(of)f(the)630 701 y Fq(format)p -Ft(.)41 b(The)28 b Fq(format)j Ft(is)d(a)h(c)m(haracter)i(string)c -(whic)m(h)h(con)m(tains)h(three)g(t)m(yp)s(es)g(of)g(ob)5 -b(jects:)630 810 y(plain)26 b(c)m(haracters,)31 b(whic)m(h)c(are)i -(simply)d(copied)i(to)i(standard)d(output,)i(c)m(haracter)h(escap)s(e) -630 920 y(sequences,)g(whic)m(h)e(are)h(con)m(v)m(erted)i(and)d(copied) -h(to)g(the)h(standard)e(output,)h(and)g(format)630 1029 -y(sp)s(eci\014cations,)37 b(eac)m(h)g(of)g(whic)m(h)e(causes)h(prin)m -(ting)e(of)j(the)f(next)h(successiv)m(e)f Fq(argumen)m(t)p -Ft(.)630 1139 y(In)31 b(addition)f(to)j(the)e(standard)g +TeXDict begin 44 49 bop 150 -116 a Ft(44)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(printf)870 445 y(printf)46 +b Fj(format)57 b Fs([)p Fj(arguments)11 b Fs(])630 591 +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 701 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 810 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 920 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 1029 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 1139 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 1249 y(bac)m(kslash)38 -b(escap)s(e)h(sequences)f(in)g(the)g(corresp)s(onding)e -Fq(argumen)m(t)p Ft(,)41 b(\(except)f(that)f(`)p Fs(\\c)p -Ft(')630 1358 y(terminates)k(output,)k(bac)m(kslashes)c(in)f(`)p -Fs(\\')p Ft(',)47 b(`)p Fs(\\")p Ft(',)g(and)c(`)p Fs(\\?)p -Ft(')g(are)h(not)g(remo)m(v)m(ed,)k(and)630 1468 y(o)s(ctal)24 -b(escap)s(es)g(b)s(eginning)d(with)h(`)p Fs(\\0)p Ft(')i(ma)m(y)g(con)m -(tain)g(up)f(to)h(four)f(digits\),)h(and)f(`)p Fs(\045q)p +Fs(printf)e Ft(to)j(expand)630 1249 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 1358 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 1468 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 1577 y Fs(printf)31 b Ft(to)i(output)f(the)h(corresp) -s(onding)e Fq(argumen)m(t)k Ft(in)c(a)i(format)g(that)g(can)g(b)s(e)f -(reused)630 1687 y(as)f(shell)d(input.)630 1833 y(The)j -Fq(format)i Ft(is)e(reused)f(as)i(necessary)f(to)i(consume)e(all)f(of)h +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 1687 y(as)f(shell)f(input.)630 1833 y(The)h +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 -1943 y(mat)c Ft(requires)d(more)h Fq(argumen)m(ts)k Ft(than)25 -b(are)i(supplied,)c(the)j(extra)h(format)f(sp)s(eci\014cations)630 -2052 y(b)s(eha)m(v)m(e)j(as)g(if)e(a)i(zero)g(v)-5 b(alue)28 -b(or)h(n)m(ull)d(string,)i(as)h(appropriate,)f(had)g(b)s(een)g -(supplied.)36 b(The)630 2162 y(return)29 b(v)-5 b(alue)30 -b(is)g(zero)h(on)f(success,)h(non-zero)g(on)f(failure.)150 +1943 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 +2052 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 2162 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 2345 y Fs(read)870 2491 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 2600 y(out)11 b Fs(])46 b([-u)h Fj(fd)11 b Fs(])46 b([)p -Fj(name)57 b Fs(...])630 2746 y Ft(One)26 b(line)f(is)h(read)g(from)h -(the)f(standard)g(input,)g(or)h(from)f(the)h(\014le)e(descriptor)h -Fq(fd)j Ft(supplied)630 2856 y(as)37 b(an)g(argumen)m(t)h(to)f(the)h(`) -p Fs(-u)p Ft(')e(option,)j(and)d(the)i(\014rst)e(w)m(ord)g(is)g -(assigned)h(to)g(the)h(\014rst)630 2966 y Fq(name)p Ft(,)29 +Fj(name)57 b Fs(...])630 2746 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 2856 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 2966 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)e(lefto)m(v)m(er)i(w)m(ords)f(and)630 -3075 y(their)f(in)m(terv)m(ening)g(separators)i(assigned)e(to)i(the)f -(last)g Fq(name)p Ft(.)40 b(If)27 b(there)i(are)f(few)m(er)g(w)m(ords) -630 3185 y(read)44 b(from)f(the)g(input)f(stream)i(than)g(names,)j(the) -c(remaining)f(names)i(are)g(assigned)630 3294 y(empt)m(y)31 -b(v)-5 b(alues.)40 b(The)30 b(c)m(haracters)i(in)d(the)i(v)-5 -b(alue)30 b(of)h(the)f Fs(IFS)g Ft(v)-5 b(ariable)29 -b(are)i(used)f(to)h(split)630 3404 y(the)37 b(line)f(in)m(to)h(w)m -(ords.)61 b(The)36 b(bac)m(kslash)h(c)m(haracter)i(`)p +Ft(,)h(and)e(so)i(on,)g(with)f(lefto)m(v)m(er)i(w)m(ords)e(and)630 +3075 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 3185 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 3294 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 3404 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 -3513 y(sp)s(ecial)f(meaning)h(for)g(the)g(next)h(c)m(haracter)h(read)e -(and)g(for)g(line)f(con)m(tin)m(uation.)67 b(If)39 b(no)630 -3623 y(names)28 b(are)h(supplied,)d(the)i(line)f(read)i(is)e(assigned)h -(to)h(the)f(v)-5 b(ariable)27 b Fs(REPLY)p Ft(.)39 b(The)28 -b(return)630 3733 y(co)s(de)i(is)e(zero,)j(unless)d(end-of-\014le)h(is) -f(encoun)m(tered,)i Fs(read)f Ft(times)g(out,)h(or)f(an)h(in)m(v)-5 -b(alid)27 b(\014le)630 3842 y(descriptor)34 b(is)h(supplied)d(as)k(the) -f(argumen)m(t)h(to)g(`)p Fs(-u)p Ft('.)56 b(Options,)36 -b(if)e(supplied,)g(ha)m(v)m(e)j(the)630 3952 y(follo)m(wing)29 -b(meanings:)630 4134 y Fs(-a)h Fj(aname)114 b Ft(The)34 -b(w)m(ords)f(are)i(assigned)e(to)i(sequen)m(tial)f(indices)e(of)i(the)g +3513 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 +3623 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 3733 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 3842 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 3952 y(follo)m(wing)32 +b(meanings:)630 4134 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 4244 y Fq(aname)p Ft(,)29 -b(starting)g(at)g(0.)40 b(All)27 b(elemen)m(ts)i(are)f(remo)m(v)m(ed)i -(from)d Fq(aname)34 b Ft(b)s(efore)1110 4354 y(the)d(assignmen)m(t.)40 +b(starting)h(at)f(0.)40 b(All)29 b(elemen)m(ts)h(are)e(remo)m(v)m(ed)i +(from)d Fq(aname)34 b Ft(b)s(efore)1110 4354 y(the)d(assignmen)m(t.)41 b(Other)30 b Fq(name)36 b Ft(argumen)m(ts)30 b(are)h(ignored.)630 4536 y Fs(-d)f Fj(delim)114 b Ft(The)41 b(\014rst)h(c)m(haracter)h(of)f -Fq(delim)e Ft(is)h(used)h(to)g(terminate)g(the)g(input)e(line,)1110 +Fq(delim)g Ft(is)g(used)g(to)g(terminate)h(the)f(input)f(line,)1110 4646 y(rather)30 b(than)g(newline.)630 4829 y Fs(-e)384 -b Ft(Readline)26 b(\(see)j(Chapter)e(8)h([Command)f(Line)f(Editing],)h -(page)h(83\))h(is)e(used)1110 4938 y(to)k(obtain)f(the)h(line.)630 +b Ft(Readline)28 b(\(see)h(Chapter)e(8)h([Command)f(Line)g(Editing],)i +(page)f(83\))h(is)f(used)1110 4938 y(to)j(obtain)g(the)g(line.)630 5121 y Fs(-n)f Fj(nchars)1110 5230 y Fs(read)38 b Ft(returns)f(after)j -(reading)e Fq(nc)m(hars)k Ft(c)m(haracters)e(rather)f(than)g(w)m -(aiting)1110 5340 y(for)30 b(a)h(complete)g(line)d(of)j(input.)p -eop +(reading)f Fq(nc)m(hars)j Ft(c)m(haracters)e(rather)f(than)g(w)m +(aiting)1110 5340 y(for)30 b(a)h(complete)h(line)e(of)h(input.)p +eop end %%Page: 45 51 -45 50 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(45)630 299 y Fs(-p)30 b Fj(prompt)1110 -408 y Ft(Displa)m(y)36 b Fq(prompt)p Ft(,)i(without)d(a)i(trailing)e -(newline,)i(b)s(efore)f(attempting)h(to)1110 518 y(read)g(an)m(y)h -(input.)59 b(The)37 b(prompt)g(is)f(displa)m(y)m(ed)g(only)g(if)g -(input)g(is)g(coming)1110 628 y(from)30 b(a)h(terminal.)630 -794 y Fs(-r)384 b Ft(If)21 b(this)g(option)g(is)f(giv)m(en,)k(bac)m -(kslash)d(do)s(es)g(not)h(act)h(as)f(an)f(escap)s(e)h(c)m(haracter.) -1110 904 y(The)30 b(bac)m(kslash)h(is)f(considered)g(to)i(b)s(e)e(part) -h(of)g(the)g(line.)41 b(In)30 b(particular,)g(a)1110 -1013 y(bac)m(kslash-newline)e(pair)h(ma)m(y)i(not)g(b)s(e)f(used)f(as)i -(a)g(line)d(con)m(tin)m(uation.)630 1180 y Fs(-s)384 -b Ft(Silen)m(t)26 b(mo)s(de.)40 b(If)27 b(input)e(is)i(coming)g(from)g -(a)h(terminal,)f(c)m(haracters)i(are)f(not)1110 1289 +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(-p)30 +b Fj(prompt)1110 408 y Ft(Displa)m(y)38 b Fq(prompt)p +Ft(,)g(without)e(a)h(trailing)h(newline,)h(b)s(efore)d(attempting)i(to) +1110 518 y(read)f(an)m(y)h(input.)60 b(The)37 b(prompt)g(is)g(displa)m +(y)m(ed)h(only)f(if)g(input)g(is)g(coming)1110 628 y(from)30 +b(a)h(terminal.)630 794 y Fs(-r)384 b Ft(If)21 b(this)h(option)g(is)f +(giv)m(en,)k(bac)m(kslash)d(do)s(es)f(not)h(act)h(as)f(an)f(escap)s(e)h +(c)m(haracter.)1110 904 y(The)30 b(bac)m(kslash)i(is)f(considered)g(to) +h(b)s(e)e(part)h(of)g(the)g(line.)43 b(In)30 b(particular,)i(a)1110 +1013 y(bac)m(kslash-newline)f(pair)f(ma)m(y)h(not)g(b)s(e)f(used)f(as)i +(a)g(line)f(con)m(tin)m(uation.)630 1180 y Fs(-s)384 +b Ft(Silen)m(t)28 b(mo)s(de.)40 b(If)27 b(input)f(is)i(coming)g(from)f +(a)h(terminal,)h(c)m(haracters)g(are)f(not)1110 1289 y(ec)m(ho)s(ed.)630 1456 y Fs(-t)i Fj(timeout)1110 1565 -y Ft(Cause)42 b Fs(read)g Ft(to)h(time)g(out)g(and)f(return)f(failure)g -(if)h(a)h(complete)g(line)e(of)1110 1675 y(input)25 b(is)h(not)i(read)f -(within)d Fq(timeout)29 b Ft(seconds.)40 b(This)25 b(option)i(has)f(no) -h(e\013ect)1110 1784 y(if)i Fs(read)h Ft(is)f(not)i(reading)e(input)f -(from)i(the)h(terminal)e(or)h(a)h(pip)s(e.)630 1951 y -Fs(-u)f Fj(fd)258 b Ft(Read)31 b(input)d(from)i(\014le)f(descriptor)h +y Ft(Cause)42 b Fs(read)g Ft(to)h(time)h(out)f(and)f(return)f(failure)i +(if)g(a)g(complete)h(line)f(of)1110 1675 y(input)26 b(is)h(not)h(read)f +(within)f Fq(timeout)k Ft(seconds.)40 b(This)26 b(option)i(has)e(no)h +(e\013ect)1110 1784 y(if)j Fs(read)g Ft(is)g(not)h(reading)f(input)f +(from)h(the)h(terminal)g(or)f(a)h(pip)s(e.)630 1951 y +Fs(-u)f Fj(fd)258 b Ft(Read)31 b(input)e(from)h(\014le)g(descriptor)h Fq(fd)p Ft(.)150 2117 y Fs(shopt)870 2255 y(shopt)46 b([-pqsu])g([-o])h([)p Fj(optname)56 b Fs(...)o(])630 -2393 y Ft(T)-8 b(oggle)46 b(the)e(v)-5 b(alues)44 b(of)h(v)-5 -b(ariables)43 b(con)m(trolling)h(optional)g(shell)e(b)s(eha)m(vior.)83 -b(With)44 b(no)630 2503 y(options,)31 b(or)g(with)f(the)h(`)p -Fs(-p)p Ft(')g(option,)g(a)h(list)d(of)j(all)e(settable)h(options)g(is) -f(displa)m(y)m(ed,)g(with)630 2612 y(an)k(indication)f(of)i(whether)f -(or)g(not)h(eac)m(h)h(is)d(set.)54 b(The)34 b(`)p Fs(-p)p -Ft(')h(option)f(causes)h(output)f(to)630 2722 y(b)s(e)i(displa)m(y)m -(ed)f(in)f(a)j(form)f(that)h(ma)m(y)g(b)s(e)e(reused)h(as)g(input.)57 -b(Other)36 b(options)f(ha)m(v)m(e)j(the)630 2832 y(follo)m(wing)29 -b(meanings:)630 2998 y Fs(-s)384 b Ft(Enable)29 b(\(set\))j(eac)m(h)f -Fq(optname)p Ft(.)630 3164 y Fs(-u)384 b Ft(Disable)29 -b(\(unset\))i(eac)m(h)h Fq(optname)p Ft(.)630 3331 y -Fs(-q)384 b Ft(Suppresses)28 b(normal)g(output;)i(the)g(return)e -(status)i(indicates)f(whether)g(the)1110 3440 y Fq(optname)37 -b Ft(is)30 b(set)i(or)f(unset.)43 b(If)31 b(m)m(ultiple)e +2393 y Ft(T)-8 b(oggle)47 b(the)d(v)-5 b(alues)45 b(of)g(v)-5 +b(ariables)45 b(con)m(trolling)i(optional)f(shell)e(b)s(eha)m(vior.)84 +b(With)45 b(no)630 2503 y(options,)32 b(or)f(with)g(the)g(`)p +Fs(-p)p Ft(')g(option,)h(a)g(list)f(of)h(all)g(settable)g(options)g(is) +f(displa)m(y)m(ed,)h(with)630 2612 y(an)i(indication)i(of)f(whether)f +(or)g(not)h(eac)m(h)h(is)e(set.)54 b(The)34 b(`)p Fs(-p)p +Ft(')h(option)g(causes)g(output)f(to)630 2722 y(b)s(e)i(displa)m(y)m +(ed)h(in)e(a)i(form)f(that)h(ma)m(y)g(b)s(e)e(reused)h(as)g(input.)58 +b(Other)36 b(options)g(ha)m(v)m(e)i(the)630 2832 y(follo)m(wing)32 +b(meanings:)630 2998 y Fs(-s)384 b Ft(Enable)30 b(\(set\))i(eac)m(h)f +Fq(optname)p Ft(.)630 3164 y Fs(-u)384 b Ft(Disable)31 +b(\(unset\))g(eac)m(h)h Fq(optname)p Ft(.)630 3331 y +Fs(-q)384 b Ft(Suppresses)28 b(normal)h(output;)h(the)g(return)e +(status)i(indicates)h(whether)e(the)1110 3440 y Fq(optname)37 +b Ft(is)31 b(set)h(or)f(unset.)43 b(If)31 b(m)m(ultiple)h Fq(optname)37 b Ft(argumen)m(ts)31 b(are)h(giv)m(en)1110 -3550 y(with)42 b(`)p Fs(-q)p Ft(',)k(the)d(return)f(status)h(is)f(zero) -i(if)e(all)f Fq(optnames)47 b Ft(are)d(enabled;)1110 -3660 y(non-zero)31 b(otherwise.)630 3826 y Fs(-o)384 -b Ft(Restricts)41 b(the)h(v)-5 b(alues)41 b(of)g Fq(optname)47 -b Ft(to)42 b(b)s(e)f(those)h(de\014ned)e(for)h(the)h(`)p -Fs(-o)p Ft(')1110 3936 y(option)20 b(to)i(the)f Fs(set)f -Ft(builtin)d(\(see)22 b(Section)e(4.3)i([The)e(Set)h(Builtin],)g(page)g -(50\).)630 4102 y(If)29 b(either)h(`)p Fs(-s)p Ft(')g(or)g(`)p -Fs(-u)p Ft(')f(is)g(used)h(with)e(no)i Fq(optname)35 -b Ft(argumen)m(ts,)c(the)f(displa)m(y)e(is)h(limited)630 -4212 y(to)i(those)g(options)f(whic)m(h)f(are)i(set)f(or)h(unset,)f -(resp)s(ectiv)m(ely)-8 b(.)630 4350 y(Unless)29 b(otherwise)h(noted,)h -(the)g Fs(shopt)d Ft(options)i(are)h(disabled)d(\(o\013)7 -b(\))32 b(b)m(y)e(default.)630 4488 y(The)d(return)f(status)i(when)f -(listing)e(options)i(is)f(zero)j(if)d(all)h Fq(optnames)k -Ft(are)d(enabled,)f(non-)630 4597 y(zero)40 b(otherwise.)65 -b(When)39 b(setting)g(or)g(unsetting)f(options,)i(the)f(return)f -(status)h(is)f(zero)630 4707 y(unless)29 b(an)h Fq(optname)36 -b Ft(is)29 b(not)i(a)g(v)-5 b(alid)28 b(shell)h(option.)630 -4845 y(The)h(list)f(of)h Fs(shopt)f Ft(options)h(is:)630 -5011 y Fs(cdable_vars)1110 5121 y Ft(If)k(this)g(is)g(set,)j(an)e -(argumen)m(t)g(to)h(the)f Fs(cd)f Ft(builtin)e(command)i(that)i(is)e -(not)1110 5230 y(a)d(directory)f(is)g(assumed)g(to)h(b)s(e)f(the)h -(name)f(of)h(a)g(v)-5 b(ariable)29 b(whose)i(v)-5 b(alue)30 -b(is)1110 5340 y(the)h(directory)e(to)j(c)m(hange)f(to.)p -eop +3550 y(with)43 b(`)p Fs(-q)p Ft(',)j(the)d(return)f(status)h(is)g(zero) +h(if)f(all)g Fq(optnames)k Ft(are)d(enabled;)1110 3660 +y(non-zero)31 b(otherwise.)630 3826 y Fs(-o)384 b Ft(Restricts)42 +b(the)g(v)-5 b(alues)42 b(of)f Fq(optname)47 b Ft(to)42 +b(b)s(e)f(those)h(de\014ned)e(for)h(the)h(`)p Fs(-o)p +Ft(')1110 3936 y(option)21 b(to)h(the)f Fs(set)f Ft(builtin)g(\(see)i +(Section)f(4.3)h([The)e(Set)h(Builtin],)j(page)d(50\).)630 +4102 y(If)29 b(either)i(`)p Fs(-s)p Ft(')f(or)g(`)p Fs(-u)p +Ft(')f(is)h(used)g(with)f(no)h Fq(optname)35 b Ft(argumen)m(ts,)c(the)f +(displa)m(y)g(is)g(limited)630 4212 y(to)h(those)g(options)g(whic)m(h)f +(are)h(set)f(or)h(unset,)f(resp)s(ectiv)m(ely)-8 b(.)630 +4350 y(Unless)30 b(otherwise)h(noted,)g(the)g Fs(shopt)d +Ft(options)j(are)g(disabled)f(\(o\013)7 b(\))32 b(b)m(y)e(default.)630 +4488 y(The)d(return)f(status)i(when)f(listing)h(options)g(is)f(zero)i +(if)e(all)i Fq(optnames)i Ft(are)d(enabled,)g(non-)630 +4597 y(zero)40 b(otherwise.)66 b(When)39 b(setting)h(or)f(unsetting)g +(options,)i(the)e(return)f(status)h(is)g(zero)630 4707 +y(unless)30 b(an)g Fq(optname)36 b Ft(is)30 b(not)h(a)g(v)-5 +b(alid)30 b(shell)h(option.)630 4845 y(The)f(list)h(of)f +Fs(shopt)f Ft(options)i(is:)630 5011 y Fs(cdable_vars)1110 +5121 y Ft(If)j(this)h(is)g(set,)i(an)e(argumen)m(t)g(to)h(the)f +Fs(cd)f Ft(builtin)h(command)f(that)i(is)f(not)1110 5230 +y(a)c(directory)g(is)g(assumed)f(to)h(b)s(e)f(the)h(name)f(of)h(a)g(v) +-5 b(ariable)31 b(whose)g(v)-5 b(alue)31 b(is)1110 5340 +y(the)g(directory)f(to)i(c)m(hange)f(to.)p eop end %%Page: 46 52 -46 51 bop 150 -116 a Ft(46)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y Fs(cdspell)144 b Ft(If)27 b(set,)h(minor)e(errors)g(in)g(the)h -(sp)s(elling)e(of)i(a)g(directory)g(comp)s(onen)m(t)g(in)f(a)i -Fs(cd)1110 408 y Ft(command)i(will)e(b)s(e)i(corrected.)43 -b(The)30 b(errors)g(c)m(hec)m(k)m(ed)j(for)d(are)h(transp)s(osed)1110 -518 y(c)m(haracters,)46 b(a)c(missing)d(c)m(haracter,)47 -b(and)40 b(a)i(c)m(haracter)h(to)s(o)g(man)m(y)-8 b(.)74 -b(If)42 b(a)1110 628 y(correction)24 b(is)e(found,)h(the)h(corrected)g -(path)f(is)f(prin)m(ted,)h(and)g(the)g(command)1110 737 -y(pro)s(ceeds.)40 b(This)29 b(option)h(is)f(only)h(used)f(b)m(y)h(in)m -(teractiv)m(e)i(shells.)630 894 y Fs(checkhash)1110 1004 -y Ft(If)d(this)g(is)g(set,)h(Bash)g(c)m(hec)m(ks)h(that)g(a)f(command)f -(found)g(in)f(the)i(hash)f(table)1110 1114 y(exists)j(b)s(efore)g -(trying)g(to)i(execute)g(it.)47 b(If)32 b(a)h(hashed)e(command)i(no)f -(longer)1110 1223 y(exists,)e(a)h(normal)e(path)h(searc)m(h)h(is)f(p)s -(erformed.)630 1380 y Fs(checkwinsize)1110 1490 y Ft(If)41 -b(set,)k(Bash)c(c)m(hec)m(ks)i(the)f(windo)m(w)d(size)j(after)g(eac)m -(h)g(command)f(and,)j(if)1110 1600 y(necessary)-8 b(,)31 -b(up)s(dates)f(the)g(v)-5 b(alues)30 b(of)h Fs(LINES)e -Ft(and)g Fs(COLUMNS)p Ft(.)630 1757 y Fs(cmdhist)144 -b Ft(If)33 b(set,)j(Bash)e(attempts)h(to)g(sa)m(v)m(e)g(all)e(lines)f -(of)i(a)h(m)m(ultiple-line)30 b(command)1110 1866 y(in)g(the)h(same)g -(history)f(en)m(try)-8 b(.)42 b(This)29 b(allo)m(ws)h(easy)i -(re-editing)e(of)h(m)m(ulti-line)1110 1976 y(commands.)630 -2133 y Fs(dotglob)144 b Ft(If)27 b(set,)i(Bash)f(includes)e -(\014lenames)h(b)s(eginning)e(with)h(a)i(`.')41 b(in)26 -b(the)i(results)f(of)1110 2243 y(\014lename)j(expansion.)630 -2400 y Fs(execfail)96 b Ft(If)24 b(this)g(is)f(set,)k(a)e(non-in)m -(teractiv)m(e)g(shell)e(will)e(not)k(exit)g(if)e(it)h(cannot)i(execute) -1110 2510 y(the)i(\014le)f(sp)s(eci\014ed)g(as)h(an)g(argumen)m(t)g(to) -h(the)f Fs(exec)f Ft(builtin)e(command.)39 b(An)1110 -2619 y(in)m(teractiv)m(e)31 b(shell)e(do)s(es)h(not)g(exit)h(if)e -Fs(exec)g Ft(fails.)630 2777 y Fs(expand_aliases)1110 -2886 y Ft(If)j(set,)h(aliases)e(are)i(expanded)e(as)h(describ)s(ed)e(b) -s(elo)m(w)h(under)g(Aliases,)g(Sec-)1110 2996 y(tion)37 -b(6.6)i([Aliases],)h(page)f(71.)64 b(This)36 b(option)h(is)g(enabled)g -(b)m(y)h(default)f(for)1110 3105 y(in)m(teractiv)m(e)31 +TeXDict begin 46 51 bop 150 -116 a Ft(46)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(cdspell)144 b Ft(If)27 +b(set,)h(minor)f(errors)f(in)h(the)g(sp)s(elling)h(of)f(a)g(directory)h +(comp)s(onen)m(t)f(in)g(a)h Fs(cd)1110 408 y Ft(command)i(will)h(b)s(e) +f(corrected.)43 b(The)30 b(errors)g(c)m(hec)m(k)m(ed)j(for)d(are)h +(transp)s(osed)1110 518 y(c)m(haracters,)46 b(a)c(missing)f(c)m +(haracter,)47 b(and)40 b(a)i(c)m(haracter)h(to)s(o)g(man)m(y)-8 +b(.)74 b(If)42 b(a)1110 628 y(correction)25 b(is)e(found,)g(the)h +(corrected)g(path)f(is)g(prin)m(ted,)h(and)f(the)g(command)1110 +737 y(pro)s(ceeds.)40 b(This)30 b(option)h(is)f(only)h(used)e(b)m(y)h +(in)m(teractiv)m(e)k(shells.)630 894 y Fs(checkhash)1110 +1004 y Ft(If)29 b(this)h(is)g(set,)g(Bash)g(c)m(hec)m(ks)h(that)g(a)f +(command)f(found)g(in)g(the)h(hash)f(table)1110 1114 +y(exists)k(b)s(efore)f(trying)h(to)h(execute)g(it.)48 +b(If)32 b(a)h(hashed)e(command)i(no)f(longer)1110 1223 +y(exists,)f(a)g(normal)f(path)g(searc)m(h)h(is)g(p)s(erformed.)630 +1380 y Fs(checkwinsize)1110 1490 y Ft(If)41 b(set,)k(Bash)c(c)m(hec)m +(ks)i(the)f(windo)m(w)e(size)j(after)f(eac)m(h)g(command)f(and,)j(if) +1110 1600 y(necessary)-8 b(,)31 b(up)s(dates)f(the)g(v)-5 +b(alues)31 b(of)g Fs(LINES)e Ft(and)g Fs(COLUMNS)p Ft(.)630 +1757 y Fs(cmdhist)144 b Ft(If)33 b(set,)j(Bash)e(attempts)h(to)g(sa)m +(v)m(e)g(all)g(lines)f(of)g(a)h(m)m(ultiple-line)g(command)1110 +1866 y(in)c(the)g(same)g(history)g(en)m(try)-8 b(.)42 +b(This)30 b(allo)m(ws)i(easy)g(re-editing)g(of)f(m)m(ulti-line)1110 +1976 y(commands.)630 2133 y Fs(dotglob)144 b Ft(If)27 +b(set,)i(Bash)f(includes)g(\014lenames)g(b)s(eginning)f(with)g(a)h(`.') +41 b(in)27 b(the)h(results)g(of)1110 2243 y(\014lename)j(expansion.)630 +2400 y Fs(execfail)96 b Ft(If)24 b(this)h(is)f(set,)j(a)e(non-in)m +(teractiv)m(e)i(shell)e(will)f(not)h(exit)h(if)e(it)h(cannot)h(execute) +1110 2510 y(the)i(\014le)g(sp)s(eci\014ed)g(as)g(an)g(argumen)m(t)g(to) +h(the)f Fs(exec)f Ft(builtin)h(command.)39 b(An)1110 +2619 y(in)m(teractiv)m(e)33 b(shell)e(do)s(es)f(not)g(exit)i(if)e +Fs(exec)f Ft(fails.)630 2777 y Fs(expand_aliases)1110 +2886 y Ft(If)j(set,)h(aliases)g(are)g(expanded)e(as)h(describ)s(ed)f(b) +s(elo)m(w)h(under)f(Aliases,)i(Sec-)1110 2996 y(tion)38 +b(6.6)h([Aliases],)j(page)d(71.)64 b(This)37 b(option)h(is)g(enabled)g +(b)m(y)g(default)g(for)1110 3105 y(in)m(teractiv)m(e)33 b(shells.)630 3263 y Fs(extdebug)96 b Ft(If)30 b(set,)h(b)s(eha)m(vior) -f(in)m(tended)f(for)h(use)g(b)m(y)g(debuggers)g(is)g(enabled:)1159 -3396 y(1.)61 b(The)32 b(`)p Fs(-F)p Ft(')g(option)g(to)h(the)g -Fs(declare)d Ft(builtin)f(\(see)34 b(Section)e(4.2)i([Bash)1290 -3506 y(Builtins],)26 b(page)j(39\))g(displa)m(ys)d(the)i(source)h -(\014le)e(name)h(and)f(line)f(n)m(um-)1290 3615 y(b)s(er)j(corresp)s -(onding)f(to)j(eac)m(h)g(function)e(name)h(supplied)d(as)k(an)f(argu-) +g(in)m(tended)f(for)g(use)g(b)m(y)g(debuggers)g(is)h(enabled:)1159 +3396 y(1.)61 b(The)32 b(`)p Fs(-F)p Ft(')g(option)h(to)g(the)g +Fs(declare)d Ft(builtin)i(\(see)i(Section)f(4.2)h([Bash)1290 +3506 y(Builtins],)29 b(page)g(39\))g(displa)m(ys)f(the)g(source)h +(\014le)f(name)g(and)f(line)h(n)m(um-)1290 3615 y(b)s(er)h(corresp)s +(onding)g(to)i(eac)m(h)g(function)f(name)g(supplied)f(as)i(an)f(argu-) 1290 3725 y(men)m(t.)1159 3858 y(2.)61 b(If)20 b(the)h(command)g(run)e (b)m(y)i(the)f Fs(DEBUG)g Ft(trap)g(returns)g(a)h(non-zero)g(v)-5 -b(alue,)1290 3968 y(the)31 b(next)f(command)g(is)g(skipp)s(ed)e(and)h +b(alue,)1290 3968 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g (not)i(executed.)1159 4101 y(3.)61 b(If)37 b(the)g(command)g(run)f(b)m -(y)i(the)f Fs(DEBUG)f Ft(trap)h(returns)f(a)i(v)-5 b(alue)37 -b(of)g(2,)1290 4211 y(and)c(the)g(shell)f(is)g(executing)i(in)e(a)i -(subroutine)d(\(a)j(shell)e(function)g(or)1290 4320 y(a)i(shell)f -(script)g(executed)i(b)m(y)f(the)g Fs(.)g Ft(or)g Fs(source)e -Ft(builtins\),)g(a)j(call)e(to)1290 4430 y Fs(return)c -Ft(is)g(sim)m(ulated.)630 4587 y Fs(extglob)144 b Ft(If)26 -b(set,)i(the)f(extended)f(pattern)h(matc)m(hing)f(features)h(describ)s -(ed)d(ab)s(o)m(v)m(e)k(\(see)1110 4697 y(Section)i(3.5.8.1)j([P)m -(attern)f(Matc)m(hing],)f(page)g(23\))h(are)f(enabled.)630 +(y)i(the)f Fs(DEBUG)f Ft(trap)h(returns)f(a)i(v)-5 b(alue)38 +b(of)f(2,)1290 4211 y(and)c(the)g(shell)h(is)f(executing)i(in)e(a)h +(subroutine)e(\(a)i(shell)g(function)f(or)1290 4320 y(a)h(shell)h +(script)f(executed)h(b)m(y)f(the)g Fs(.)g Ft(or)g Fs(source)e +Ft(builtins\),)j(a)g(call)g(to)1290 4430 y Fs(return)29 +b Ft(is)h(sim)m(ulated.)630 4587 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 4697 y(Section)j(3.5.8.1)i([P)m +(attern)f(Matc)m(hing],)g(page)f(23\))h(are)f(enabled.)630 4854 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)j(is)f(p)s(erformed)f(within)1110 -4964 y Fs(${)p Fj(parameter)11 b Fs(})30 b Ft(expansions)i(enclosed)h -(in)g(double)f(quotes.)51 b(This)31 b(option)1110 5073 -y(is)e(enabled)h(b)m(y)g(default.)630 5230 y Fs(failglob)96 -b Ft(If)30 b(set,)g(patterns)g(whic)m(h)f(fail)g(to)i(matc)m(h)g -(\014lenames)e(during)e(pathname)j(ex-)1110 5340 y(pansion)f(result)g -(in)g(an)h(expansion)g(error.)p eop +b Fs(")46 b Ft(quoting)k(is)f(p)s(erformed)e(within)1110 +4964 y Fs(${)p Fj(parameter)11 b Fs(})30 b Ft(expansions)j(enclosed)h +(in)g(double)f(quotes.)51 b(This)32 b(option)1110 5073 +y(is)e(enabled)h(b)m(y)f(default.)630 5230 y Fs(failglob)96 +b Ft(If)30 b(set,)g(patterns)g(whic)m(h)g(fail)h(to)g(matc)m(h)g +(\014lenames)f(during)e(pathname)i(ex-)1110 5340 y(pansion)g(result)g +(in)g(an)g(expansion)h(error.)p eop end %%Page: 47 53 -47 52 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(47)630 299 y Fs(force_fignore)1110 -408 y Ft(If)43 b(set,)k(the)d(su\016xes)f(sp)s(eci\014ed)e(b)m(y)j(the) -f Fs(FIGNORE)f Ft(shell)f(v)-5 b(ariable)42 b(cause)1110 -518 y(w)m(ords)31 b(to)h(b)s(e)f(ignored)g(when)g(p)s(erforming)e(w)m -(ord)i(completion)g(ev)m(en)h(if)f(the)1110 628 y(ignored)36 -b(w)m(ords)h(are)g(the)h(only)e(p)s(ossible)f(completions.)60 -b(See)37 b(Section)g(5.2)1110 737 y([Bash)24 b(V)-8 b(ariables],)25 -b(page)g(55,)h(for)d(a)h(description)e(of)i Fs(FIGNORE)p -Ft(.)37 b(This)21 b(option)1110 847 y(is)29 b(enabled)h(b)m(y)g +TeXDict begin 47 52 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(47)630 299 y Fs(force_fignore) +1110 408 y Ft(If)43 b(set,)k(the)d(su\016xes)f(sp)s(eci\014ed)f(b)m(y)i +(the)f Fs(FIGNORE)f Ft(shell)h(v)-5 b(ariable)44 b(cause)1110 +518 y(w)m(ords)31 b(to)h(b)s(e)f(ignored)h(when)f(p)s(erforming)f(w)m +(ord)h(completion)i(ev)m(en)f(if)g(the)1110 628 y(ignored)37 +b(w)m(ords)g(are)g(the)h(only)f(p)s(ossible)g(completions.)62 +b(See)37 b(Section)h(5.2)1110 737 y([Bash)24 b(V)-8 b(ariables],)27 +b(page)e(55,)h(for)d(a)h(description)g(of)g Fs(FIGNORE)p +Ft(.)37 b(This)22 b(option)1110 847 y(is)30 b(enabled)h(b)m(y)f (default.)630 1011 y Fs(gnu_errfmt)1110 1121 y Ft(If)35 -b(set,)j(shell)c(error)i(messages)g(are)h(written)d(in)h(the)h +b(set,)j(shell)e(error)g(messages)g(are)h(written)e(in)h(the)g (standard)f Fl(gnu)g Ft(error)1110 1230 y(message)c(format.)630 -1395 y Fs(histappend)1110 1504 y Ft(If)c(set,)j(the)e(history)f(list)f -(is)h(app)s(ended)f(to)j(the)f(\014le)f(named)g(b)m(y)h(the)g(v)-5 -b(alue)28 b(of)1110 1614 y(the)e Fs(HISTFILE)d Ft(v)-5 -b(ariable)24 b(when)g(the)h(shell)f(exits,)i(rather)f(than)h(o)m(v)m +1395 y Fs(histappend)1110 1504 y Ft(If)c(set,)j(the)e(history)g(list)g +(is)g(app)s(ended)e(to)j(the)f(\014le)g(named)f(b)m(y)h(the)g(v)-5 +b(alue)29 b(of)1110 1614 y(the)d Fs(HISTFILE)d Ft(v)-5 +b(ariable)26 b(when)e(the)h(shell)h(exits,)h(rather)e(than)h(o)m(v)m (erwriting)1110 1724 y(the)31 b(\014le.)630 1888 y Fs(histreedit)1110 -1998 y Ft(If)i(set,)h(and)f(Readline)f(is)g(b)s(eing)g(used,)h(a)g -(user)g(is)f(giv)m(en)h(the)h(opp)s(ortunit)m(y)1110 -2107 y(to)d(re-edit)f(a)h(failed)e(history)g(substitution.)630 -2271 y Fs(histverify)1110 2381 y Ft(If)35 b(set,)i(and)e(Readline)f(is) -g(b)s(eing)g(used,)i(the)f(results)f(of)h(history)g(substitu-)1110 -2491 y(tion)h(are)h(not)g(immediately)e(passed)h(to)h(the)g(shell)e -(parser.)59 b(Instead,)38 b(the)1110 2600 y(resulting)g(line)f(is)i -(loaded)g(in)m(to)g(the)h(Readline)e(editing)g(bu\013er,)j(allo)m(wing) +1998 y Ft(If)i(set,)h(and)f(Readline)h(is)f(b)s(eing)g(used,)g(a)g +(user)g(is)g(giv)m(en)h(the)g(opp)s(ortunit)m(y)1110 +2107 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630 +2271 y Fs(histverify)1110 2381 y Ft(If)35 b(set,)i(and)e(Readline)h(is) +f(b)s(eing)g(used,)h(the)f(results)g(of)g(history)h(substitu-)1110 +2491 y(tion)h(are)g(not)g(immediately)h(passed)e(to)h(the)g(shell)g +(parser.)59 b(Instead,)38 b(the)1110 2600 y(resulting)i(line)f(is)h +(loaded)g(in)m(to)g(the)g(Readline)g(editing)g(bu\013er,)h(allo)m(wing) 1110 2710 y(further)29 b(mo)s(di\014cation.)630 2874 -y Fs(hostcomplete)1110 2984 y Ft(If)38 b(set,)j(and)c(Readline)g(is)g -(b)s(eing)g(used,)i(Bash)g(will)c(attempt)k(to)g(p)s(erform)1110 -3093 y(hostname)d(completion)f(when)g(a)h(w)m(ord)f(con)m(taining)g(a)h -(`)p Fs(@)p Ft(')g(is)f(b)s(eing)f(com-)1110 3203 y(pleted)40 -b(\(see)h(Section)f(8.4.6)i([Commands)e(F)-8 b(or)41 -b(Completion],)g(page)g(99\).)1110 3313 y(This)29 b(option)g(is)h -(enabled)f(b)m(y)h(default.)630 3477 y Fs(huponexit)1110 -3587 y Ft(If)i(set,)i(Bash)f(will)e(send)g Fs(SIGHUP)h -Ft(to)h(all)f(jobs)g(when)g(an)g(in)m(teractiv)m(e)i(login)1110 -3696 y(shell)29 b(exits)h(\(see)h(Section)f(3.7.6)i([Signals],)e(page)h +y Fs(hostcomplete)1110 2984 y Ft(If)38 b(set,)j(and)c(Readline)i(is)f +(b)s(eing)g(used,)h(Bash)g(will)f(attempt)h(to)g(p)s(erform)1110 +3093 y(hostname)d(completion)h(when)e(a)h(w)m(ord)f(con)m(taining)i(a)f +(`)p Fs(@)p Ft(')g(is)g(b)s(eing)f(com-)1110 3203 y(pleted)41 +b(\(see)g(Section)g(8.4.6)h([Commands)e(F)-8 b(or)41 +b(Completion],)i(page)e(99\).)1110 3313 y(This)30 b(option)g(is)h +(enabled)f(b)m(y)g(default.)630 3477 y Fs(huponexit)1110 +3587 y Ft(If)i(set,)i(Bash)f(will)h(send)d Fs(SIGHUP)h +Ft(to)h(all)h(jobs)e(when)g(an)g(in)m(teractiv)m(e)k(login)1110 +3696 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g(page)f (31\).)630 3861 y Fs(interactive_comments)1110 3970 y -Ft(Allo)m(w)25 b(a)i(w)m(ord)e(b)s(eginning)e(with)i(`)p -Fs(#)p Ft(')h(to)h(cause)f(that)h(w)m(ord)f(and)f(all)g(remain-)1110 -4080 y(ing)40 b(c)m(haracters)j(on)e(that)h(line)e(to)i(b)s(e)f -(ignored)f(in)g(an)h(in)m(teractiv)m(e)h(shell.)1110 -4189 y(This)29 b(option)g(is)h(enabled)f(b)m(y)h(default.)630 -4354 y Fs(lithist)144 b Ft(If)22 b(enabled,)h(and)e(the)h -Fs(cmdhist)e Ft(option)i(is)f(enabled,)i(m)m(ulti-line)c(commands)1110 -4463 y(are)28 b(sa)m(v)m(ed)h(to)g(the)f(history)f(with)f(em)m(b)s -(edded)h(newlines)f(rather)i(than)f(using)1110 4573 y(semicolon)j -(separators)h(where)e(p)s(ossible.)630 4737 y Fs(login_shell)1110 -4847 y Ft(The)35 b(shell)f(sets)i(this)e(option)h(if)g(it)g(is)f -(started)i(as)g(a)g(login)e(shell)g(\(see)i(Sec-)1110 -4956 y(tion)28 b(6.1)h([In)m(v)m(oking)g(Bash],)g(page)g(63\).)41 -b(The)28 b(v)-5 b(alue)28 b(ma)m(y)h(not)f(b)s(e)g(c)m(hanged.)630 -5121 y Fs(mailwarn)96 b Ft(If)34 b(set,)i(and)e(a)h(\014le)f(that)h -(Bash)f(is)g(c)m(hec)m(king)h(for)g(mail)e(has)h(b)s(een)g(accessed) -1110 5230 y(since)23 b(the)i(last)f(time)f(it)h(w)m(as)g(c)m(hec)m(k)m +Ft(Allo)m(w)c(a)g(w)m(ord)e(b)s(eginning)g(with)h(`)p +Fs(#)p Ft(')g(to)h(cause)f(that)h(w)m(ord)f(and)f(all)i(remain-)1110 +4080 y(ing)41 b(c)m(haracters)i(on)e(that)h(line)g(to)g(b)s(e)f +(ignored)g(in)g(an)g(in)m(teractiv)m(e)j(shell.)1110 +4189 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)630 +4354 y Fs(lithist)144 b Ft(If)22 b(enabled,)i(and)d(the)h +Fs(cmdhist)e Ft(option)j(is)f(enabled,)i(m)m(ulti-line)f(commands)1110 +4463 y(are)28 b(sa)m(v)m(ed)h(to)g(the)f(history)g(with)f(em)m(b)s +(edded)g(newlines)h(rather)g(than)f(using)1110 4573 y(semicolon)32 +b(separators)f(where)e(p)s(ossible.)630 4737 y Fs(login_shell)1110 +4847 y Ft(The)35 b(shell)h(sets)g(this)f(option)h(if)g(it)g(is)f +(started)h(as)g(a)g(login)g(shell)g(\(see)g(Sec-)1110 +4956 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g(63\).)41 +b(The)28 b(v)-5 b(alue)29 b(ma)m(y)g(not)f(b)s(e)g(c)m(hanged.)630 +5121 y Fs(mailwarn)96 b Ft(If)34 b(set,)i(and)e(a)h(\014le)g(that)g +(Bash)f(is)h(c)m(hec)m(king)h(for)f(mail)g(has)f(b)s(een)g(accessed) +1110 5230 y(since)24 b(the)h(last)g(time)f(it)h(w)m(as)f(c)m(hec)m(k)m (ed,)k(the)c(message)h Fs("The)k(mail)h(in)f Fj(mail-)1110 -5340 y(file)40 b Fs(has)29 b(been)g(read")g Ft(is)h(displa)m(y)m(ed.)p -eop +5340 y(file)40 b Fs(has)29 b(been)g(read")g Ft(is)i(displa)m(y)m(ed.)p +eop end %%Page: 48 54 -48 53 bop 150 -116 a Ft(48)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y Fs(no_empty_cmd_completion)1110 408 y Ft(If)f(set,)g(and)g -(Readline)e(is)i(b)s(eing)e(used,)i(Bash)g(will)d(not)j(attempt)i(to)e -(searc)m(h)1110 518 y(the)25 b Fs(PATH)f Ft(for)h(p)s(ossible)d -(completions)j(when)f(completion)g(is)g(attempted)i(on)1110 -628 y(an)k(empt)m(y)h(line.)630 779 y Fs(nocaseglob)1110 -889 y Ft(If)38 b(set,)k(Bash)d(matc)m(hes)g(\014lenames)f(in)f(a)i -(case-insensitiv)m(e)g(fashion)e(when)1110 999 y(p)s(erforming)28 -b(\014lename)i(expansion.)630 1150 y Fs(nullglob)96 b -Ft(If)23 b(set,)j(Bash)e(allo)m(ws)e(\014lename)h(patterns)h(whic)m(h)e -(matc)m(h)i(no)g(\014les)e(to)j(expand)1110 1260 y(to)31 -b(a)g(n)m(ull)d(string,)i(rather)g(than)g(themselv)m(es.)630 -1412 y Fs(progcomp)96 b Ft(If)25 b(set,)i(the)f(programmable)f -(completion)f(facilities)g(\(see)j(Section)e(8.6)i([Pro-)1110 -1521 y(grammable)44 b(Completion],)j(page)e(103\))h(are)f(enabled.)81 -b(This)43 b(option)h(is)1110 1631 y(enabled)29 b(b)m(y)i(default.)630 -1783 y Fs(promptvars)1110 1892 y Ft(If)24 b(set,)i(prompt)d(strings)g -(undergo)g(parameter)i(expansion,)f(command)g(sub-)1110 -2002 y(stitution,)32 b(arithmetic)f(expansion,)h(and)f(quote)i(remo)m -(v)-5 b(al)32 b(after)h(b)s(eing)d(ex-)1110 2111 y(panded)39 -b(as)i(describ)s(ed)d(b)s(elo)m(w)i(\(see)h(Section)f(6.9)h([Prin)m -(ting)e(a)i(Prompt],)1110 2221 y(page)31 b(75\).)42 b(This)29 -b(option)g(is)h(enabled)f(b)m(y)h(default.)630 2373 y -Fs(restricted_shell)1110 2482 y Ft(The)40 b(shell)f(sets)i(this)f -(option)g(if)g(it)h(is)e(started)j(in)d(restricted)i(mo)s(de)f(\(see) -1110 2592 y(Section)35 b(6.10)h([The)f(Restricted)f(Shell],)h(page)g -(76\).)56 b(The)34 b(v)-5 b(alue)34 b(ma)m(y)i(not)1110 -2701 y(b)s(e)c(c)m(hanged.)49 b(This)31 b(is)h(not)i(reset)f(when)f -(the)h(startup)g(\014les)e(are)j(executed,)1110 2811 -y(allo)m(wing)h(the)h(startup)f(\014les)g(to)h(disco)m(v)m(er)g -(whether)g(or)f(not)i(a)f(shell)e(is)h(re-)1110 2921 -y(stricted.)630 3072 y Fs(shift_verbose)1110 3182 y Ft(If)h(this)f(is)g -(set,)k(the)d Fs(shift)f Ft(builtin)e(prin)m(ts)h(an)i(error)g(message) -i(when)d(the)1110 3292 y(shift)29 b(coun)m(t)i(exceeds)g(the)g(n)m(um)m -(b)s(er)e(of)h(p)s(ositional)f(parameters.)630 3443 y +TeXDict begin 48 53 bop 150 -116 a Ft(48)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(no_empty_cmd_completion)1110 +408 y Ft(If)f(set,)g(and)g(Readline)g(is)h(b)s(eing)e(used,)h(Bash)g +(will)g(not)g(attempt)i(to)e(searc)m(h)1110 518 y(the)25 +b Fs(PATH)f Ft(for)h(p)s(ossible)f(completions)j(when)d(completion)i +(is)f(attempted)h(on)1110 628 y(an)k(empt)m(y)h(line.)630 +779 y Fs(nocaseglob)1110 889 y Ft(If)38 b(set,)k(Bash)d(matc)m(hes)g +(\014lenames)g(in)f(a)h(case-insensitiv)m(e)j(fashion)c(when)1110 +999 y(p)s(erforming)29 b(\014lename)i(expansion.)630 +1150 y Fs(nullglob)96 b Ft(If)23 b(set,)j(Bash)e(allo)m(ws)g +(\014lename)g(patterns)g(whic)m(h)f(matc)m(h)h(no)g(\014les)f(to)i +(expand)1110 1260 y(to)31 b(a)g(n)m(ull)f(string,)h(rather)f(than)g +(themselv)m(es.)630 1412 y Fs(progcomp)96 b Ft(If)25 +b(set,)i(the)f(programmable)g(completion)g(facilities)i(\(see)f +(Section)f(8.6)h([Pro-)1110 1521 y(grammable)45 b(Completion],)k(page)c +(103\))h(are)f(enabled.)82 b(This)44 b(option)h(is)1110 +1631 y(enabled)30 b(b)m(y)h(default.)630 1783 y Fs(promptvars)1110 +1892 y Ft(If)24 b(set,)i(prompt)d(strings)h(undergo)f(parameter)i +(expansion,)g(command)f(sub-)1110 2002 y(stitution,)34 +b(arithmetic)f(expansion,)g(and)e(quote)i(remo)m(v)-5 +b(al)33 b(after)g(b)s(eing)e(ex-)1110 2111 y(panded)39 +b(as)i(describ)s(ed)e(b)s(elo)m(w)i(\(see)g(Section)g(6.9)g([Prin)m +(ting)g(a)g(Prompt],)1110 2221 y(page)31 b(75\).)42 b(This)30 +b(option)g(is)h(enabled)f(b)m(y)g(default.)630 2373 y +Fs(restricted_shell)1110 2482 y Ft(The)40 b(shell)h(sets)g(this)g +(option)g(if)g(it)h(is)e(started)i(in)e(restricted)i(mo)s(de)e(\(see) +1110 2592 y(Section)c(6.10)g([The)f(Restricted)g(Shell],)i(page)e +(76\).)56 b(The)34 b(v)-5 b(alue)35 b(ma)m(y)h(not)1110 +2701 y(b)s(e)c(c)m(hanged.)49 b(This)32 b(is)h(not)h(reset)f(when)f +(the)h(startup)g(\014les)f(are)i(executed,)1110 2811 +y(allo)m(wing)k(the)e(startup)f(\014les)h(to)g(disco)m(v)m(er)h +(whether)f(or)f(not)i(a)f(shell)g(is)g(re-)1110 2921 +y(stricted.)630 3072 y Fs(shift_verbose)1110 3182 y Ft(If)g(this)g(is)g +(set,)j(the)d Fs(shift)f Ft(builtin)h(prin)m(ts)f(an)h(error)g(message) +i(when)d(the)1110 3292 y(shift)30 b(coun)m(t)h(exceeds)g(the)g(n)m(um)m +(b)s(er)e(of)h(p)s(ositional)i(parameters.)630 3443 y Fs(sourcepath)1110 3553 y Ft(If)22 b(set,)j(the)e Fs(source)e -Ft(builtin)e(uses)j(the)h(v)-5 b(alue)22 b(of)h Fs(PATH)e -Ft(to)j(\014nd)d(the)h(directory)1110 3662 y(con)m(taining)27 -b(the)g(\014le)g(supplied)d(as)j(an)g(argumen)m(t.)40 -b(This)26 b(option)h(is)f(enabled)1110 3772 y(b)m(y)k(default.)630 +Ft(builtin)h(uses)g(the)h(v)-5 b(alue)23 b(of)g Fs(PATH)e +Ft(to)j(\014nd)d(the)h(directory)1110 3662 y(con)m(taining)29 +b(the)e(\014le)h(supplied)e(as)h(an)g(argumen)m(t.)40 +b(This)27 b(option)h(is)f(enabled)1110 3772 y(b)m(y)j(default.)630 3924 y Fs(xpg_echo)96 b Ft(If)31 b(set,)h(the)g Fs(echo)e -Ft(builtin)e(expands)i(bac)m(kslash-escap)s(e)i(sequences)g(b)m(y)f +Ft(builtin)h(expands)f(bac)m(kslash-escap)s(e)j(sequences)f(b)m(y)f (de-)1110 4033 y(fault.)630 4185 y(The)c(return)f(status)i(when)f -(listing)e(options)i(is)f(zero)j(if)d(all)h Fq(optnames)k -Ft(are)d(enabled,)f(non-)630 4295 y(zero)40 b(otherwise.)65 -b(When)39 b(setting)g(or)g(unsetting)f(options,)i(the)f(return)f -(status)h(is)f(zero)630 4404 y(unless)29 b(an)h Fq(optname)36 -b Ft(is)29 b(not)i(a)g(v)-5 b(alid)28 b(shell)h(option.)150 +(listing)h(options)g(is)f(zero)i(if)e(all)i Fq(optnames)i +Ft(are)d(enabled,)g(non-)630 4295 y(zero)40 b(otherwise.)66 +b(When)39 b(setting)h(or)f(unsetting)g(options,)i(the)e(return)f +(status)h(is)g(zero)630 4404 y(unless)30 b(an)g Fq(optname)36 +b Ft(is)30 b(not)h(a)g(v)-5 b(alid)30 b(shell)h(option.)150 4556 y Fs(source)870 4687 y(source)46 b Fj(filename)630 -4817 y Ft(A)30 b(synon)m(ym)g(for)g Fs(.)g Ft(\(see)i(Section)e(4.1)h -([Bourne)g(Shell)d(Builtins],)g(page)j(33\).)150 4969 +4817 y Ft(A)30 b(synon)m(ym)g(for)g Fs(.)g Ft(\(see)i(Section)f(4.1)g +([Bourne)g(Shell)f(Builtins],)h(page)g(33\).)150 4969 y Fs(type)870 5100 y(type)47 b([-afptP])e([)p Fj(name)57 b Fs(...)o(])630 5230 y Ft(F)-8 b(or)42 b(eac)m(h)g Fq(name)p -Ft(,)i(indicate)c(ho)m(w)i(it)e(w)m(ould)g(b)s(e)h(in)m(terpreted)f(if) -g(used)g(as)i(a)f(command)630 5340 y(name.)p eop +Ft(,)i(indicate)e(ho)m(w)g(it)f(w)m(ould)g(b)s(e)g(in)m(terpreted)g(if) +g(used)f(as)i(a)f(command)630 5340 y(name.)p eop end %%Page: 49 55 -49 54 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(49)630 299 y(If)38 b(the)g(`)p -Fs(-t)p Ft(')g(option)f(is)g(used,)j Fs(type)d Ft(prin)m(ts)f(a)j -(single)d(w)m(ord)i(whic)m(h)f(is)g(one)h(of)h(`)p Fs(alias)p -Ft(',)630 408 y(`)p Fs(function)p Ft(',)32 b(`)p Fs(builtin)p -Ft(',)g(`)p Fs(file)p Ft(')g(or)h(`)p Fs(keyword)p Ft(',)f(if)g -Fq(name)38 b Ft(is)32 b(an)g(alias,)h(shell)e(function,)630 -518 y(shell)i(builtin,)f(disk)i(\014le,)h(or)f(shell)f(reserv)m(ed)i(w) -m(ord,)h(resp)s(ectiv)m(ely)-8 b(.)53 b(If)34 b(the)h -Fq(name)40 b Ft(is)34 b(not)630 628 y(found,)29 b(then)h(nothing)g(is)f -(prin)m(ted,)g(and)h Fs(type)f Ft(returns)g(a)i(failure)e(status.)630 -763 y(If)39 b(the)g(`)p Fs(-p)p Ft(')g(option)g(is)f(used,)j -Fs(type)d Ft(either)g(returns)g(the)i(name)f(of)g(the)g(disk)f(\014le)g -(that)630 873 y(w)m(ould)29 b(b)s(e)h(executed,)h(or)g(nothing)e(if)g -(`)p Fs(-t)p Ft(')i(w)m(ould)e(not)h(return)g(`)p Fs(file)p -Ft('.)630 1008 y(The)23 b(`)p Fs(-P)p Ft(')h(option)f(forces)h(a)g -(path)g(searc)m(h)g(for)g(eac)m(h)g Fq(name)p Ft(,)i(ev)m(en)e(if)f(`)p -Fs(-t)p Ft(')h(w)m(ould)e(not)i(return)630 1118 y(`)p -Fs(file)p Ft('.)630 1253 y(If)34 b(a)i(command)e(is)g(hashed,)h(`)p -Fs(-p)p Ft(')g(and)f(`)p Fs(-P)p Ft(')h(prin)m(t)e(the)i(hashed)f(v)-5 -b(alue,)36 b(not)f(necessarily)630 1363 y(the)c(\014le)e(that)i(app)s -(ears)f(\014rst)f(in)g Fs($PATH)p Ft(.)630 1499 y(If)36 -b(the)h(`)p Fs(-a)p Ft(')g(option)f(is)g(used,)h Fs(type)f -Ft(returns)f(all)h(of)h(the)g(places)f(that)h(con)m(tain)g(an)g(exe-) -630 1608 y(cutable)c(named)g Fq(\014le)p Ft(.)49 b(This)32 -b(includes)f(aliases)i(and)g(functions,)g(if)f(and)h(only)g(if)f(the)i -(`)p Fs(-p)p Ft(')630 1718 y(option)c(is)f(not)i(also)f(used.)630 -1853 y(If)c(the)h(`)p Fs(-f)p Ft(')g(option)f(is)g(used,)h -Fs(type)e Ft(do)s(es)i(not)g(attempt)g(to)h(\014nd)d(shell)g -(functions,)h(as)h(with)630 1963 y(the)k Fs(command)d -Ft(builtin.)630 2098 y(The)35 b(return)g(status)h(is)f(zero)h(if)f(an)m -(y)h(of)g(the)g Fq(names)k Ft(are)c(found,)g(non-zero)g(if)f(none)h +TeXDict begin 49 54 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(49)630 299 y(If)38 +b(the)g(`)p Fs(-t)p Ft(')g(option)g(is)g(used,)i Fs(type)d +Ft(prin)m(ts)g(a)i(single)f(w)m(ord)g(whic)m(h)g(is)g(one)g(of)h(`)p +Fs(alias)p Ft(',)630 408 y(`)p Fs(function)p Ft(',)32 +b(`)p Fs(builtin)p Ft(',)g(`)p Fs(file)p Ft(')g(or)h(`)p +Fs(keyword)p Ft(',)f(if)h Fq(name)38 b Ft(is)33 b(an)f(alias,)j(shell)e +(function,)630 518 y(shell)i(builtin,)g(disk)g(\014le,)h(or)e(shell)h +(reserv)m(ed)g(w)m(ord,)h(resp)s(ectiv)m(ely)-8 b(.)55 +b(If)34 b(the)h Fq(name)40 b Ft(is)35 b(not)630 628 y(found,)29 +b(then)h(nothing)h(is)f(prin)m(ted,)g(and)g Fs(type)f +Ft(returns)g(a)i(failure)g(status.)630 763 y(If)39 b(the)g(`)p +Fs(-p)p Ft(')g(option)h(is)f(used,)i Fs(type)d Ft(either)h(returns)f +(the)i(name)f(of)g(the)g(disk)g(\014le)g(that)630 873 +y(w)m(ould)30 b(b)s(e)g(executed,)h(or)g(nothing)f(if)g(`)p +Fs(-t)p Ft(')h(w)m(ould)f(not)g(return)g(`)p Fs(file)p +Ft('.)630 1008 y(The)23 b(`)p Fs(-P)p Ft(')h(option)g(forces)g(a)g +(path)g(searc)m(h)g(for)g(eac)m(h)g Fq(name)p Ft(,)i(ev)m(en)e(if)g(`)p +Fs(-t)p Ft(')g(w)m(ould)f(not)h(return)630 1118 y(`)p +Fs(file)p Ft('.)630 1253 y(If)34 b(a)i(command)e(is)h(hashed,)g(`)p +Fs(-p)p Ft(')g(and)f(`)p Fs(-P)p Ft(')h(prin)m(t)f(the)h(hashed)f(v)-5 +b(alue,)37 b(not)e(necessarily)630 1363 y(the)c(\014le)f(that)h(app)s +(ears)f(\014rst)f(in)h Fs($PATH)p Ft(.)630 1499 y(If)36 +b(the)h(`)p Fs(-a)p Ft(')g(option)g(is)g(used,)g Fs(type)f +Ft(returns)f(all)j(of)f(the)g(places)g(that)g(con)m(tain)h(an)f(exe-) +630 1608 y(cutable)d(named)f Fq(\014le)p Ft(.)50 b(This)33 +b(includes)g(aliases)i(and)e(functions,)h(if)f(and)g(only)h(if)f(the)h +(`)p Fs(-p)p Ft(')630 1718 y(option)d(is)f(not)h(also)g(used.)630 +1853 y(If)26 b(the)h(`)p Fs(-f)p Ft(')g(option)g(is)g(used,)g +Fs(type)e Ft(do)s(es)i(not)g(attempt)g(to)h(\014nd)d(shell)i +(functions,)g(as)g(with)630 1963 y(the)k Fs(command)d +Ft(builtin.)630 2098 y(The)35 b(return)g(status)h(is)g(zero)g(if)g(an)m +(y)g(of)g(the)g Fq(names)k Ft(are)c(found,)g(non-zero)g(if)g(none)g (are)630 2208 y(found.)150 2370 y Fs(typeset)870 2505 y(typeset)46 b([-afFrxi])f([-p])i([)p Fj(name)11 b Fs([=)p Fj(value)g Fs(])43 b(...)o(])630 2641 y Ft(The)29 b Fs(typeset)f -Ft(command)h(is)f(supplied)f(for)i(compatibilit)m(y)f(with)g(the)i -(Korn)e(shell;)h(ho)m(w-)630 2750 y(ev)m(er,)i(it)f(has)g(b)s(een)g -(deprecated)h(in)e(fa)m(v)m(or)j(of)e(the)h Fs(declare)d -Ft(builtin)f(command.)150 2912 y Fs(ulimit)870 3047 y(ulimit)46 +Ft(command)h(is)g(supplied)g(for)g(compatibilit)m(y)j(with)d(the)h +(Korn)e(shell;)j(ho)m(w-)630 2750 y(ev)m(er,)g(it)g(has)f(b)s(een)g +(deprecated)h(in)f(fa)m(v)m(or)i(of)e(the)h Fs(declare)d +Ft(builtin)i(command.)150 2912 y Fs(ulimit)870 3047 y(ulimit)46 b([-acdflmnpstuvSH])d([)p Fj(limit)11 b Fs(])630 3183 -y(ulimit)25 b Ft(pro)m(vides)g(con)m(trol)i(o)m(v)m(er)h(the)f -(resources)f(a)m(v)-5 b(ailable)26 b(to)h(pro)s(cesses)f(started)h(b)m -(y)g(the)630 3292 y(shell,)g(on)h(systems)g(that)h(allo)m(w)f(suc)m(h)g -(con)m(trol.)40 b(If)28 b(an)g(option)g(is)f(giv)m(en,)i(it)e(is)h(in)m -(terpreted)630 3402 y(as)j(follo)m(ws:)630 3563 y Fs(-S)384 -b Ft(Change)30 b(and)g(rep)s(ort)g(the)g(soft)h(limit)d(asso)s(ciated)j -(with)e(a)i(resource.)630 3725 y Fs(-H)384 b Ft(Change)30 -b(and)g(rep)s(ort)g(the)g(hard)g(limit)e(asso)s(ciated)j(with)e(a)i -(resource.)630 3886 y Fs(-a)384 b Ft(All)29 b(curren)m(t)h(limits)e -(are)j(rep)s(orted.)630 4048 y Fs(-c)384 b Ft(The)30 -b(maxim)m(um)f(size)h(of)h(core)g(\014les)e(created.)630 -4209 y Fs(-d)384 b Ft(The)30 b(maxim)m(um)f(size)h(of)h(a)g(pro)s +y(ulimit)25 b Ft(pro)m(vides)h(con)m(trol)i(o)m(v)m(er)g(the)f +(resources)f(a)m(v)-5 b(ailable)29 b(to)e(pro)s(cesses)f(started)h(b)m +(y)g(the)630 3292 y(shell,)i(on)f(systems)g(that)h(allo)m(w)h(suc)m(h)e +(con)m(trol.)41 b(If)28 b(an)g(option)h(is)f(giv)m(en,)i(it)e(is)h(in)m +(terpreted)630 3402 y(as)i(follo)m(ws:)630 3563 y Fs(-S)384 +b Ft(Change)30 b(and)g(rep)s(ort)g(the)g(soft)h(limit)g(asso)s(ciated)h +(with)e(a)h(resource.)630 3725 y Fs(-H)384 b Ft(Change)30 +b(and)g(rep)s(ort)g(the)g(hard)g(limit)h(asso)s(ciated)h(with)e(a)h +(resource.)630 3886 y Fs(-a)384 b Ft(All)31 b(curren)m(t)f(limits)h +(are)g(rep)s(orted.)630 4048 y Fs(-c)384 b Ft(The)30 +b(maxim)m(um)g(size)h(of)g(core)g(\014les)f(created.)630 +4209 y Fs(-d)384 b Ft(The)30 b(maxim)m(um)g(size)h(of)g(a)g(pro)s (cess's)f(data)h(segmen)m(t.)630 4371 y Fs(-f)384 b Ft(The)30 -b(maxim)m(um)f(size)h(of)h(\014les)e(created)j(b)m(y)e(the)g(shell.)630 -4532 y Fs(-l)384 b Ft(The)30 b(maxim)m(um)f(size)h(that)h(ma)m(y)g(b)s -(e)f(lo)s(c)m(k)m(ed)h(in)m(to)f(memory)-8 b(.)630 4694 -y Fs(-m)384 b Ft(The)30 b(maxim)m(um)f(residen)m(t)h(set)h(size.)630 -4855 y Fs(-n)384 b Ft(The)30 b(maxim)m(um)f(n)m(um)m(b)s(er)g(of)i(op)s -(en)e(\014le)h(descriptors.)630 5017 y Fs(-p)384 b Ft(The)30 -b(pip)s(e)e(bu\013er)i(size.)630 5178 y Fs(-s)384 b Ft(The)30 -b(maxim)m(um)f(stac)m(k)j(size.)630 5340 y Fs(-t)384 -b Ft(The)30 b(maxim)m(um)f(amoun)m(t)i(of)f(cpu)g(time)g(in)f(seconds.) -p eop +b(maxim)m(um)g(size)h(of)g(\014les)f(created)i(b)m(y)e(the)g(shell.)630 +4532 y Fs(-l)384 b Ft(The)30 b(maxim)m(um)g(size)h(that)g(ma)m(y)g(b)s +(e)f(lo)s(c)m(k)m(ed)i(in)m(to)f(memory)-8 b(.)630 4694 +y Fs(-m)384 b Ft(The)30 b(maxim)m(um)g(residen)m(t)h(set)g(size.)630 +4855 y Fs(-n)384 b Ft(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(op)s +(en)e(\014le)i(descriptors.)630 5017 y Fs(-p)384 b Ft(The)30 +b(pip)s(e)f(bu\013er)h(size.)630 5178 y Fs(-s)384 b Ft(The)30 +b(maxim)m(um)g(stac)m(k)i(size.)630 5340 y Fs(-t)384 +b Ft(The)30 b(maxim)m(um)g(amoun)m(t)h(of)f(cpu)g(time)h(in)f(seconds.) +p eop end %%Page: 50 56 -50 55 bop 150 -116 a Ft(50)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y Fs(-u)384 b Ft(The)30 b(maxim)m(um)f(n)m(um)m(b)s(er)g(of)i(pro)s -(cesses)f(a)m(v)-5 b(ailable)30 b(to)h(a)f(single)g(user.)630 -458 y Fs(-v)384 b Ft(The)29 b(maxim)m(um)g(amoun)m(t)h(of)g(virtual)e -(memory)i(a)m(v)-5 b(ailable)29 b(to)h(the)g(pro)s(cess.)630 -617 y(If)j Fq(limit)g Ft(is)g(giv)m(en,)h(it)f(is)g(the)h(new)f(v)-5 -b(alue)33 b(of)g(the)h(sp)s(eci\014ed)e(resource;)j(the)f(sp)s(ecial)e -Fq(limit)630 727 y Ft(v)-5 b(alues)26 b Fs(hard)p Ft(,)h +TeXDict begin 50 55 bop 150 -116 a Ft(50)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(-u)384 b Ft(The)30 +b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(pro)s(cesses)f(a)m(v)-5 +b(ailable)33 b(to)e(a)f(single)i(user.)630 458 y Fs(-v)384 +b Ft(The)29 b(maxim)m(um)h(amoun)m(t)g(of)g(virtual)g(memory)g(a)m(v)-5 +b(ailable)32 b(to)e(the)g(pro)s(cess.)630 617 y(If)j +Fq(limit)j Ft(is)e(giv)m(en,)h(it)f(is)g(the)g(new)f(v)-5 +b(alue)34 b(of)f(the)h(sp)s(eci\014ed)f(resource;)i(the)f(sp)s(ecial)g +Fq(limit)630 727 y Ft(v)-5 b(alues)27 b Fs(hard)p Ft(,)g Fs(soft)p Ft(,)g(and)g Fs(unlimited)d Ft(stand)j(for)g(the)g(curren)m -(t)g(hard)f(limit,)g(the)h(curren)m(t)630 836 y(soft)35 -b(limit,)f(and)h(no)f(limit,)g(resp)s(ectiv)m(ely)-8 -b(.)54 b(Otherwise,)35 b(the)g(curren)m(t)g(v)-5 b(alue)34 -b(of)h(the)h(soft)630 946 y(limit)i(for)i(the)h(sp)s(eci\014ed)e -(resource)i(is)e(prin)m(ted,)j(unless)d(the)h(`)p Fs(-H)p -Ft(')h(option)e(is)h(supplied.)630 1056 y(When)29 b(setting)g(new)f -(limits,)f(if)h(neither)g(`)p Fs(-H)p Ft(')g(nor)h(`)p -Fs(-S)p Ft(')f(is)g(supplied,)f(b)s(oth)h(the)h(hard)f(and)630 -1165 y(soft)37 b(limits)d(are)j(set.)60 b(If)36 b(no)g(option)g(is)g -(giv)m(en,)i(then)e(`)p Fs(-f)p Ft(')h(is)e(assumed.)59 -b(V)-8 b(alues)36 b(are)h(in)630 1275 y(1024-b)m(yte)27 -b(incremen)m(ts,)f(except)f(for)f(`)p Fs(-t)p Ft(',)i(whic)m(h)d(is)h -(in)f(seconds,)j(`)p Fs(-p)p Ft(',)g(whic)m(h)d(is)g(in)h(units)630 -1384 y(of)31 b(512-b)m(yte)h(blo)s(c)m(ks,)e(and)g(`)p -Fs(-n)p Ft(')g(and)g(`)p Fs(-u)p Ft(',)h(whic)m(h)e(are)h(unscaled)g(v) --5 b(alues.)630 1519 y(The)34 b(return)g(status)h(is)e(zero)j(unless)d -(an)h(in)m(v)-5 b(alid)33 b(option)h(or)g(argumen)m(t)i(is)d(supplied,) -g(or)630 1628 y(an)d(error)g(o)s(ccurs)g(while)f(setting)h(a)h(new)f +(t)g(hard)f(limit,)j(the)e(curren)m(t)630 836 y(soft)35 +b(limit,)i(and)e(no)f(limit,)j(resp)s(ectiv)m(ely)-8 +b(.)56 b(Otherwise,)36 b(the)f(curren)m(t)g(v)-5 b(alue)35 +b(of)g(the)h(soft)630 946 y(limit)41 b(for)f(the)h(sp)s(eci\014ed)f +(resource)h(is)f(prin)m(ted,)j(unless)d(the)g(`)p Fs(-H)p +Ft(')h(option)f(is)h(supplied.)630 1056 y(When)29 b(setting)h(new)e +(limits,)i(if)f(neither)g(`)p Fs(-H)p Ft(')f(nor)h(`)p +Fs(-S)p Ft(')f(is)h(supplied,)g(b)s(oth)f(the)h(hard)f(and)630 +1165 y(soft)37 b(limits)g(are)g(set.)60 b(If)36 b(no)g(option)h(is)g +(giv)m(en,)i(then)d(`)p Fs(-f)p Ft(')h(is)f(assumed.)59 +b(V)-8 b(alues)37 b(are)g(in)630 1275 y(1024-b)m(yte)27 +b(incremen)m(ts,)g(except)e(for)f(`)p Fs(-t)p Ft(',)i(whic)m(h)e(is)h +(in)f(seconds,)i(`)p Fs(-p)p Ft(',)g(whic)m(h)e(is)g(in)h(units)630 +1384 y(of)31 b(512-b)m(yte)h(blo)s(c)m(ks,)f(and)f(`)p +Fs(-n)p Ft(')g(and)g(`)p Fs(-u)p Ft(',)h(whic)m(h)f(are)g(unscaled)h(v) +-5 b(alues.)630 1519 y(The)34 b(return)g(status)h(is)f(zero)i(unless)e +(an)g(in)m(v)-5 b(alid)36 b(option)f(or)f(argumen)m(t)i(is)e(supplied,) +h(or)630 1628 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f (limit.)150 1787 y Fs(unalias)870 1922 y(unalias)46 b([-a])g([)p Fj(name)57 b Fs(...)47 b(])630 2056 y Ft(Remo)m(v)m(e)39 -b(eac)m(h)f Fq(name)k Ft(from)36 b(the)h(list)f(of)h(aliases.)59 -b(If)36 b(`)p Fs(-a)p Ft(')h(is)f(supplied,)g(all)f(aliases)i(are)630 -2166 y(remo)m(v)m(ed.)42 b(Aliases)29 b(are)i(describ)s(ed)d(in)h -(Section)i(6.6)g([Aliases],)f(page)h(71.)150 2423 y Fr(4.3)68 -b(The)45 b(Set)g(Builtin)275 2667 y Ft(This)28 b(builtin)f(is)i(so)i -(complicated)f(that)h(it)f(deserv)m(es)h(its)f(o)m(wn)g(section.)150 +b(eac)m(h)f Fq(name)k Ft(from)36 b(the)h(list)h(of)f(aliases.)61 +b(If)36 b(`)p Fs(-a)p Ft(')h(is)g(supplied,)h(all)f(aliases)i(are)630 +2166 y(remo)m(v)m(ed.)j(Aliases)31 b(are)g(describ)s(ed)e(in)h(Section) +i(6.6)f([Aliases],)h(page)f(71.)150 2423 y Fr(4.3)68 +b(The)45 b(Set)g(Builtin)275 2667 y Ft(This)29 b(builtin)h(is)g(so)h +(complicated)h(that)f(it)g(deserv)m(es)g(its)g(o)m(wn)f(section.)150 2826 y Fs(set)870 2960 y(set)47 b([--abefhkmnptuvxBCHP])42 b([-o)47 b Fj(option)11 b Fs(])45 b([)p Fj(argument)56 -b Fs(...)o(])630 3095 y Ft(If)31 b(no)h(options)g(or)f(argumen)m(ts)i -(are)f(supplied,)d Fs(set)i Ft(displa)m(ys)f(the)i(names)g(and)g(v)-5 -b(alues)31 b(of)630 3204 y(all)39 b(shell)f(v)-5 b(ariables)38 -b(and)h(functions,)i(sorted)f(according)f(to)i(the)f(curren)m(t)f(lo)s -(cale,)j(in)d(a)630 3314 y(format)31 b(that)g(ma)m(y)g(b)s(e)e(reused)h -(as)h(input.)630 3448 y(When)e(options)f(are)h(supplied,)d(they)j(set)h -(or)f(unset)f(shell)f(attributes.)40 b(Options,)28 b(if)g(sp)s(ec-)630 -3558 y(i\014ed,)h(ha)m(v)m(e)j(the)e(follo)m(wing)f(meanings:)630 -3717 y Fs(-a)384 b Ft(Mark)32 b(v)-5 b(ariables)31 b(and)g(function)g -(whic)m(h)g(are)h(mo)s(di\014ed)e(or)i(created)h(for)f(ex-)1110 -3827 y(p)s(ort)e(to)h(the)f(en)m(vironmen)m(t)g(of)h(subsequen)m(t)f -(commands.)630 3986 y Fs(-b)384 b Ft(Cause)44 b(the)h(status)g(of)f -(terminated)g(bac)m(kground)h(jobs)f(to)h(b)s(e)f(rep)s(orted)1110 -4095 y(immediately)-8 b(,)27 b(rather)g(than)f(b)s(efore)h(prin)m(ting) -e(the)i(next)g(primary)f(prompt.)630 4255 y Fs(-e)384 -b Ft(Exit)36 b(immediately)f(if)g(a)i(simple)d(command)i(\(see)i -(Section)e(3.2.1)i([Simple)1110 4364 y(Commands],)31 -b(page)i(8\))f(exits)f(with)g(a)h(non-zero)g(status,)g(unless)e(the)i -(com-)1110 4474 y(mand)f(that)h(fails)f(is)g(part)g(of)h(the)g(command) -g(list)e(immediately)g(follo)m(wing)1110 4583 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)e(an)h Fs(if)g Ft(statemen)m(t,)1110 4693 -y(part)33 b(of)h(a)g Fs(&&)f Ft(or)g Fs(||)g Ft(list,)g(or)g(if)g(the)g -(command's)h(return)e(status)i(is)e(b)s(eing)1110 4802 -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)g(set,)h(is)f(executed)i(b)s(efore)e(the)h(shell) -1110 4912 y(exits.)630 5071 y Fs(-f)384 b Ft(Disable)29 -b(\014le)h(name)g(generation)h(\(globbing\).)630 5230 -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)g(up)f(for)1110 -5340 y(execution.)41 b(This)28 b(option)i(is)g(enabled)f(b)m(y)h -(default.)p eop +b Fs(...)o(])630 3095 y Ft(If)31 b(no)h(options)h(or)e(argumen)m(ts)i +(are)f(supplied,)f Fs(set)g Ft(displa)m(ys)h(the)g(names)g(and)g(v)-5 +b(alues)32 b(of)630 3204 y(all)41 b(shell)f(v)-5 b(ariables)40 +b(and)f(functions,)j(sorted)e(according)g(to)h(the)f(curren)m(t)f(lo)s +(cale,)44 b(in)c(a)630 3314 y(format)31 b(that)g(ma)m(y)g(b)s(e)e +(reused)h(as)h(input.)630 3448 y(When)e(options)g(are)g(supplied,)f +(they)h(set)h(or)f(unset)f(shell)h(attributes.)41 b(Options,)29 +b(if)g(sp)s(ec-)630 3558 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i +(meanings:)630 3717 y Fs(-a)384 b Ft(Mark)32 b(v)-5 b(ariables)33 +b(and)e(function)h(whic)m(h)g(are)g(mo)s(di\014ed)f(or)h(created)h(for) +f(ex-)1110 3827 y(p)s(ort)e(to)h(the)f(en)m(vironmen)m(t)h(of)g +(subsequen)m(t)f(commands.)630 3986 y Fs(-b)384 b Ft(Cause)44 +b(the)h(status)g(of)f(terminated)h(bac)m(kground)g(jobs)f(to)h(b)s(e)f +(rep)s(orted)1110 4095 y(immediately)-8 b(,)30 b(rather)d(than)f(b)s +(efore)h(prin)m(ting)g(the)g(next)g(primary)g(prompt.)630 +4255 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 4364 +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 4474 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 +4583 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 +4693 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 +4802 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 4912 y(exits.)630 5071 y Fs(-f)384 +b Ft(Disable)31 b(\014le)g(name)f(generation)i(\(globbing\).)630 +5230 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 +5340 y(execution.)42 b(This)29 b(option)i(is)g(enabled)f(b)m(y)g +(default.)p eop end %%Page: 51 57 -51 56 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(51)630 299 y Fs(-k)384 b -Ft(All)32 b(argumen)m(ts)i(in)e(the)i(form)f(of)g(assignmen)m(t)g -(statemen)m(ts)j(are)d(placed)g(in)1110 408 y(the)38 -b(en)m(vironmen)m(t)f(for)h(a)g(command,)h(not)f(just)f(those)i(that)f -(precede)g(the)1110 518 y(command)30 b(name.)630 677 -y Fs(-m)384 b Ft(Job)30 b(con)m(trol)h(is)e(enabled)h(\(see)h(Chapter)f -(7)g([Job)h(Con)m(trol],)f(page)h(79\).)630 837 y Fs(-n)384 -b Ft(Read)21 b(commands)f(but)g(do)h(not)g(execute)h(them;)i(this)c(ma) -m(y)h(b)s(e)f(used)g(to)h(c)m(hec)m(k)1110 946 y(a)42 -b(script)f(for)h(syn)m(tax)g(errors.)75 b(This)40 b(option)h(is)g -(ignored)g(b)m(y)h(in)m(teractiv)m(e)1110 1056 y(shells.)630 -1215 y Fs(-o)30 b Fj(option-name)1110 1325 y Ft(Set)h(the)f(option)g -(corresp)s(onding)e(to)j Fq(option-name)5 b Ft(:)1110 -1484 y Fs(allexport)1590 1594 y Ft(Same)30 b(as)h Fs(-a)p -Ft(.)1110 1753 y Fs(braceexpand)1590 1863 y Ft(Same)f(as)h -Fs(-B)p Ft(.)1110 2022 y Fs(emacs)240 b Ft(Use)25 b(an)f -Fs(emacs)p Ft(-st)m(yle)g(line)e(editing)h(in)m(terface)i(\(see)h -(Chapter)e(8)1590 2132 y([Command)30 b(Line)f(Editing],)g(page)i(83\).) -1110 2291 y Fs(errexit)144 b Ft(Same)30 b(as)h Fs(-e)p -Ft(.)1110 2451 y Fs(errtrace)96 b Ft(Same)30 b(as)h Fs(-E)p -Ft(.)1110 2610 y Fs(functrace)1590 2720 y Ft(Same)f(as)h -Fs(-T)p Ft(.)1110 2879 y Fs(hashall)144 b Ft(Same)30 -b(as)h Fs(-h)p Ft(.)1110 3039 y Fs(histexpand)1590 3148 -y Ft(Same)f(as)h Fs(-H)p Ft(.)1110 3308 y Fs(history)144 -b Ft(Enable)38 b(command)h(history)-8 b(,)41 b(as)e(describ)s(ed)e(in)h -(Section)h(9.1)1590 3417 y([Bash)e(History)f(F)-8 b(acilities],)37 -b(page)g(109.)60 b(This)35 b(option)h(is)f(on)1590 3527 -y(b)m(y)30 b(default)g(in)f(in)m(teractiv)m(e)i(shells.)1110 -3686 y Fs(ignoreeof)1590 3796 y Ft(An)f(in)m(teractiv)m(e)h(shell)e -(will)f(not)i(exit)g(up)s(on)f(reading)h(EOF.)1110 3955 +TeXDict begin 51 56 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(51)630 299 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 408 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 +518 y(command)30 b(name.)630 677 y Fs(-m)384 b Ft(Job)30 +b(con)m(trol)i(is)e(enabled)h(\(see)g(Chapter)f(7)g([Job)h(Con)m +(trol],)g(page)g(79\).)630 837 y Fs(-n)384 b Ft(Read)21 +b(commands)f(but)g(do)h(not)g(execute)h(them;)i(this)d(ma)m(y)g(b)s(e)f +(used)g(to)h(c)m(hec)m(k)1110 946 y(a)42 b(script)g(for)g(syn)m(tax)g +(errors.)75 b(This)41 b(option)h(is)g(ignored)g(b)m(y)g(in)m(teractiv)m +(e)1110 1056 y(shells.)630 1215 y Fs(-o)30 b Fj(option-name)1110 +1325 y Ft(Set)h(the)f(option)h(corresp)s(onding)e(to)i +Fq(option-name)5 b Ft(:)1110 1484 y Fs(allexport)1590 +1594 y Ft(Same)30 b(as)h Fs(-a)p Ft(.)1110 1753 y Fs(braceexpand)1590 +1863 y Ft(Same)f(as)h Fs(-B)p Ft(.)1110 2022 y Fs(emacs)240 +b Ft(Use)25 b(an)f Fs(emacs)p Ft(-st)m(yle)h(line)f(editing)h(in)m +(terface)h(\(see)g(Chapter)e(8)1590 2132 y([Command)30 +b(Line)g(Editing],)h(page)g(83\).)1110 2291 y Fs(errexit)144 +b Ft(Same)30 b(as)h Fs(-e)p Ft(.)1110 2451 y Fs(errtrace)96 +b Ft(Same)30 b(as)h Fs(-E)p Ft(.)1110 2610 y Fs(functrace)1590 +2720 y Ft(Same)f(as)h Fs(-T)p Ft(.)1110 2879 y Fs(hashall)144 +b Ft(Same)30 b(as)h Fs(-h)p Ft(.)1110 3039 y Fs(histexpand)1590 +3148 y Ft(Same)f(as)h Fs(-H)p Ft(.)1110 3308 y Fs(history)144 +b Ft(Enable)39 b(command)g(history)-8 b(,)42 b(as)d(describ)s(ed)f(in)h +(Section)h(9.1)1590 3417 y([Bash)d(History)g(F)-8 b(acilities],)41 +b(page)c(109.)60 b(This)36 b(option)h(is)f(on)1590 3527 +y(b)m(y)30 b(default)h(in)f(in)m(teractiv)m(e)j(shells.)1110 +3686 y Fs(ignoreeof)1590 3796 y Ft(An)d(in)m(teractiv)m(e)j(shell)e +(will)g(not)f(exit)h(up)s(on)e(reading)i(EOF.)1110 3955 y Fs(keyword)144 b Ft(Same)30 b(as)h Fs(-k)p Ft(.)1110 4115 y Fs(monitor)144 b Ft(Same)30 b(as)h Fs(-m)p Ft(.)1110 4274 y Fs(noclobber)1590 4384 y Ft(Same)f(as)h Fs(-C)p Ft(.)1110 4543 y Fs(noexec)192 b Ft(Same)30 b(as)h Fs(-n)p Ft(.)1110 4702 y Fs(noglob)192 b Ft(Same)30 b(as)h Fs(-f)p -Ft(.)1110 4862 y Fs(nolog)240 b Ft(Curren)m(tly)29 b(ignored.)1110 +Ft(.)1110 4862 y Fs(nolog)240 b Ft(Curren)m(tly)30 b(ignored.)1110 5021 y Fs(notify)192 b Ft(Same)30 b(as)h Fs(-b)p Ft(.)1110 5181 y Fs(nounset)144 b Ft(Same)30 b(as)h Fs(-u)p Ft(.)1110 5340 y Fs(onecmd)192 b Ft(Same)30 b(as)h Fs(-t)p Ft(.)p -eop +eop end %%Page: 52 58 -52 57 bop 150 -116 a Ft(52)2572 b(Bash)31 b(Reference)g(Man)m(ual)1110 -299 y Fs(physical)96 b Ft(Same)30 b(as)h Fs(-P)p Ft(.)1110 -448 y Fs(pipefail)96 b Ft(If)44 b(set,)k(the)d(return)e(v)-5 -b(alue)44 b(of)g(a)h(pip)s(eline)40 b(is)k(the)g(v)-5 -b(alue)44 b(of)1590 557 y(the)33 b(last)g(\(righ)m(tmost\))h(command)f -(to)h(exit)f(with)f(a)h(non-zero)1590 667 y(status,)28 -b(or)f(zero)g(if)e(all)h(commands)g(in)f(the)i(pip)s(eline)c(exit)k -(suc-)1590 776 y(cessfully)-8 b(.)39 b(This)29 b(option)h(is)f -(disabled)f(b)m(y)j(default.)1110 925 y Fs(posix)240 -b Ft(Change)36 b(the)g(b)s(eha)m(vior)f(of)h(Bash)g(where)f(the)h -(default)f(op)s(er-)1590 1035 y(ation)c(di\013ers)e(from)h(the)h -Fl(posix)f Ft(1003.2)k(standard)c(to)h(matc)m(h)1590 -1144 y(the)44 b(standard)f(\(see)h(Section)g(6.11)h([Bash)f(POSIX)e(Mo) -s(de],)1590 1254 y(page)35 b(76\).)55 b(This)33 b(is)g(in)m(tended)h -(to)h(mak)m(e)h(Bash)e(b)s(eha)m(v)m(e)i(as)f(a)1590 -1363 y(strict)30 b(sup)s(erset)f(of)i(that)g(standard.)1110 +TeXDict begin 52 57 bop 150 -116 a Ft(52)2572 b(Bash)31 +b(Reference)g(Man)m(ual)1110 299 y Fs(physical)96 b Ft(Same)30 +b(as)h Fs(-P)p Ft(.)1110 448 y Fs(pipefail)96 b Ft(If)44 +b(set,)k(the)d(return)e(v)-5 b(alue)45 b(of)f(a)h(pip)s(eline)e(is)i +(the)f(v)-5 b(alue)45 b(of)1590 557 y(the)33 b(last)h(\(righ)m(tmost\)) +h(command)e(to)h(exit)g(with)f(a)g(non-zero)1590 667 +y(status,)28 b(or)f(zero)g(if)f(all)i(commands)e(in)g(the)h(pip)s +(eline)f(exit)i(suc-)1590 776 y(cessfully)-8 b(.)41 b(This)30 +b(option)h(is)f(disabled)g(b)m(y)h(default.)1110 925 +y Fs(posix)240 b Ft(Change)36 b(the)g(b)s(eha)m(vior)g(of)g(Bash)g +(where)f(the)h(default)g(op)s(er-)1590 1035 y(ation)c(di\013ers)e(from) +g(the)h Fl(posix)f Ft(1003.2)k(standard)c(to)h(matc)m(h)1590 +1144 y(the)44 b(standard)f(\(see)h(Section)h(6.11)g([Bash)f(POSIX)e(Mo) +s(de],)1590 1254 y(page)35 b(76\).)55 b(This)34 b(is)g(in)m(tended)h +(to)g(mak)m(e)h(Bash)e(b)s(eha)m(v)m(e)i(as)f(a)1590 +1363 y(strict)c(sup)s(erset)e(of)i(that)g(standard.)1110 1512 y Fs(privileged)1590 1622 y Ft(Same)f(as)h Fs(-p)p Ft(.)1110 1771 y Fs(verbose)144 b Ft(Same)30 b(as)h Fs(-v)p Ft(.)1110 1919 y Fs(vi)384 b Ft(Use)31 b(a)g Fs(vi)p -Ft(-st)m(yle)f(line)f(editing)g(in)m(terface.)1110 2068 +Ft(-st)m(yle)g(line)g(editing)g(in)m(terface.)1110 2068 y Fs(xtrace)192 b Ft(Same)30 b(as)h Fs(-x)p Ft(.)630 -2217 y Fs(-p)384 b Ft(T)-8 b(urn)33 b(on)h(privileged)e(mo)s(de.)51 -b(In)34 b(this)f(mo)s(de,)i(the)f Fs($BASH_ENV)e Ft(and)h -Fs($ENV)1110 2326 y Ft(\014les)j(are)i(not)g(pro)s(cessed,)h(shell)d -(functions)g(are)i(not)f(inherited)f(from)h(the)1110 -2436 y(en)m(vironmen)m(t,)e(and)e(the)h Fs(SHELLOPTS)e -Ft(v)-5 b(ariable,)33 b(if)g(it)h(app)s(ears)f(in)g(the)h(en-)1110 -2545 y(vironmen)m(t,)c(is)f(ignored.)40 b(If)29 b(the)i(shell)d(is)h -(started)i(with)e(the)h(e\013ectiv)m(e)i(user)1110 2655 -y(\(group\))e(id)f(not)h(equal)g(to)g(the)g(real)g(user)f(\(group\))i -(id,)e(and)g(the)h Fs(-p)f Ft(option)1110 2765 y(is)39 -b(not)h(supplied,)g(these)g(actions)h(are)f(tak)m(en)h(and)f(the)g -(e\013ectiv)m(e)i(user)d(id)1110 2874 y(is)c(set)i(to)h(the)e(real)g -(user)g(id.)57 b(If)36 b(the)h Fs(-p)f Ft(option)f(is)h(supplied)d(at)k -(startup,)1110 2984 y(the)29 b(e\013ectiv)m(e)i(user)e(id)f(is)g(not)i -(reset.)40 b(T)-8 b(urning)28 b(this)g(option)g(o\013)i(causes)g(the) -1110 3093 y(e\013ectiv)m(e)d(user)e(and)g(group)g(ids)g(to)h(b)s(e)f -(set)h(to)h(the)f(real)f(user)g(and)g(group)g(ids.)630 -3242 y Fs(-t)384 b Ft(Exit)30 b(after)h(reading)e(and)h(executing)g -(one)h(command.)630 3391 y Fs(-u)384 b Ft(T)-8 b(reat)38 -b(unset)e(v)-5 b(ariables)35 b(as)j(an)e(error)h(when)e(p)s(erforming)g -(parameter)i(ex-)1110 3500 y(pansion.)57 b(An)36 b(error)f(message)j -(will)33 b(b)s(e)j(written)f(to)i(the)g(standard)e(error,)1110 -3610 y(and)30 b(a)h(non-in)m(teractiv)m(e)g(shell)d(will)g(exit.)630 -3759 y Fs(-v)384 b Ft(Prin)m(t)29 b(shell)g(input)f(lines)h(as)i(they)f -(are)h(read.)630 3907 y Fs(-x)384 b Ft(Prin)m(t)81 b(a)i(trace)h(of)e -(simple)e(commands,)96 b Fs(\\)p Ft(fBfor)p Fs(\\)p Ft(fP)81 +2217 y Fs(-p)384 b Ft(T)-8 b(urn)33 b(on)h(privileged)h(mo)s(de.)51 +b(In)34 b(this)g(mo)s(de,)h(the)f Fs($BASH_ENV)e Ft(and)h +Fs($ENV)1110 2326 y Ft(\014les)k(are)h(not)g(pro)s(cessed,)h(shell)f +(functions)f(are)h(not)f(inherited)h(from)f(the)1110 +2436 y(en)m(vironmen)m(t,)f(and)d(the)h Fs(SHELLOPTS)e +Ft(v)-5 b(ariable,)35 b(if)f(it)h(app)s(ears)e(in)h(the)g(en-)1110 +2545 y(vironmen)m(t,)d(is)f(ignored.)41 b(If)29 b(the)i(shell)f(is)g +(started)h(with)f(the)g(e\013ectiv)m(e)j(user)1110 2655 +y(\(group\))d(id)g(not)g(equal)h(to)f(the)g(real)h(user)e(\(group\))i +(id,)f(and)f(the)h Fs(-p)f Ft(option)1110 2765 y(is)40 +b(not)g(supplied,)i(these)e(actions)i(are)e(tak)m(en)h(and)f(the)g +(e\013ectiv)m(e)j(user)c(id)1110 2874 y(is)d(set)h(to)h(the)e(real)h +(user)f(id.)58 b(If)36 b(the)h Fs(-p)f Ft(option)g(is)h(supplied)e(at)i +(startup,)1110 2984 y(the)29 b(e\013ectiv)m(e)j(user)d(id)g(is)g(not)h +(reset.)40 b(T)-8 b(urning)29 b(this)g(option)g(o\013)h(causes)g(the) +1110 3093 y(e\013ectiv)m(e)e(user)d(and)g(group)g(ids)h(to)g(b)s(e)f +(set)h(to)h(the)f(real)g(user)f(and)g(group)g(ids.)630 +3242 y Fs(-t)384 b Ft(Exit)31 b(after)g(reading)f(and)g(executing)h +(one)g(command.)630 3391 y Fs(-u)384 b Ft(T)-8 b(reat)38 +b(unset)e(v)-5 b(ariables)37 b(as)h(an)e(error)h(when)e(p)s(erforming)h +(parameter)h(ex-)1110 3500 y(pansion.)58 b(An)36 b(error)f(message)j +(will)e(b)s(e)g(written)g(to)h(the)g(standard)e(error,)1110 +3610 y(and)30 b(a)h(non-in)m(teractiv)m(e)i(shell)d(will)h(exit.)630 +3759 y Fs(-v)384 b Ft(Prin)m(t)30 b(shell)h(input)e(lines)i(as)g(they)f +(are)h(read.)630 3907 y Fs(-x)384 b Ft(Prin)m(t)82 b(a)h(trace)h(of)e +(simple)g(commands,)96 b Fs(\\)p Ft(fBfor)p Fs(\\)p Ft(fP)81 b(commands,)1110 4017 y Fs(\\)p Ft(fBcase)p Fs(\\)p Ft(fP)50 -b(commands,)55 b Fs(\\)p Ft(fBselect)p Fs(\\)p Ft(fP)50 -b(commands,)55 b(and)50 b(arithmetic)1110 4127 y Fs(\\)p -Ft(fBfor)p Fs(\\)p Ft(fP)31 b(commands)g(and)g(their)g(argumen)m(ts)h -(or)f(asso)s(ciated)h(w)m(ord)f(lists)1110 4236 y(after)k(they)g(are)g -(expanded)f(and)h(b)s(efore)f(they)h(are)g(executed.)55 -b(The)34 b(v)-5 b(alue)1110 4346 y(of)34 b(the)g Fs(PS4)f -Ft(v)-5 b(ariable)33 b(is)g(expanded)h(and)f(the)h(resultan)m(t)g(v)-5 -b(alue)33 b(is)g(prin)m(ted)1110 4455 y(b)s(efore)d(the)h(command)f -(and)f(its)h(expanded)g(argumen)m(ts.)630 4604 y Fs(-B)384 -b Ft(The)41 b(shell)e(will)f(p)s(erform)i(brace)h(expansion)f(\(see)i -(Section)f(3.5.1)h([Brace)1110 4714 y(Expansion],)29 -b(page)i(17\).)42 b(This)29 b(option)h(is)f(on)h(b)m(y)h(default.)630 -4862 y Fs(-C)384 b Ft(Prev)m(en)m(t)25 b(output)e(redirection)f(using)g -(`)p Fs(>)p Ft(',)j(`)p Fs(>&)p Ft(',)g(and)e(`)p Fs(<>)p -Ft(')g(from)h(o)m(v)m(erwriting)1110 4972 y(existing)29 -b(\014les.)630 5121 y Fs(-E)384 b Ft(If)39 b(set,)j(an)m(y)e(trap)f(on) -g Fs(ERR)g Ft(is)f(inherited)f(b)m(y)i(shell)f(functions,)i(command) -1110 5230 y(substitutions,)33 b(and)g(commands)g(executed)i(in)e(a)h -(subshell)d(en)m(vironmen)m(t.)1110 5340 y(The)f Fs(ERR)f -Ft(trap)i(is)e(normally)g(not)h(inherited)e(in)h(suc)m(h)h(cases.)p -eop +b(commands,)55 b Fs(\\)p Ft(fBselect)p Fs(\\)p Ft(fP)c(commands,)k(and) +50 b(arithmetic)1110 4127 y Fs(\\)p Ft(fBfor)p Fs(\\)p +Ft(fP)31 b(commands)g(and)g(their)h(argumen)m(ts)g(or)f(asso)s(ciated)i +(w)m(ord)e(lists)1110 4236 y(after)k(they)g(are)g(expanded)f(and)h(b)s +(efore)f(they)h(are)g(executed.)55 b(The)34 b(v)-5 b(alue)1110 +4346 y(of)34 b(the)g Fs(PS4)f Ft(v)-5 b(ariable)35 b(is)f(expanded)g +(and)f(the)h(resultan)m(t)h(v)-5 b(alue)34 b(is)g(prin)m(ted)1110 +4455 y(b)s(efore)c(the)h(command)f(and)f(its)i(expanded)f(argumen)m +(ts.)630 4604 y Fs(-B)384 b Ft(The)41 b(shell)g(will)g(p)s(erform)f +(brace)h(expansion)g(\(see)h(Section)g(3.5.1)g([Brace)1110 +4714 y(Expansion],)30 b(page)h(17\).)42 b(This)30 b(option)h(is)f(on)g +(b)m(y)h(default.)630 4862 y Fs(-C)384 b Ft(Prev)m(en)m(t)25 +b(output)e(redirection)h(using)f(`)p Fs(>)p Ft(',)i(`)p +Fs(>&)p Ft(',)g(and)e(`)p Fs(<>)p Ft(')g(from)h(o)m(v)m(erwriting)1110 +4972 y(existing)31 b(\014les.)630 5121 y Fs(-E)384 b +Ft(If)39 b(set,)j(an)m(y)e(trap)f(on)g Fs(ERR)g Ft(is)g(inherited)g(b)m +(y)g(shell)h(functions,)h(command)1110 5230 y(substitutions,)35 +b(and)e(commands)g(executed)i(in)f(a)g(subshell)f(en)m(vironmen)m(t.) +1110 5340 y(The)d Fs(ERR)f Ft(trap)i(is)f(normally)h(not)f(inherited)g +(in)g(suc)m(h)g(cases.)p eop end %%Page: 53 59 -53 58 bop 150 -116 a Ft(Chapter)30 b(4:)41 b(Shell)28 -b(Builtin)g(Commands)2069 b(53)630 299 y Fs(-H)384 b -Ft(Enable)37 b(`)p Fs(!)p Ft(')i(st)m(yle)g(history)e(substitution)f -(\(see)j(Section)g(9.3)g([History)f(In-)1110 408 y(teraction],)g(page)e -(111\).)57 b(This)33 b(option)i(is)f(on)h(b)m(y)h(default)e(for)h(in)m +TeXDict begin 53 58 bop 150 -116 a Ft(Chapter)30 b(4:)41 +b(Shell)30 b(Builtin)h(Commands)2069 b(53)630 299 y Fs(-H)384 +b Ft(Enable)38 b(`)p Fs(!)p Ft(')h(st)m(yle)h(history)e(substitution)g +(\(see)h(Section)h(9.3)f([History)g(In-)1110 408 y(teraction],)g(page)d +(111\).)57 b(This)34 b(option)i(is)f(on)g(b)m(y)h(default)f(for)g(in)m (teractiv)m(e)1110 518 y(shells.)630 682 y Fs(-P)384 -b Ft(If)43 b(set,)k(do)c(not)g(follo)m(w)f(sym)m(b)s(olic)g(links)e -(when)i(p)s(erforming)f(commands)1110 792 y(suc)m(h)29 -b(as)h Fs(cd)f Ft(whic)m(h)f(c)m(hange)i(the)g(curren)m(t)f(directory) --8 b(.)41 b(The)28 b(ph)m(ysical)h(direc-)1110 902 y(tory)34 -b(is)f(used)g(instead.)51 b(By)34 b(default,)g(Bash)g(follo)m(ws)f(the) -h(logical)f(c)m(hain)h(of)1110 1011 y(directories)i(when)f(p)s -(erforming)g(commands)h(whic)m(h)f(c)m(hange)j(the)f(curren)m(t)1110 -1121 y(directory)-8 b(.)1110 1258 y(F)g(or)31 b(example,)f(if)f(`)p -Fs(/usr/sys)p Ft(')f(is)h(a)h(sym)m(b)s(olic)f(link)f(to)i(`)p +b Ft(If)43 b(set,)k(do)c(not)g(follo)m(w)h(sym)m(b)s(olic)g(links)e +(when)g(p)s(erforming)g(commands)1110 792 y(suc)m(h)29 +b(as)h Fs(cd)f Ft(whic)m(h)g(c)m(hange)h(the)g(curren)m(t)f(directory) +-8 b(.)42 b(The)28 b(ph)m(ysical)j(direc-)1110 902 y(tory)j(is)g(used)f +(instead.)52 b(By)34 b(default,)h(Bash)f(follo)m(ws)h(the)f(logical)i +(c)m(hain)f(of)1110 1011 y(directories)j(when)d(p)s(erforming)h +(commands)g(whic)m(h)g(c)m(hange)i(the)f(curren)m(t)1110 +1121 y(directory)-8 b(.)1110 1258 y(F)g(or)31 b(example,)g(if)f(`)p +Fs(/usr/sys)p Ft(')e(is)i(a)g(sym)m(b)s(olic)h(link)f(to)g(`)p Fs(/usr/local/sys)p Ft(')1110 1367 y(then:)1350 1504 y Fs($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 1614 y(/usr/sys)1350 1723 y($)g(cd)h(..;)f(pwd)1350 1833 y(/usr)1110 1970 -y Ft(If)30 b Fs(set)f(-P)h Ft(is)g(on,)g(then:)1350 2107 +y Ft(If)30 b Fs(set)f(-P)h Ft(is)h(on,)f(then:)1350 2107 y Fs($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 2216 y(/usr/local/sys) 1350 2326 y($)g(cd)h(..;)f(pwd)1350 2436 y(/usr/local)630 2600 y(-T)384 b Ft(If)31 b(set,)h(an)m(y)f(trap)g(on)g -Fs(DEBUG)e Ft(is)h(inherited)f(b)m(y)i(shell)e(functions,)h(command) -1110 2710 y(substitutions,)j(and)g(commands)g(executed)i(in)e(a)h -(subshell)d(en)m(vironmen)m(t.)1110 2819 y(The)f Fs(DEBUG)f -Ft(trap)h(is)f(normally)g(not)i(inherited)d(in)h(suc)m(h)h(cases.)630 -2983 y Fs(--)384 b Ft(If)31 b(no)h(argumen)m(ts)f(follo)m(w)g(this)g -(option,)g(then)g(the)h(p)s(ositional)e(parameters)1110 -3093 y(are)k(unset.)49 b(Otherwise,)33 b(the)h(p)s(ositional)d -(parameters)j(are)g(set)g(to)g(the)g Fq(ar-)1110 3203 -y(gumen)m(ts)p Ft(,)d(ev)m(en)g(if)e(some)i(of)g(them)f(b)s(egin)f -(with)g(a)i(`)p Fs(-)p Ft('.)630 3367 y Fs(-)432 b Ft(Signal)43 -b(the)i(end)f(of)h(options,)j(cause)d(all)f(remaining)e -Fq(argumen)m(ts)49 b Ft(to)d(b)s(e)1110 3477 y(assigned)37 -b(to)i(the)f(p)s(ositional)e(parameters.)65 b(The)37 +Fs(DEBUG)e Ft(is)i(inherited)g(b)m(y)g(shell)g(functions,)g(command) +1110 2710 y(substitutions,)k(and)e(commands)g(executed)i(in)f(a)g +(subshell)f(en)m(vironmen)m(t.)1110 2819 y(The)d Fs(DEBUG)f +Ft(trap)h(is)g(normally)h(not)g(inherited)f(in)g(suc)m(h)g(cases.)630 +2983 y Fs(--)384 b Ft(If)31 b(no)h(argumen)m(ts)f(follo)m(w)i(this)f +(option,)g(then)f(the)h(p)s(ositional)h(parameters)1110 +3093 y(are)h(unset.)49 b(Otherwise,)34 b(the)g(p)s(ositional)g +(parameters)g(are)g(set)g(to)g(the)g Fq(ar-)1110 3203 +y(gumen)m(ts)p Ft(,)d(ev)m(en)g(if)f(some)h(of)g(them)f(b)s(egin)g +(with)g(a)h(`)p Fs(-)p Ft('.)630 3367 y Fs(-)432 b Ft(Signal)45 +b(the)g(end)f(of)h(options,)k(cause)c(all)h(remaining)e +Fq(argumen)m(ts)49 b Ft(to)d(b)s(e)1110 3477 y(assigned)38 +b(to)h(the)f(p)s(ositional)h(parameters.)65 b(The)37 b(`)p Fs(-x)p Ft(')h(and)g(`)p Fs(-v)p Ft(')g(options)1110 3586 y(are)25 b(turned)e(o\013.)40 b(If)24 b(there)h(are)g(no)f -(argumen)m(ts,)i(the)f(p)s(ositional)e(parameters)1110 -3696 y(remain)29 b(unc)m(hanged.)630 3860 y(Using)d(`)p -Fs(+)p Ft(')i(rather)f(than)g(`)p Fs(-)p Ft(')g(causes)h(these)f -(options)g(to)h(b)s(e)e(turned)g(o\013.)40 b(The)27 b(options)g(can)630 -3970 y(also)35 b(b)s(e)g(used)f(up)s(on)g(in)m(v)m(o)s(cation)h(of)g -(the)g(shell.)54 b(The)34 b(curren)m(t)h(set)h(of)f(options)g(ma)m(y)h -(b)s(e)630 4079 y(found)29 b(in)g Fs($-)p Ft(.)630 4216 -y(The)43 b(remaining)f(N)h Fq(argumen)m(ts)48 b Ft(are)c(p)s(ositional) -d(parameters)j(and)f(are)h(assigned,)i(in)630 4326 y(order,)30 +(argumen)m(ts,)i(the)f(p)s(ositional)h(parameters)1110 +3696 y(remain)k(unc)m(hanged.)630 3860 y(Using)d(`)p +Fs(+)p Ft(')h(rather)f(than)g(`)p Fs(-)p Ft(')g(causes)h(these)f +(options)h(to)g(b)s(e)e(turned)g(o\013.)40 b(The)27 b(options)h(can)630 +3970 y(also)36 b(b)s(e)f(used)f(up)s(on)g(in)m(v)m(o)s(cation)j(of)e +(the)g(shell.)56 b(The)34 b(curren)m(t)h(set)h(of)f(options)h(ma)m(y)g +(b)s(e)630 4079 y(found)29 b(in)h Fs($-)p Ft(.)630 4216 +y(The)43 b(remaining)h(N)f Fq(argumen)m(ts)48 b Ft(are)c(p)s(ositional) +g(parameters)g(and)f(are)h(assigned,)j(in)630 4326 y(order,)30 b(to)h Fs($1)p Ft(,)f Fs($2)p Ft(,)36 b(.)22 b(.)g(.)42 -b Fs($N)p Ft(.)e(The)30 b(sp)s(ecial)f(parameter)i Fs(#)f -Ft(is)f(set)i(to)g(N.)630 4463 y(The)f(return)f(status)i(is)e(alw)m(a)m -(ys)i(zero)g(unless)e(an)h(in)m(v)-5 b(alid)28 b(option)i(is)f +b Fs($N)p Ft(.)e(The)30 b(sp)s(ecial)h(parameter)g Fs(#)f +Ft(is)g(set)h(to)g(N.)630 4463 y(The)f(return)f(status)i(is)f(alw)m(a)m +(ys)i(zero)f(unless)f(an)g(in)m(v)-5 b(alid)31 b(option)g(is)f (supplied.)150 4732 y Fr(4.4)68 b(Sp)t(ecial)45 b(Builtins)275 -4981 y Ft(F)-8 b(or)25 b(historical)e(reasons,)j(the)e -Fl(posix)g Ft(1003.2)j(standard)d(has)g(classi\014ed)f(sev)m(eral)i -(builtin)c(commands)150 5091 y(as)37 b Fm(sp)-5 b(e)g(cial)p -Ft(.)60 b(When)36 b(Bash)h(is)f(executing)g(in)f Fl(posix)h -Ft(mo)s(de,)i(the)f(sp)s(ecial)e(builtins)d(di\013er)k(from)g(other)150 -5201 y(builtin)27 b(commands)j(in)f(three)i(resp)s(ects:)199 -5340 y(1.)61 b(Sp)s(ecial)29 b(builtins)d(are)31 b(found)e(b)s(efore)h -(shell)f(functions)g(during)f(command)i(lo)s(okup.)p -eop +4981 y Ft(F)-8 b(or)25 b(historical)h(reasons,)g(the)e +Fl(posix)g Ft(1003.2)j(standard)d(has)g(classi\014ed)h(sev)m(eral)h +(builtin)e(commands)150 5091 y(as)37 b Fm(sp)-5 b(e)g(cial)p +Ft(.)60 b(When)36 b(Bash)h(is)g(executing)g(in)f Fl(posix)g +Ft(mo)s(de,)i(the)f(sp)s(ecial)g(builtins)e(di\013er)i(from)f(other)150 +5201 y(builtin)30 b(commands)g(in)g(three)h(resp)s(ects:)199 +5340 y(1.)61 b(Sp)s(ecial)31 b(builtins)e(are)i(found)e(b)s(efore)h +(shell)h(functions)f(during)f(command)h(lo)s(okup.)p +eop end %%Page: 54 60 -54 59 bop 150 -116 a Ft(54)2572 b(Bash)31 b(Reference)g(Man)m(ual)199 -299 y(2.)61 b(If)30 b(a)h(sp)s(ecial)e(builtin)e(returns)i(an)h(error)g -(status,)h(a)g(non-in)m(teractiv)m(e)g(shell)d(exits.)199 -433 y(3.)61 b(Assignmen)m(t)29 b(statemen)m(ts)i(preceding)e(the)g -(command)g(sta)m(y)i(in)d(e\013ect)j(in)d(the)i(shell)d(en)m(vironmen)m -(t)330 543 y(after)k(the)f(command)h(completes.)275 702 -y(When)36 b(Bash)g(is)g(not)g(executing)h(in)e Fl(posix)g -Ft(mo)s(de,)j(these)f(builtins)c(b)s(eha)m(v)m(e)k(no)f(di\013eren)m -(tly)f(than)150 812 y(the)c(rest)f(of)h(the)f(Bash)h(builtin)26 -b(commands.)41 b(The)30 b(Bash)g Fl(posix)g Ft(mo)s(de)g(is)f(describ)s -(ed)f(in)h(Section)h(6.11)150 922 y([Bash)h(POSIX)e(Mo)s(de],)i(page)g -(76.)275 1056 y(These)f(are)g(the)h Fl(posix)f Ft(sp)s(ecial)f -(builtins:)390 1191 y Fs(break)46 b(:)i(.)f(continue)f(eval)g(exec)h -(exit)g(export)f(readonly)f(return)h(set)390 1300 y(shift)g(trap)h -(unset)p eop +TeXDict begin 54 59 bop 150 -116 a Ft(54)2572 b(Bash)31 +b(Reference)g(Man)m(ual)199 299 y(2.)61 b(If)30 b(a)h(sp)s(ecial)g +(builtin)f(returns)f(an)h(error)g(status,)h(a)g(non-in)m(teractiv)m(e)i +(shell)d(exits.)199 433 y(3.)61 b(Assignmen)m(t)30 b(statemen)m(ts)h +(preceding)f(the)f(command)g(sta)m(y)i(in)e(e\013ect)i(in)e(the)h +(shell)f(en)m(vironmen)m(t)330 543 y(after)i(the)f(command)h +(completes.)275 702 y(When)36 b(Bash)g(is)h(not)f(executing)i(in)e +Fl(posix)f Ft(mo)s(de,)j(these)f(builtins)f(b)s(eha)m(v)m(e)h(no)f +(di\013eren)m(tly)h(than)150 812 y(the)31 b(rest)f(of)h(the)f(Bash)h +(builtin)e(commands.)41 b(The)30 b(Bash)g Fl(posix)g +Ft(mo)s(de)g(is)g(describ)s(ed)f(in)h(Section)h(6.11)150 +922 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g(76.)275 1056 +y(These)f(are)g(the)h Fl(posix)f Ft(sp)s(ecial)h(builtins:)390 +1191 y Fs(break)46 b(:)i(.)f(continue)f(eval)g(exec)h(exit)g(export)f +(readonly)f(return)h(set)390 1300 y(shift)g(trap)h(unset)p +eop end %%Page: 55 61 -55 60 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28 -b(V)-8 b(ariables)2457 b(55)150 299 y Fo(5)80 b(Shell)55 -b(V)-13 b(ariables)275 525 y Ft(This)35 b(c)m(hapter)j(describ)s(es)d -(the)i(shell)e(v)-5 b(ariables)36 b(that)i(Bash)f(uses.)61 -b(Bash)37 b(automatically)g(assigns)150 635 y(default)30 -b(v)-5 b(alues)29 b(to)i(a)g(n)m(um)m(b)s(er)e(of)i(v)-5 +TeXDict begin 55 60 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(55)150 299 y Fo(5)80 +b(Shell)53 b(V)-13 b(ariables)275 525 y Ft(This)36 b(c)m(hapter)i +(describ)s(es)e(the)h(shell)g(v)-5 b(ariables)38 b(that)g(Bash)f(uses.) +61 b(Bash)37 b(automatically)j(assigns)150 635 y(default)31 +b(v)-5 b(alues)30 b(to)h(a)g(n)m(um)m(b)s(er)e(of)i(v)-5 b(ariables.)150 887 y Fr(5.1)68 b(Bourne)45 b(Shell)g(V)-11 -b(ariables)275 1130 y Ft(Bash)36 b(uses)g(certain)g(shell)e(v)-5 -b(ariables)35 b(in)g(the)i(same)g(w)m(a)m(y)g(as)f(the)h(Bourne)f -(shell.)57 b(In)35 b(some)i(cases,)150 1240 y(Bash)31 -b(assigns)e(a)i(default)e(v)-5 b(alue)30 b(to)h(the)g(v)-5 -b(ariable.)150 1396 y Fs(CDPATH)192 b Ft(A)39 b(colon-separated)h(list) -d(of)i(directories)f(used)h(as)g(a)g(searc)m(h)h(path)e(for)h(the)g +b(ariables)275 1130 y Ft(Bash)36 b(uses)g(certain)h(shell)f(v)-5 +b(ariables)37 b(in)f(the)h(same)g(w)m(a)m(y)g(as)f(the)h(Bourne)f +(shell.)59 b(In)35 b(some)i(cases,)150 1240 y(Bash)31 +b(assigns)f(a)h(default)f(v)-5 b(alue)31 b(to)g(the)g(v)-5 +b(ariable.)150 1396 y Fs(CDPATH)192 b Ft(A)39 b(colon-separated)i(list) +e(of)g(directories)h(used)f(as)g(a)g(searc)m(h)h(path)e(for)h(the)g Fs(cd)f Ft(builtin)630 1505 y(command.)150 1662 y Fs(HOME)288 -b Ft(The)23 b(curren)m(t)h(user's)f(home)g(directory;)j(the)e(default)f -(for)g(the)h Fs(cd)f Ft(builtin)d(command.)38 b(The)630 -1771 y(v)-5 b(alue)36 b(of)g(this)f(v)-5 b(ariable)35 -b(is)h(also)g(used)f(b)m(y)h(tilde)f(expansion)g(\(see)j(Section)e -(3.5.2)i([Tilde)630 1881 y(Expansion],)29 b(page)i(18\).)150 -2037 y Fs(IFS)336 b Ft(A)25 b(list)g(of)g(c)m(haracters)i(that)f -(separate)g(\014elds;)g(used)f(when)f(the)i(shell)d(splits)h(w)m(ords)g +b Ft(The)23 b(curren)m(t)h(user's)f(home)g(directory;)k(the)d(default)g +(for)f(the)h Fs(cd)f Ft(builtin)g(command.)38 b(The)630 +1771 y(v)-5 b(alue)37 b(of)f(this)g(v)-5 b(ariable)37 +b(is)g(also)g(used)e(b)m(y)h(tilde)h(expansion)f(\(see)i(Section)f +(3.5.2)h([Tilde)630 1881 y(Expansion],)30 b(page)h(18\).)150 +2037 y Fs(IFS)336 b Ft(A)25 b(list)i(of)e(c)m(haracters)i(that)f +(separate)g(\014elds;)h(used)e(when)f(the)i(shell)f(splits)h(w)m(ords)e (as)i(part)630 2147 y(of)31 b(expansion.)150 2303 y Fs(MAIL)288 -b Ft(If)26 b(this)e(parameter)j(is)e(set)h(to)h(a)g(\014lename)e(and)g -(the)h Fs(MAILPATH)e Ft(v)-5 b(ariable)25 b(is)g(not)h(set,)i(Bash)630 -2413 y(informs)h(the)h(user)g(of)g(the)h(arriv)-5 b(al)29 -b(of)h(mail)f(in)g(the)i(sp)s(eci\014ed)e(\014le.)150 -2569 y Fs(MAILPATH)96 b Ft(A)33 b(colon-separated)h(list)e(of)h -(\014lenames)g(whic)m(h)f(the)h(shell)e(p)s(erio)s(dically)f(c)m(hec)m -(ks)k(for)f(new)630 2678 y(mail.)58 b(Eac)m(h)37 b(list)e(en)m(try)i -(can)g(sp)s(ecify)e(the)i(message)h(that)f(is)f(prin)m(ted)f(when)g -(new)h(mail)630 2788 y(arriv)m(es)28 b(in)g(the)h(mail)e(\014le)h(b)m -(y)h(separating)f(the)h(\014le)f(name)h(from)f(the)h(message)h(with)d -(a)j(`)p Fs(?)p Ft('.)630 2898 y(When)i(used)f(in)g(the)h(text)i(of)e +b Ft(If)26 b(this)f(parameter)i(is)f(set)g(to)h(a)g(\014lename)f(and)f +(the)h Fs(MAILPATH)e Ft(v)-5 b(ariable)27 b(is)f(not)g(set,)i(Bash)630 +2413 y(informs)i(the)g(user)g(of)g(the)h(arriv)-5 b(al)31 +b(of)f(mail)h(in)f(the)h(sp)s(eci\014ed)f(\014le.)150 +2569 y Fs(MAILPATH)96 b Ft(A)33 b(colon-separated)i(list)f(of)f +(\014lenames)h(whic)m(h)f(the)g(shell)g(p)s(erio)s(dically)h(c)m(hec)m +(ks)g(for)f(new)630 2678 y(mail.)60 b(Eac)m(h)37 b(list)g(en)m(try)g +(can)g(sp)s(ecify)f(the)h(message)h(that)f(is)g(prin)m(ted)f(when)f +(new)h(mail)630 2788 y(arriv)m(es)29 b(in)g(the)g(mail)g(\014le)g(b)m +(y)g(separating)g(the)g(\014le)g(name)g(from)f(the)h(message)h(with)e +(a)i(`)p Fs(?)p Ft('.)630 2898 y(When)i(used)f(in)h(the)g(text)i(of)e (the)g(message,)i Fs($_)e Ft(expands)f(to)i(the)f(name)g(of)h(the)f -(curren)m(t)630 3007 y(mail)d(\014le.)150 3163 y Fs(OPTARG)192 -b Ft(The)30 b(v)-5 b(alue)30 b(of)g(the)h(last)f(option)g(argumen)m(t)h +(curren)m(t)630 3007 y(mail)f(\014le.)150 3163 y Fs(OPTARG)192 +b Ft(The)30 b(v)-5 b(alue)31 b(of)f(the)h(last)g(option)g(argumen)m(t)g (pro)s(cessed)f(b)m(y)g(the)g Fs(getopts)f Ft(builtin.)150 -3320 y Fs(OPTIND)192 b Ft(The)30 b(index)f(of)h(the)h(last)f(option)g -(argumen)m(t)h(pro)s(cessed)f(b)m(y)g(the)g Fs(getopts)f -Ft(builtin.)150 3476 y Fs(PATH)288 b Ft(A)32 b(colon-separated)h(list)e -(of)h(directories)f(in)f(whic)m(h)h(the)h(shell)e(lo)s(oks)i(for)g -(commands.)45 b(A)630 3586 y(zero-length)d(\(n)m(ull\))f(directory)g -(name)h(in)f(the)h(v)-5 b(alue)41 b(of)h Fs(PATH)f Ft(indicates)g(the)h -(curren)m(t)630 3695 y(directory)-8 b(.)48 b(A)33 b(n)m(ull)d -(directory)j(name)f(ma)m(y)i(app)s(ear)e(as)h(t)m(w)m(o)h(adjacen)m(t)g -(colons,)f(or)g(as)g(an)630 3805 y(initial)28 b(or)i(trailing)e(colon.) -150 3961 y Fs(PS1)336 b Ft(The)35 b(primary)e(prompt)i(string.)54 -b(The)35 b(default)g(v)-5 b(alue)34 b(is)h(`)p Fs(\\s-\\v\\$)28 -b Ft('.)56 b(See)36 b(Section)f(6.9)630 4071 y([Prin)m(ting)26 -b(a)i(Prompt],)g(page)h(75,)g(for)e(the)h(complete)g(list)f(of)g(escap) +3320 y Fs(OPTIND)192 b Ft(The)30 b(index)g(of)g(the)h(last)g(option)g +(argumen)m(t)g(pro)s(cessed)f(b)m(y)g(the)g Fs(getopts)f +Ft(builtin.)150 3476 y Fs(PATH)288 b Ft(A)32 b(colon-separated)i(list)f +(of)f(directories)h(in)e(whic)m(h)h(the)g(shell)g(lo)s(oks)h(for)f +(commands.)45 b(A)630 3586 y(zero-length)e(\(n)m(ull\))g(directory)f +(name)g(in)g(the)g(v)-5 b(alue)42 b(of)g Fs(PATH)f Ft(indicates)i(the)f +(curren)m(t)630 3695 y(directory)-8 b(.)49 b(A)33 b(n)m(ull)f +(directory)i(name)e(ma)m(y)i(app)s(ear)e(as)h(t)m(w)m(o)h(adjacen)m(t)g +(colons,)g(or)f(as)g(an)630 3805 y(initial)f(or)e(trailing)h(colon.)150 +3961 y Fs(PS1)336 b Ft(The)35 b(primary)f(prompt)h(string.)55 +b(The)35 b(default)h(v)-5 b(alue)35 b(is)h(`)p Fs(\\s-\\v\\$)28 +b Ft('.)56 b(See)36 b(Section)g(6.9)630 4071 y([Prin)m(ting)28 +b(a)g(Prompt],)g(page)h(75,)g(for)e(the)h(complete)h(list)g(of)e(escap) s(e)h(sequences)g(that)h(are)630 4180 y(expanded)h(b)s(efore)g -Fs(PS1)f Ft(is)g(displa)m(y)m(ed.)150 4336 y Fs(PS2)336 -b Ft(The)30 b(secondary)g(prompt)g(string.)40 b(The)29 -b(default)h(v)-5 b(alue)30 b(is)f(`)p Fs(>)h Ft('.)150 +Fs(PS1)f Ft(is)h(displa)m(y)m(ed.)150 4336 y Fs(PS2)336 +b Ft(The)30 b(secondary)g(prompt)g(string.)41 b(The)29 +b(default)i(v)-5 b(alue)31 b(is)f(`)p Fs(>)g Ft('.)150 4589 y Fr(5.2)68 b(Bash)45 b(V)-11 b(ariables)275 4832 -y Ft(These)36 b(v)-5 b(ariables)36 b(are)i(set)f(or)h(used)e(b)m(y)h -(Bash,)i(but)d(other)i(shells)d(do)i(not)g(normally)f(treat)i(them)150 +y Ft(These)36 b(v)-5 b(ariables)38 b(are)g(set)f(or)h(used)e(b)m(y)h +(Bash,)i(but)d(other)i(shells)f(do)g(not)g(normally)h(treat)g(them)150 4941 y(sp)s(ecially)-8 b(.)275 5074 y(A)24 b(few)g(v)-5 -b(ariables)22 b(used)i(b)m(y)f(Bash)i(are)f(describ)s(ed)e(in)h -(di\013eren)m(t)g(c)m(hapters:)38 b(v)-5 b(ariables)23 -b(for)h(con)m(trolling)150 5184 y(the)31 b(job)f(con)m(trol)g -(facilities)f(\(see)i(Section)f(7.3)i([Job)e(Con)m(trol)g(V)-8 -b(ariables],)30 b(page)i(82\).)150 5340 y Fs(BASH)288 -b Ft(The)30 b(full)e(pathname)i(used)g(to)h(execute)h(the)e(curren)m(t) -g(instance)g(of)h(Bash.)p eop +b(ariables)24 b(used)g(b)m(y)f(Bash)i(are)f(describ)s(ed)f(in)h +(di\013eren)m(t)g(c)m(hapters:)38 b(v)-5 b(ariables)25 +b(for)f(con)m(trolling)150 5184 y(the)31 b(job)f(con)m(trol)h +(facilities)i(\(see)e(Section)g(7.3)h([Job)e(Con)m(trol)h(V)-8 +b(ariables],)32 b(page)g(82\).)150 5340 y Fs(BASH)288 +b Ft(The)30 b(full)g(pathname)g(used)g(to)h(execute)h(the)e(curren)m(t) +g(instance)h(of)g(Bash.)p eop end %%Page: 56 62 -56 61 bop 150 -116 a Ft(56)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)29 b(whose)h(v)-5 b(alues)30 b(are)h(the)f(n)m(um)m(b)s(er)f -(of)i(parameters)g(in)e(eac)m(h)i(frame)g(of)630 518 -y(the)26 b(curren)m(t)f(bash)g(execution)h(call)f(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)h(\(shell)h(function)h(or)g(script)f(executed)j -(with)d Fs(.)h Ft(or)h Fs(source)p Ft(\))e(is)g(at)i(the)g(top)g(of)630 -737 y(the)h(stac)m(k.)42 b(When)30 b(a)g(subroutine)f(is)g(executed,)i -(the)g(n)m(um)m(b)s(er)e(of)h(parameters)h(passed)f(is)630 -847 y(pushed)f(on)m(to)i Fs(BASH_ARGC)p Ft(.)150 1017 -y Fs(BASH_ARGV)630 1127 y Ft(An)24 b(arra)m(y)g(v)-5 -b(ariable)23 b(con)m(taining)h(all)f(of)h(the)h(parameters)f(in)f(the)h -(curren)m(t)g(bash)g(execution)630 1236 y(call)33 b(stac)m(k.)53 -b(The)34 b(\014nal)f(parameter)h(of)g(the)g(last)g(subroutine)e(call)h -(is)g(at)i(the)f(top)h(of)f(the)630 1346 y(stac)m(k;)28 -b(the)c(\014rst)f(parameter)i(of)f(the)g(initial)e(call)h(is)g(at)i -(the)f(b)s(ottom.)39 b(When)24 b(a)g(subroutine)630 1456 -y(is)29 b(executed,)j(the)e(parameters)h(supplied)c(are)k(pushed)e(on)m -(to)i Fs(BASH_ARGV)p Ft(.)150 1626 y Fs(BASH_COMMAND)630 -1736 y Ft(The)39 b(command)h(curren)m(tly)f(b)s(eing)f(executed)j(or)e -(ab)s(out)h(to)g(b)s(e)f(executed,)44 b(unless)38 b(the)630 -1845 y(shell)f(is)h(executing)g(a)h(command)g(as)g(the)f(result)g(of)h -(a)g(trap,)i(in)c(whic)m(h)g(case)j(it)e(is)g(the)630 -1955 y(command)30 b(executing)h(at)g(the)f(time)g(of)h(the)g(trap.)150 -2125 y Fs(BASH_ENV)96 b Ft(If)28 b(this)f(v)-5 b(ariable)28 -b(is)f(set)i(when)f(Bash)g(is)g(in)m(v)m(ok)m(ed)h(to)g(execute)h(a)e -(shell)f(script,)h(its)g(v)-5 b(alue)28 b(is)630 2235 -y(expanded)33 b(and)h(used)g(as)g(the)h(name)f(of)g(a)h(startup)f -(\014le)f(to)i(read)f(b)s(efore)g(executing)h(the)630 -2345 y(script.)40 b(See)30 b(Section)g(6.2)i([Bash)f(Startup)e(Files],) -h(page)h(65.)150 2515 y Fs(BASH_EXECUTION_STRING)630 -2625 y Ft(The)f(command)g(argumen)m(t)h(to)g(the)g(`)p -Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)g(option.)150 2795 -y Fs(BASH_LINENO)630 2905 y Ft(An)38 b(arra)m(y)h(v)-5 -b(ariable)37 b(whose)i(mem)m(b)s(ers)e(are)i(the)g(line)e(n)m(um)m(b)s -(ers)g(in)g(source)i(\014les)e(corre-)630 3014 y(sp)s(onding)h(to)j +TeXDict begin 56 61 bop 150 -116 a Ft(56)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 +(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 +(script)g(executed)i(with)e Fs(.)g Ft(or)h Fs(source)p +Ft(\))e(is)h(at)h(the)g(top)g(of)630 737 y(the)h(stac)m(k.)42 +b(When)30 b(a)g(subroutine)g(is)g(executed,)h(the)g(n)m(um)m(b)s(er)e +(of)h(parameters)h(passed)f(is)630 847 y(pushed)f(on)m(to)i +Fs(BASH_ARGC)p Ft(.)150 1017 y Fs(BASH_ARGV)630 1127 +y Ft(An)24 b(arra)m(y)g(v)-5 b(ariable)25 b(con)m(taining)h(all)f(of)f +(the)h(parameters)f(in)g(the)g(curren)m(t)g(bash)g(execution)630 +1236 y(call)35 b(stac)m(k.)53 b(The)34 b(\014nal)g(parameter)g(of)g +(the)g(last)h(subroutine)e(call)i(is)f(at)h(the)f(top)h(of)f(the)630 +1346 y(stac)m(k;)28 b(the)c(\014rst)f(parameter)i(of)f(the)g(initial)i +(call)f(is)f(at)h(the)f(b)s(ottom.)39 b(When)24 b(a)g(subroutine)630 +1456 y(is)30 b(executed,)i(the)e(parameters)h(supplied)e(are)i(pushed)e +(on)m(to)i Fs(BASH_ARGV)p Ft(.)150 1626 y Fs(BASH_COMMAND)630 +1736 y Ft(The)39 b(command)h(curren)m(tly)g(b)s(eing)f(executed)i(or)e +(ab)s(out)h(to)g(b)s(e)f(executed,)44 b(unless)39 b(the)630 +1845 y(shell)g(is)g(executing)g(a)g(command)g(as)g(the)f(result)h(of)g +(a)g(trap,)i(in)d(whic)m(h)g(case)i(it)f(is)g(the)630 +1955 y(command)30 b(executing)i(at)f(the)f(time)h(of)g(the)g(trap.)150 +2125 y Fs(BASH_ENV)96 b Ft(If)28 b(this)g(v)-5 b(ariable)30 +b(is)e(set)h(when)f(Bash)g(is)h(in)m(v)m(ok)m(ed)h(to)f(execute)h(a)e +(shell)h(script,)g(its)g(v)-5 b(alue)29 b(is)630 2235 +y(expanded)k(and)h(used)g(as)g(the)h(name)f(of)g(a)h(startup)f(\014le)g +(to)h(read)f(b)s(efore)g(executing)i(the)630 2345 y(script.)41 +b(See)30 b(Section)h(6.2)h([Bash)f(Startup)e(Files],)j(page)f(65.)150 +2515 y Fs(BASH_EXECUTION_STRING)630 2625 y Ft(The)f(command)g(argumen)m +(t)h(to)g(the)g(`)p Fs(-c)p Ft(')f(in)m(v)m(o)s(cation)i(option.)150 +2795 y Fs(BASH_LINENO)630 2905 y Ft(An)38 b(arra)m(y)h(v)-5 +b(ariable)39 b(whose)g(mem)m(b)s(ers)e(are)i(the)g(line)g(n)m(um)m(b)s +(ers)e(in)h(source)h(\014les)f(corre-)630 3014 y(sp)s(onding)h(to)i (eac)m(h)g(mem)m(b)s(er)e(of)i Fq(FUNCNAME)p Ft(.)g Fs -(${BASH_LINENO[$i]})35 b Ft(is)k(the)i(line)630 3124 -y(n)m(um)m(b)s(er)34 b(in)f(the)i(source)g(\014le)f(where)g -Fs(${FUNCNAME[$i)27 b(+)j(1]})k Ft(w)m(as)h(called.)54 -b(The)34 b(corre-)630 3233 y(sp)s(onding)d(source)j(\014le)f(name)h(is) -f Fs(${BASH_SOURCE[$i)26 b(+)k(1]})p Ft(.)50 b(Use)35 -b Fs(LINENO)d Ft(to)i(obtain)630 3343 y(the)d(curren)m(t)f(line)e(n)m +(${BASH_LINENO[$i]})35 b Ft(is)40 b(the)h(line)630 3124 +y(n)m(um)m(b)s(er)34 b(in)g(the)h(source)g(\014le)g(where)f +Fs(${FUNCNAME[$i)27 b(+)j(1]})k Ft(w)m(as)h(called.)56 +b(The)34 b(corre-)630 3233 y(sp)s(onding)e(source)i(\014le)g(name)g(is) +g Fs(${BASH_SOURCE[$i)26 b(+)k(1]})p Ft(.)50 b(Use)35 +b Fs(LINENO)d Ft(to)i(obtain)630 3343 y(the)d(curren)m(t)f(line)g(n)m (um)m(b)s(er.)150 3513 y Fs(BASH_REMATCH)630 3623 y Ft(An)43 -b(arra)m(y)i(v)-5 b(ariable)42 b(whose)i(mem)m(b)s(ers)f(are)h -(assigned)f(b)m(y)g(the)h(`)p Fs(=~)p Ft(')g(binary)e(op)s(erator)630 -3733 y(to)37 b(the)f Fs([[)g Ft(conditional)f(command)h(\(see)h -(Section)f(3.2.4.2)j([Conditional)34 b(Constructs],)630 -3842 y(page)h(10\).)52 b(The)33 b(elemen)m(t)i(with)d(index)g(0)j(is)e -(the)h(p)s(ortion)e(of)i(the)g(string)f(matc)m(hing)h(the)630 -3952 y(en)m(tire)28 b(regular)f(expression.)39 b(The)27 -b(elemen)m(t)i(with)d(index)h Fq(n)g Ft(is)g(the)h(p)s(ortion)f(of)h -(the)g(string)630 4061 y(matc)m(hing)i(the)h Fq(n)p Ft(th)f(paren)m -(thesized)g(sub)s(expression.)38 b(This)28 b(v)-5 b(ariable)29 -b(is)h(read-only)-8 b(.)150 4232 y Fs(BASH_SOURCE)630 -4341 y Ft(An)24 b(arra)m(y)h(v)-5 b(ariable)24 b(whose)g(mem)m(b)s(ers) -g(are)h(the)g(source)f(\014lenames)g(corresp)s(onding)e(to)k(the)630 -4451 y(elemen)m(ts)31 b(in)e(the)h Fs(FUNCNAME)e Ft(arra)m(y)j(v)-5 +b(arra)m(y)i(v)-5 b(ariable)44 b(whose)g(mem)m(b)s(ers)f(are)h +(assigned)g(b)m(y)f(the)h(`)p Fs(=~)p Ft(')g(binary)f(op)s(erator)630 +3733 y(to)37 b(the)f Fs([[)g Ft(conditional)i(command)e(\(see)h +(Section)g(3.2.4.2)i([Conditional)e(Constructs],)630 +3842 y(page)e(10\).)52 b(The)33 b(elemen)m(t)j(with)d(index)g(0)i(is)f +(the)g(p)s(ortion)f(of)h(the)g(string)g(matc)m(hing)h(the)630 +3952 y(en)m(tire)29 b(regular)f(expression.)40 b(The)27 +b(elemen)m(t)j(with)d(index)h Fq(n)f Ft(is)h(the)g(p)s(ortion)g(of)g +(the)g(string)630 4061 y(matc)m(hing)j(the)g Fq(n)p Ft(th)f(paren)m +(thesized)h(sub)s(expression.)39 b(This)29 b(v)-5 b(ariable)31 +b(is)g(read-only)-8 b(.)150 4232 y Fs(BASH_SOURCE)630 +4341 y Ft(An)24 b(arra)m(y)h(v)-5 b(ariable)26 b(whose)e(mem)m(b)s(ers) +g(are)h(the)g(source)f(\014lenames)h(corresp)s(onding)e(to)j(the)630 +4451 y(elemen)m(ts)32 b(in)e(the)g Fs(FUNCNAME)e Ft(arra)m(y)j(v)-5 b(ariable.)150 4622 y Fs(BASH_SUBSHELL)630 4731 y Ft(Incremen)m(ted)34 -b(b)m(y)h(one)f(eac)m(h)i(time)e(a)g(subshell)e(or)i(subshell)d(en)m -(vironmen)m(t)j(is)f(spa)m(wned.)630 4841 y(The)d(initial)d(v)-5 -b(alue)30 b(is)g(0.)150 5011 y Fs(BASH_VERSINFO)630 5121 -y Ft(A)36 b(readonly)f(arra)m(y)h(v)-5 b(ariable)35 b(\(see)h(Section)g -(6.7)h([Arra)m(ys],)h(page)e(72\))h(whose)f(mem)m(b)s(ers)630 -5230 y(hold)31 b(v)m(ersion)h(information)e(for)i(this)f(instance)h(of) -h(Bash.)46 b(The)32 b(v)-5 b(alues)31 b(assigned)h(to)h(the)630 +b(b)m(y)h(one)f(eac)m(h)i(time)f(a)f(subshell)g(or)g(subshell)f(en)m +(vironmen)m(t)i(is)f(spa)m(wned.)630 4841 y(The)c(initial)h(v)-5 +b(alue)31 b(is)g(0.)150 5011 y Fs(BASH_VERSINFO)630 5121 +y Ft(A)36 b(readonly)g(arra)m(y)g(v)-5 b(ariable)37 b(\(see)f(Section)h +(6.7)g([Arra)m(ys],)h(page)e(72\))h(whose)f(mem)m(b)s(ers)630 +5230 y(hold)c(v)m(ersion)h(information)f(for)g(this)g(instance)h(of)g +(Bash.)46 b(The)32 b(v)-5 b(alues)32 b(assigned)h(to)g(the)630 5340 y(arra)m(y)e(mem)m(b)s(ers)e(are)i(as)g(follo)m(ws:)p -eop +eop end %%Page: 57 63 -57 62 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28 -b(V)-8 b(ariables)2457 b(57)630 299 y Fs(BASH_VERSINFO[0])1110 -408 y Ft(The)30 b(ma)5 b(jor)30 b(v)m(ersion)g(n)m(um)m(b)s(er)f(\(the) -i Fq(release)5 b Ft(\).)630 582 y Fs(BASH_VERSINFO[1])1110 -692 y Ft(The)30 b(minor)f(v)m(ersion)h(n)m(um)m(b)s(er)f(\(the)i +TeXDict begin 57 62 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(57)630 299 y Fs(BASH_VERSINFO[0]) +1110 408 y Ft(The)30 b(ma)5 b(jor)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e +(\(the)i Fq(release)5 b Ft(\).)630 582 y Fs(BASH_VERSINFO[1])1110 +692 y Ft(The)30 b(minor)g(v)m(ersion)h(n)m(um)m(b)s(er)e(\(the)i Fq(v)m(ersion)p Ft(\).)630 865 y Fs(BASH_VERSINFO[2])1110 975 y Ft(The)f(patc)m(h)h(lev)m(el.)630 1148 y Fs(BASH_VERSINFO[3])1110 -1258 y Ft(The)f(build)d(v)m(ersion.)630 1431 y Fs(BASH_VERSINFO[4])1110 -1541 y Ft(The)j(release)h(status)f(\(e.g.,)j Fq(b)s(eta1)7 +1258 y Ft(The)f(build)f(v)m(ersion.)630 1431 y Fs(BASH_VERSINFO[4])1110 +1541 y Ft(The)h(release)i(status)e(\(e.g.,)j Fq(b)s(eta1)7 b Ft(\).)630 1714 y Fs(BASH_VERSINFO[5])1110 1824 y Ft(The)30 -b(v)-5 b(alue)30 b(of)g Fs(MACHTYPE)p Ft(.)150 1998 y -Fs(BASH_VERSION)630 2107 y Ft(The)g(v)m(ersion)g(n)m(um)m(b)s(er)f(of)h -(the)h(curren)m(t)f(instance)g(of)h(Bash.)150 2281 y +b(v)-5 b(alue)31 b(of)f Fs(MACHTYPE)p Ft(.)150 1998 y +Fs(BASH_VERSION)630 2107 y Ft(The)g(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h +(the)h(curren)m(t)f(instance)h(of)g(Bash.)150 2281 y Fs(COLUMNS)144 b Ft(Used)36 b(b)m(y)h(the)f Fs(select)f -Ft(builtin)e(command)k(to)g(determine)e(the)i(terminal)e(width)g(when) -630 2390 y(prin)m(ting)28 b(selection)i(lists.)40 b(Automatically)30 -b(set)h(up)s(on)d(receipt)j(of)f(a)h Fs(SIGWINCH)p Ft(.)150 -2564 y Fs(COMP_CWORD)630 2673 y Ft(An)38 b(index)f(in)m(to)h -Fs(${COMP_WORDS})d Ft(of)k(the)g(w)m(ord)f(con)m(taining)g(the)g -(curren)m(t)g(cursor)g(p)s(o-)630 2783 y(sition.)70 b(This)39 -b(v)-5 b(ariable)39 b(is)g(a)m(v)-5 b(ailable)40 b(only)g(in)f(shell)g -(functions)g(in)m(v)m(ok)m(ed)i(b)m(y)f(the)h(pro-)630 -2892 y(grammable)35 b(completion)f(facilities)g(\(see)i(Section)f(8.6)h -([Programmable)f(Completion],)630 3002 y(page)c(103\).)150 +Ft(builtin)h(command)h(to)g(determine)f(the)h(terminal)g(width)f(when) +630 2390 y(prin)m(ting)30 b(selection)i(lists.)42 b(Automatically)33 +b(set)e(up)s(on)d(receipt)k(of)e(a)h Fs(SIGWINCH)p Ft(.)150 +2564 y Fs(COMP_CWORD)630 2673 y Ft(An)38 b(index)g(in)m(to)h +Fs(${COMP_WORDS})c Ft(of)k(the)g(w)m(ord)f(con)m(taining)i(the)e +(curren)m(t)g(cursor)g(p)s(o-)630 2783 y(sition.)72 b(This)40 +b(v)-5 b(ariable)41 b(is)f(a)m(v)-5 b(ailable)43 b(only)e(in)f(shell)h +(functions)f(in)m(v)m(ok)m(ed)i(b)m(y)e(the)h(pro-)630 +2892 y(grammable)36 b(completion)g(facilities)i(\(see)e(Section)g(8.6)g +([Programmable)g(Completion],)630 3002 y(page)31 b(103\).)150 3176 y Fs(COMP_LINE)630 3285 y Ft(The)38 b(curren)m(t)h(command)f -(line.)64 b(This)36 b(v)-5 b(ariable)38 b(is)g(a)m(v)-5 -b(ailable)38 b(only)f(in)h(shell)e(functions)630 3395 -y(and)25 b(external)g(commands)g(in)m(v)m(ok)m(ed)g(b)m(y)g(the)h -(programmable)e(completion)h(facilities)e(\(see)630 3504 -y(Section)30 b(8.6)i([Programmable)e(Completion],)f(page)i(103\).)150 -3678 y Fs(COMP_POINT)630 3787 y Ft(The)25 b(index)f(of)i(the)g(curren)m -(t)f(cursor)g(p)s(osition)f(relativ)m(e)i(to)g(the)g(b)s(eginning)d(of) -i(the)h(curren)m(t)630 3897 y(command.)40 b(If)27 b(the)h(curren)m(t)g -(cursor)g(p)s(osition)e(is)h(at)h(the)g(end)g(of)g(the)g(curren)m(t)g -(command,)630 4007 y(the)i(v)-5 b(alue)29 b(of)h(this)f(v)-5 -b(ariable)29 b(is)g(equal)g(to)i Fs(${#COMP_LINE})p Ft(.)37 -b(This)28 b(v)-5 b(ariable)29 b(is)g(a)m(v)-5 b(ailable)630 -4116 y(only)35 b(in)f(shell)g(functions)g(and)h(external)g(commands)h -(in)m(v)m(ok)m(ed)g(b)m(y)f(the)h(programmable)630 4226 -y(completion)30 b(facilities)e(\(see)k(Section)e(8.6)h([Programmable)f -(Completion],)g(page)h(103\).)150 4399 y Fs(COMP_WORDBREAKS)630 -4509 y Ft(The)e(set)i(of)e(c)m(haracters)j(that)e(the)g(Readline)e -(library)g(treats)i(as)g(w)m(ord)g(separators)g(when)630 -4619 y(p)s(erforming)h(w)m(ord)i(completion.)49 b(If)33 -b Fs(COMP_WORDBREAKS)c Ft(is)k(unset,)h(it)e(loses)i(its)e(sp)s(ecial) -630 4728 y(prop)s(erties,)d(ev)m(en)i(if)e(it)h(is)g(subsequen)m(tly)f -(reset.)150 4902 y Fs(COMP_WORDS)630 5011 y Ft(An)36 -b(arra)m(y)g(v)-5 b(ariable)35 b(consisting)g(of)h(the)g(individual)31 -b(w)m(ords)36 b(in)e(the)i(curren)m(t)g(command)630 5121 -y(line.)86 b(This)44 b(v)-5 b(ariable)45 b(is)g(a)m(v)-5 -b(ailable)45 b(only)g(in)g(shell)f(functions)h(in)m(v)m(ok)m(ed)h(b)m -(y)g(the)g(pro-)630 5230 y(grammable)35 b(completion)f(facilities)g -(\(see)i(Section)f(8.6)h([Programmable)f(Completion],)630 -5340 y(page)c(103\).)p eop +(line.)66 b(This)37 b(v)-5 b(ariable)40 b(is)f(a)m(v)-5 +b(ailable)41 b(only)d(in)h(shell)f(functions)630 3395 +y(and)25 b(external)h(commands)f(in)m(v)m(ok)m(ed)h(b)m(y)f(the)h +(programmable)f(completion)i(facilities)g(\(see)630 3504 +y(Section)k(8.6)h([Programmable)f(Completion],)g(page)g(103\).)150 +3678 y Fs(COMP_POINT)630 3787 y Ft(The)25 b(index)g(of)h(the)g(curren)m +(t)f(cursor)g(p)s(osition)h(relativ)m(e)i(to)e(the)g(b)s(eginning)f(of) +g(the)h(curren)m(t)630 3897 y(command.)40 b(If)27 b(the)h(curren)m(t)g +(cursor)g(p)s(osition)g(is)g(at)g(the)g(end)g(of)g(the)g(curren)m(t)g +(command,)630 4007 y(the)i(v)-5 b(alue)30 b(of)g(this)g(v)-5 +b(ariable)31 b(is)f(equal)g(to)h Fs(${#COMP_LINE})p Ft(.)37 +b(This)29 b(v)-5 b(ariable)31 b(is)f(a)m(v)-5 b(ailable)630 +4116 y(only)36 b(in)f(shell)h(functions)f(and)g(external)h(commands)g +(in)m(v)m(ok)m(ed)h(b)m(y)e(the)h(programmable)630 4226 +y(completion)c(facilities)g(\(see)g(Section)f(8.6)g([Programmable)g +(Completion],)h(page)f(103\).)150 4399 y Fs(COMP_WORDBREAKS)630 +4509 y Ft(The)e(set)i(of)e(c)m(haracters)j(that)e(the)g(Readline)g +(library)g(treats)g(as)g(w)m(ord)g(separators)g(when)630 +4619 y(p)s(erforming)i(w)m(ord)h(completion.)51 b(If)33 +b Fs(COMP_WORDBREAKS)c Ft(is)34 b(unset,)g(it)f(loses)i(its)e(sp)s +(ecial)630 4728 y(prop)s(erties,)d(ev)m(en)h(if)f(it)h(is)g(subsequen)m +(tly)f(reset.)150 4902 y Fs(COMP_WORDS)630 5011 y Ft(An)36 +b(arra)m(y)g(v)-5 b(ariable)37 b(consisting)g(of)f(the)g(individual)f +(w)m(ords)h(in)f(the)h(curren)m(t)g(command)630 5121 +y(line.)88 b(This)45 b(v)-5 b(ariable)47 b(is)f(a)m(v)-5 +b(ailable)48 b(only)e(in)g(shell)g(functions)g(in)m(v)m(ok)m(ed)h(b)m +(y)f(the)g(pro-)630 5230 y(grammable)36 b(completion)g(facilities)i +(\(see)e(Section)g(8.6)g([Programmable)g(Completion],)630 +5340 y(page)31 b(103\).)p eop end %%Page: 58 64 -58 63 bop 150 -116 a Ft(58)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fs(COMPREPLY)630 408 y Ft(An)37 b(arra)m(y)h(v)-5 -b(ariable)36 b(from)h(whic)m(h)f(Bash)h(reads)g(the)h(p)s(ossible)c -(completions)j(generated)630 518 y(b)m(y)c(a)g(shell)f(function)g(in)m -(v)m(ok)m(ed)h(b)m(y)g(the)g(programmable)g(completion)f(facilit)m(y)g -(\(see)i(Sec-)630 628 y(tion)c(8.6)h([Programmable)f(Completion],)g -(page)h(103\).)150 774 y Fs(DIRSTACK)96 b Ft(An)26 b(arra)m(y)h(v)-5 -b(ariable)26 b(con)m(taining)g(the)h(curren)m(t)f(con)m(ten)m(ts)j(of)e -(the)f(directory)h(stac)m(k.)41 b(Direc-)630 883 y(tories)32 -b(app)s(ear)g(in)f(the)i(stac)m(k)h(in)d(the)i(order)f(they)h(are)g -(displa)m(y)m(ed)e(b)m(y)h(the)h Fs(dirs)e Ft(builtin.)630 -993 y(Assigning)d(to)j(mem)m(b)s(ers)f(of)g(this)f(arra)m(y)h(v)-5 -b(ariable)29 b(ma)m(y)i(b)s(e)e(used)h(to)h(mo)s(dify)d(directories)630 -1103 y(already)40 b(in)f(the)i(stac)m(k,)k(but)40 b(the)h -Fs(pushd)e Ft(and)h Fs(popd)f Ft(builtins)e(m)m(ust)k(b)s(e)e(used)h -(to)i(add)630 1212 y(and)37 b(remo)m(v)m(e)h(directories.)61 -b(Assignmen)m(t)36 b(to)i(this)e(v)-5 b(ariable)36 b(will)f(not)i(c)m +TeXDict begin 58 63 bop 150 -116 a Ft(58)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(COMPREPLY)630 408 +y Ft(An)37 b(arra)m(y)h(v)-5 b(ariable)38 b(from)f(whic)m(h)g(Bash)g +(reads)g(the)h(p)s(ossible)e(completions)j(generated)630 +518 y(b)m(y)33 b(a)g(shell)h(function)f(in)m(v)m(ok)m(ed)h(b)m(y)f(the) +g(programmable)h(completion)g(facilit)m(y)h(\(see)f(Sec-)630 +628 y(tion)d(8.6)g([Programmable)g(Completion],)h(page)f(103\).)150 +774 y Fs(DIRSTACK)96 b Ft(An)26 b(arra)m(y)h(v)-5 b(ariable)28 +b(con)m(taining)g(the)f(curren)m(t)f(con)m(ten)m(ts)j(of)e(the)f +(directory)i(stac)m(k.)41 b(Direc-)630 883 y(tories)33 +b(app)s(ear)f(in)g(the)h(stac)m(k)h(in)e(the)h(order)f(they)h(are)g +(displa)m(y)m(ed)g(b)m(y)f(the)h Fs(dirs)e Ft(builtin.)630 +993 y(Assigning)f(to)h(mem)m(b)s(ers)f(of)g(this)g(arra)m(y)g(v)-5 +b(ariable)31 b(ma)m(y)g(b)s(e)e(used)h(to)h(mo)s(dify)e(directories)630 +1103 y(already)41 b(in)f(the)h(stac)m(k,)k(but)40 b(the)h +Fs(pushd)e Ft(and)h Fs(popd)f Ft(builtins)h(m)m(ust)h(b)s(e)e(used)h +(to)i(add)630 1212 y(and)37 b(remo)m(v)m(e)h(directories.)63 +b(Assignmen)m(t)37 b(to)h(this)f(v)-5 b(ariable)38 b(will)g(not)f(c)m (hange)i(the)e(cur-)630 1322 y(ren)m(t)c(directory)-8 -b(.)46 b(If)32 b Fs(DIRSTACK)e Ft(is)h(unset,)h(it)g(loses)g(its)g(sp)s -(ecial)f(prop)s(erties,)g(ev)m(en)i(if)e(it)h(is)630 +b(.)47 b(If)32 b Fs(DIRSTACK)e Ft(is)i(unset,)g(it)h(loses)g(its)g(sp)s +(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)630 1431 y(subsequen)m(tly)d(reset.)150 1577 y Fs(EMACS)240 -b Ft(If)31 b(Bash)h(\014nds)d(this)i(v)-5 b(ariable)30 -b(in)g(the)i(en)m(vironmen)m(t)f(when)f(the)i(shell)d(starts)j(with)e -(v)-5 b(alue)630 1687 y(`)p Fs(t)p Ft(',)38 b(it)d(assumes)h(that)g -(the)h(shell)d(is)h(running)e(in)i(an)h(emacs)g(shell)f(bu\013er)g(and) -g(disables)630 1797 y(line)29 b(editing.)150 1943 y Fs(EUID)288 -b Ft(The)30 b(n)m(umeric)f(e\013ectiv)m(e)j(user)e(id)f(of)h(the)h -(curren)m(t)f(user.)40 b(This)29 b(v)-5 b(ariable)29 -b(is)g(readonly)-8 b(.)150 2089 y Fs(FCEDIT)192 b Ft(The)30 -b(editor)g(used)f(as)i(a)g(default)e(b)m(y)i(the)f(`)p -Fs(-e)p Ft(')g(option)g(to)h(the)g Fs(fc)f Ft(builtin)d(command.)150 -2235 y Fs(FIGNORE)144 b Ft(A)35 b(colon-separated)h(list)e(of)i -(su\016xes)e(to)i(ignore)f(when)f(p)s(erforming)f(\014lename)i(comple-) -630 2345 y(tion.)j(A)25 b(\014le)f(name)h(whose)f(su\016x)g(matc)m(hes) -i(one)f(of)g(the)g(en)m(tries)f(in)g Fs(FIGNORE)e Ft(is)i(excluded)630 -2454 y(from)30 b(the)g(list)f(of)i(matc)m(hed)g(\014le)f(names.)40 -b(A)31 b(sample)e(v)-5 b(alue)30 b(is)g(`)p Fs(.o:~)p +b Ft(If)31 b(Bash)h(\014nds)d(this)j(v)-5 b(ariable)32 +b(in)f(the)h(en)m(vironmen)m(t)g(when)e(the)i(shell)f(starts)h(with)f +(v)-5 b(alue)630 1687 y(`)p Fs(t)p Ft(',)38 b(it)e(assumes)g(that)g +(the)h(shell)f(is)g(running)e(in)i(an)g(emacs)g(shell)h(bu\013er)e(and) +g(disables)630 1797 y(line)c(editing.)150 1943 y Fs(EUID)288 +b Ft(The)30 b(n)m(umeric)g(e\013ectiv)m(e)j(user)d(id)g(of)g(the)h +(curren)m(t)f(user.)40 b(This)30 b(v)-5 b(ariable)31 +b(is)f(readonly)-8 b(.)150 2089 y Fs(FCEDIT)192 b Ft(The)30 +b(editor)h(used)e(as)i(a)g(default)f(b)m(y)h(the)f(`)p +Fs(-e)p Ft(')g(option)h(to)g(the)g Fs(fc)f Ft(builtin)g(command.)150 +2235 y Fs(FIGNORE)144 b Ft(A)35 b(colon-separated)i(list)f(of)g +(su\016xes)e(to)i(ignore)g(when)e(p)s(erforming)g(\014lename)i(comple-) +630 2345 y(tion.)j(A)25 b(\014le)g(name)g(whose)f(su\016x)g(matc)m(hes) +i(one)f(of)g(the)g(en)m(tries)g(in)g Fs(FIGNORE)d Ft(is)j(excluded)630 +2454 y(from)30 b(the)g(list)h(of)g(matc)m(hed)g(\014le)g(names.)40 +b(A)31 b(sample)f(v)-5 b(alue)31 b(is)g(`)p Fs(.o:~)p Ft(')150 2600 y Fs(FUNCNAME)96 b Ft(An)35 b(arra)m(y)i(v)-5 -b(ariable)34 b(con)m(taining)h(the)h(names)g(of)g(all)e(shell)g -(functions)h(curren)m(tly)f(in)h(the)630 2710 y(execution)g(call)g -(stac)m(k.)57 b(The)34 b(elemen)m(t)i(with)e(index)g(0)i(is)e(the)h -(name)h(of)f(an)m(y)h(curren)m(tly-)630 2819 y(executing)h(shell)e -(function.)57 b(The)37 b(b)s(ottom-most)g(elemen)m(t)g(is)f -Fs(")p Ft(main)p Fs(")p Ft(.)57 b(This)35 b(v)-5 b(ariable)630 -2929 y(exists)32 b(only)g(when)g(a)h(shell)e(function)g(is)h -(executing.)48 b(Assignmen)m(ts)32 b(to)h Fs(FUNCNAME)e +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 2710 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 2819 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 +2929 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 3039 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)i(unset,)i(it)e(loses)g(its)g -(sp)s(ecial)630 3148 y(prop)s(erties,)29 b(ev)m(en)i(if)e(it)h(is)g +(status.)57 b(If)36 b Fs(FUNCNAME)d Ft(is)j(unset,)h(it)f(loses)g(its)g +(sp)s(ecial)630 3148 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g (subsequen)m(tly)f(reset.)150 3294 y Fs(GLOBIGNORE)630 -3404 y Ft(A)38 b(colon-separated)h(list)e(of)h(patterns)g(de\014ning)e -(the)i(set)g(of)h(\014lenames)e(to)h(b)s(e)g(ignored)630 -3513 y(b)m(y)31 b(\014lename)f(expansion.)42 b(If)31 -b(a)h(\014lename)e(matc)m(hed)i(b)m(y)f(a)g(\014lename)g(expansion)f -(pattern)630 3623 y(also)i(matc)m(hes)h(one)f(of)g(the)g(patterns)g(in) -e Fs(GLOBIGNORE)p Ft(,)g(it)h(is)g(remo)m(v)m(ed)i(from)e(the)h(list)f +3404 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 +3513 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 3623 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 3733 y(matc)m(hes.)150 3879 y Fs(GROUPS)192 b -Ft(An)36 b(arra)m(y)g(v)-5 b(ariable)35 b(con)m(taining)g(the)h(list)f -(of)h(groups)g(of)g(whic)m(h)e(the)j(curren)m(t)e(user)h(is)f(a)630 -3988 y(mem)m(b)s(er.)47 b(Assignmen)m(ts)32 b(to)h Fs(GROUPS)e +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 +3988 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 4098 y Fs(GROUPS)29 b Ft(is)g(unset,)h(it)g(loses)g(its)g(sp)s -(ecial)f(prop)s(erties,)g(ev)m(en)i(if)e(it)h(is)g(subsequen)m(tly)f -(reset.)150 4244 y Fs(histchars)630 4354 y Ft(Up)d(to)g(three)g(c)m -(haracters)i(whic)m(h)c(con)m(trol)j(history)d(expansion,)i(quic)m(k)g -(substitution,)f(and)630 4463 y(tok)m(enization)k(\(see)h(Section)e -(9.3)i([History)e(In)m(teraction],)i(page)g(111\).)41 -b(The)29 b(\014rst)e(c)m(harac-)630 4573 y(ter)j(is)e(the)h -Fq(history)f(expansion)g Ft(c)m(haracter,)k(that)e(is,)e(the)i(c)m -(haracter)h(whic)m(h)c(signi\014es)h(the)630 4682 y(start)d(of)f(a)h -(history)e(expansion,)i(normally)d(`)p Fs(!)p Ft('.)39 -b(The)24 b(second)g(c)m(haracter)i(is)d(the)h(c)m(haracter)630 -4792 y(whic)m(h)35 b(signi\014es)f(`quic)m(k)i(substitution')e(when)h +b(If)630 4098 y Fs(GROUPS)29 b Ft(is)h(unset,)g(it)h(loses)g(its)g(sp)s +(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g(subsequen)m(tly)f +(reset.)150 4244 y Fs(histchars)630 4354 y Ft(Up)c(to)g(three)g(c)m +(haracters)i(whic)m(h)d(con)m(trol)j(history)d(expansion,)i(quic)m(k)g +(substitution,)g(and)630 4463 y(tok)m(enization)k(\(see)f(Section)f +(9.3)h([History)f(In)m(teraction],)i(page)f(111\).)41 +b(The)29 b(\014rst)e(c)m(harac-)630 4573 y(ter)j(is)f(the)g +Fq(history)g(expansion)g Ft(c)m(haracter,)j(that)e(is,)f(the)h(c)m +(haracter)h(whic)m(h)d(signi\014es)i(the)630 4682 y(start)25 +b(of)f(a)h(history)f(expansion,)i(normally)e(`)p Fs(!)p +Ft('.)39 b(The)24 b(second)g(c)m(haracter)i(is)e(the)g(c)m(haracter)630 +4792 y(whic)m(h)36 b(signi\014es)g(`quic)m(k)h(substitution')f(when)f (seen)h(as)g(the)g(\014rst)f(c)m(haracter)j(on)e(a)g(line,)630 -4902 y(normally)25 b(`)p Fs(^)p Ft('.)39 b(The)26 b(optional)g(third)e -(c)m(haracter)k(is)d(the)i(c)m(haracter)h(whic)m(h)d(indicates)g(that) -630 5011 y(the)34 b(remainder)e(of)i(the)g(line)e(is)g(a)i(commen)m(t)h +4902 y(normally)27 b(`)p Fs(^)p Ft('.)39 b(The)26 b(optional)i(third)d +(c)m(haracter)j(is)e(the)h(c)m(haracter)h(whic)m(h)e(indicates)h(that) +630 5011 y(the)34 b(remainder)f(of)h(the)g(line)g(is)f(a)h(commen)m(t)h (when)e(found)f(as)i(the)g(\014rst)f(c)m(haracter)i(of)f(a)630 -5121 y(w)m(ord,)i(usually)d(`)p Fs(#)p Ft('.)55 b(The)34 -b(history)g(commen)m(t)i(c)m(haracter)h(causes)e(history)f -(substitution)630 5230 y(to)27 b(b)s(e)f(skipp)s(ed)e(for)j(the)f -(remaining)f(w)m(ords)h(on)h(the)f(line.)38 b(It)27 b(do)s(es)f(not)h -(necessarily)e(cause)630 5340 y(the)31 b(shell)d(parser)i(to)h(treat)g -(the)g(rest)g(of)f(the)h(line)d(as)j(a)g(commen)m(t.)p -eop +5121 y(w)m(ord,)i(usually)f(`)p Fs(#)p Ft('.)55 b(The)34 +b(history)h(commen)m(t)h(c)m(haracter)h(causes)e(history)g +(substitution)630 5230 y(to)27 b(b)s(e)f(skipp)s(ed)f(for)i(the)f +(remaining)h(w)m(ords)f(on)h(the)f(line.)40 b(It)27 b(do)s(es)f(not)h +(necessarily)g(cause)630 5340 y(the)k(shell)f(parser)g(to)h(treat)g +(the)g(rest)g(of)f(the)h(line)f(as)h(a)g(commen)m(t.)p +eop end %%Page: 59 65 -59 64 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28 -b(V)-8 b(ariables)2457 b(59)150 299 y Fs(HISTCMD)144 -b Ft(The)35 b(history)g(n)m(um)m(b)s(er,)h(or)f(index)f(in)h(the)h -(history)e(list,)i(of)g(the)g(curren)m(t)f(command.)56 -b(If)630 408 y Fs(HISTCMD)28 b Ft(is)g(unset,)i(it)f(loses)h(its)f(sp)s -(ecial)f(prop)s(erties,)h(ev)m(en)h(if)f(it)g(is)g(subsequen)m(tly)f -(reset.)150 578 y Fs(HISTCONTROL)630 688 y Ft(A)40 b(colon-separated)h -(list)e(of)h(v)-5 b(alues)39 b(con)m(trolling)g(ho)m(w)h(commands)g -(are)h(sa)m(v)m(ed)g(on)f(the)630 797 y(history)28 b(list.)39 -b(If)28 b(the)h(list)f(of)h(v)-5 b(alues)28 b(includes)e(`)p -Fs(ignorespace)p Ft(',)h(lines)g(whic)m(h)h(b)s(egin)f(with)630 -907 y(a)39 b(space)g(c)m(haracter)i(are)e(not)g(sa)m(v)m(ed)g(in)f(the) -h(history)e(list.)64 b(A)39 b(v)-5 b(alue)38 b(of)h(`)p -Fs(ignoredups)p Ft(')630 1017 y(causes)34 b(lines)f(whic)m(h)g(matc)m -(h)i(the)f(previous)e(history)h(en)m(try)i(to)g(not)f(b)s(e)f(sa)m(v)m +TeXDict begin 59 64 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(59)150 299 y Fs(HISTCMD)144 +b Ft(The)35 b(history)h(n)m(um)m(b)s(er,)g(or)f(index)g(in)h(the)g +(history)f(list,)j(of)e(the)g(curren)m(t)f(command.)56 +b(If)630 408 y Fs(HISTCMD)28 b Ft(is)h(unset,)h(it)g(loses)h(its)f(sp)s +(ecial)g(prop)s(erties,)g(ev)m(en)g(if)g(it)g(is)g(subsequen)m(tly)f +(reset.)150 578 y Fs(HISTCONTROL)630 688 y Ft(A)40 b(colon-separated)i +(list)f(of)f(v)-5 b(alues)40 b(con)m(trolling)i(ho)m(w)e(commands)g +(are)h(sa)m(v)m(ed)g(on)f(the)630 797 y(history)29 b(list.)41 +b(If)28 b(the)h(list)h(of)f(v)-5 b(alues)29 b(includes)f(`)p +Fs(ignorespace)p Ft(',)f(lines)i(whic)m(h)g(b)s(egin)f(with)630 +907 y(a)39 b(space)g(c)m(haracter)i(are)e(not)g(sa)m(v)m(ed)g(in)g(the) +g(history)f(list.)66 b(A)39 b(v)-5 b(alue)39 b(of)g(`)p +Fs(ignoredups)p Ft(')630 1017 y(causes)34 b(lines)h(whic)m(h)f(matc)m +(h)h(the)f(previous)f(history)h(en)m(try)h(to)g(not)f(b)s(e)f(sa)m(v)m (ed.)53 b(A)34 b(v)-5 b(alue)630 1126 y(of)32 b(`)p Fs(ignoreboth)p -Ft(')d(is)i(shorthand)f(for)i(`)p Fs(ignorespace)p Ft(')d(and)i(`)p -Fs(ignoredups)p Ft('.)42 b(A)32 b(v)-5 b(alue)31 b(of)630 -1236 y(`)p Fs(erasedups)p Ft(')g(causes)i(all)f(previous)g(lines)f -(matc)m(hing)i(the)g(curren)m(t)g(line)e(to)j(b)s(e)e(remo)m(v)m(ed)630 -1345 y(from)42 b(the)h(history)e(list)h(b)s(efore)g(that)h(line)e(is)h -(sa)m(v)m(ed.)78 b(An)m(y)43 b(v)-5 b(alue)42 b(not)h(in)e(the)i(ab)s -(o)m(v)m(e)630 1455 y(list)33 b(is)h(ignored.)52 b(If)34 -b Fs(HISTCONTROL)e Ft(is)h(unset,)j(or)e(do)s(es)h(not)g(include)d(a)j -(v)-5 b(alid)33 b(v)-5 b(alue,)35 b(all)630 1564 y(lines)28 -b(read)i(b)m(y)g(the)g(shell)e(parser)i(are)g(sa)m(v)m(ed)h(on)f(the)g -(history)f(list,)g(sub)5 b(ject)30 b(to)g(the)g(v)-5 +Ft(')d(is)j(shorthand)e(for)i(`)p Fs(ignorespace)p Ft(')d(and)i(`)p +Fs(ignoredups)p Ft('.)42 b(A)32 b(v)-5 b(alue)32 b(of)630 +1236 y(`)p Fs(erasedups)p Ft(')f(causes)i(all)h(previous)f(lines)g +(matc)m(hing)h(the)f(curren)m(t)g(line)g(to)h(b)s(e)e(remo)m(v)m(ed)630 +1345 y(from)42 b(the)h(history)f(list)i(b)s(efore)e(that)h(line)g(is)g +(sa)m(v)m(ed.)78 b(An)m(y)43 b(v)-5 b(alue)43 b(not)g(in)f(the)h(ab)s +(o)m(v)m(e)630 1455 y(list)35 b(is)g(ignored.)53 b(If)34 +b Fs(HISTCONTROL)e Ft(is)i(unset,)i(or)e(do)s(es)h(not)g(include)f(a)h +(v)-5 b(alid)35 b(v)-5 b(alue,)36 b(all)630 1564 y(lines)30 +b(read)g(b)m(y)g(the)g(shell)g(parser)g(are)g(sa)m(v)m(ed)h(on)f(the)g +(history)g(list,)h(sub)5 b(ject)30 b(to)g(the)g(v)-5 b(alue)630 1674 y(of)42 b Fs(HISTIGNORE)p Ft(.)73 b(The)42 -b(second)g(and)g(subsequen)m(t)f(lines)f(of)j(a)f(m)m(ulti-line)d(comp) +b(second)g(and)g(subsequen)m(t)f(lines)h(of)h(a)f(m)m(ulti-line)h(comp) s(ound)630 1784 y(command)33 b(are)h(not)g(tested,)i(and)d(are)h(added) -f(to)h(the)g(history)f(regardless)g(of)h(the)f(v)-5 b(alue)630 +f(to)h(the)g(history)g(regardless)g(of)g(the)f(v)-5 b(alue)630 1893 y(of)31 b Fs(HISTCONTROL)p Ft(.)150 2063 y Fs(HISTFILE)96 -b Ft(The)27 b(name)h(of)g(the)g(\014le)f(to)i(whic)m(h)e(the)h(command) -f(history)g(is)g(sa)m(v)m(ed.)41 b(The)27 b(default)g(v)-5 -b(alue)630 2172 y(is)29 b(`)p Fs(~/.bash_history)p Ft('.)150 -2342 y Fs(HISTFILESIZE)630 2452 y Ft(The)d(maxim)m(um)e(n)m(um)m(b)s -(er)h(of)h(lines)f(con)m(tained)h(in)f(the)h(history)f(\014le.)38 -b(When)26 b(this)f(v)-5 b(ariable)630 2561 y(is)24 b(assigned)h(a)h(v) --5 b(alue,)26 b(the)g(history)e(\014le)h(is)f(truncated,)j(if)d -(necessary)-8 b(,)28 b(to)e(con)m(tain)f(no)h(more)630 -2671 y(than)34 b(that)h(n)m(um)m(b)s(er)d(of)j(lines.)50 -b(The)34 b(history)f(\014le)g(is)g(also)h(truncated)g(to)h(this)e(size) -h(after)630 2781 y(writing)28 b(it)i(when)g(an)g(in)m(teractiv)m(e)h -(shell)e(exits.)40 b(The)30 b(default)g(v)-5 b(alue)30 -b(is)f(500.)150 2950 y Fs(HISTIGNORE)630 3060 y Ft(A)k(colon-separated) -g(list)e(of)i(patterns)f(used)g(to)h(decide)f(whic)m(h)f(command)h -(lines)f(should)630 3169 y(b)s(e)h(sa)m(v)m(ed)h(on)g(the)f(history)g -(list.)45 b(Eac)m(h)33 b(pattern)g(is)e(anc)m(hored)i(at)g(the)f(b)s -(eginning)e(of)j(the)630 3279 y(line)41 b(and)g(m)m(ust)h(matc)m(h)h -(the)g(complete)g(line)d(\(no)j(implicit)c(`)p Fs(*)p -Ft(')j(is)f(app)s(ended\).)75 b(Eac)m(h)630 3389 y(pattern)42 -b(is)f(tested)h(against)g(the)g(line)e(after)i(the)g(c)m(hec)m(ks)h(sp) -s(eci\014ed)d(b)m(y)i Fs(HISTCONTROL)630 3498 y Ft(are)37 -b(applied.)57 b(In)36 b(addition)f(to)i(the)g(normal)f(shell)e(pattern) -j(matc)m(hing)g(c)m(haracters,)j(`)p Fs(&)p Ft(')630 -3608 y(matc)m(hes)d(the)f(previous)f(history)g(line.)55 -b(`)p Fs(&)p Ft(')36 b(ma)m(y)h(b)s(e)e(escap)s(ed)h(using)f(a)h(bac)m -(kslash;)j(the)630 3717 y(bac)m(kslash)33 b(is)g(remo)m(v)m(ed)i(b)s -(efore)e(attempting)h(a)h(matc)m(h.)51 b(The)34 b(second)f(and)h -(subsequen)m(t)630 3827 y(lines)c(of)j(a)g(m)m(ulti-line)c(comp)s(ound) -i(command)h(are)h(not)f(tested,)i(and)e(are)g(added)g(to)h(the)630 -3937 y(history)c(regardless)h(of)h(the)f(v)-5 b(alue)30 -b(of)h Fs(HISTIGNORE)p Ft(.)630 4076 y Fs(HISTIGNORE)20 -b Ft(subsumes)g(the)j(function)e(of)i Fs(HISTCONTROL)p -Ft(.)35 b(A)23 b(pattern)f(of)h(`)p Fs(&)p Ft(')g(is)e(iden)m(tical)630 -4186 y(to)26 b Fs(ignoredups)p Ft(,)e(and)h(a)h(pattern)g(of)f(`)p -Fs([)31 b(]*)p Ft(')25 b(is)g(iden)m(tical)f(to)i Fs(ignorespace)p +b Ft(The)27 b(name)h(of)g(the)g(\014le)g(to)h(whic)m(h)f(the)g(command) +f(history)h(is)g(sa)m(v)m(ed.)41 b(The)27 b(default)h(v)-5 +b(alue)630 2172 y(is)30 b(`)p Fs(~/.bash_history)p Ft('.)150 +2342 y Fs(HISTFILESIZE)630 2452 y Ft(The)c(maxim)m(um)f(n)m(um)m(b)s +(er)g(of)h(lines)h(con)m(tained)g(in)f(the)g(history)g(\014le.)39 +b(When)26 b(this)g(v)-5 b(ariable)630 2561 y(is)25 b(assigned)h(a)g(v) +-5 b(alue,)27 b(the)f(history)f(\014le)h(is)f(truncated,)i(if)e +(necessary)-8 b(,)28 b(to)e(con)m(tain)g(no)g(more)630 +2671 y(than)34 b(that)h(n)m(um)m(b)s(er)d(of)j(lines.)52 +b(The)34 b(history)g(\014le)g(is)g(also)h(truncated)f(to)h(this)f(size) +h(after)630 2781 y(writing)30 b(it)h(when)f(an)g(in)m(teractiv)m(e)j +(shell)e(exits.)41 b(The)30 b(default)h(v)-5 b(alue)31 +b(is)f(500.)150 2950 y Fs(HISTIGNORE)630 3060 y Ft(A)j(colon-separated) +h(list)f(of)g(patterns)f(used)g(to)h(decide)g(whic)m(h)f(command)g +(lines)h(should)630 3169 y(b)s(e)f(sa)m(v)m(ed)h(on)g(the)f(history)h +(list.)47 b(Eac)m(h)33 b(pattern)g(is)f(anc)m(hored)h(at)g(the)f(b)s +(eginning)g(of)h(the)630 3279 y(line)43 b(and)e(m)m(ust)h(matc)m(h)h +(the)g(complete)h(line)e(\(no)h(implicit)g(`)p Fs(*)p +Ft(')f(is)g(app)s(ended\).)75 b(Eac)m(h)630 3389 y(pattern)42 +b(is)g(tested)g(against)h(the)f(line)g(after)g(the)g(c)m(hec)m(ks)h(sp) +s(eci\014ed)e(b)m(y)h Fs(HISTCONTROL)630 3498 y Ft(are)37 +b(applied.)59 b(In)36 b(addition)h(to)g(the)g(normal)g(shell)f(pattern) +h(matc)m(hing)h(c)m(haracters,)i(`)p Fs(&)p Ft(')630 +3608 y(matc)m(hes)d(the)f(previous)g(history)g(line.)57 +b(`)p Fs(&)p Ft(')36 b(ma)m(y)h(b)s(e)e(escap)s(ed)h(using)g(a)g(bac)m +(kslash;)k(the)630 3717 y(bac)m(kslash)34 b(is)g(remo)m(v)m(ed)h(b)s +(efore)e(attempting)i(a)g(matc)m(h.)51 b(The)34 b(second)f(and)h +(subsequen)m(t)630 3827 y(lines)e(of)h(a)g(m)m(ulti-line)g(comp)s(ound) +e(command)h(are)h(not)f(tested,)i(and)e(are)g(added)g(to)h(the)630 +3937 y(history)d(regardless)h(of)g(the)f(v)-5 b(alue)31 +b(of)g Fs(HISTIGNORE)p Ft(.)630 4076 y Fs(HISTIGNORE)20 +b Ft(subsumes)g(the)j(function)f(of)h Fs(HISTCONTROL)p +Ft(.)35 b(A)23 b(pattern)f(of)h(`)p Fs(&)p Ft(')g(is)f(iden)m(tical)630 +4186 y(to)k Fs(ignoredups)p Ft(,)e(and)h(a)h(pattern)g(of)f(`)p +Fs([)31 b(]*)p Ft(')25 b(is)h(iden)m(tical)h(to)f Fs(ignorespace)p Ft(.)36 b(Com)m(bining)630 4295 y(these)30 b(t)m(w)m(o)h(patterns,)f -(separating)f(them)h(with)e(a)i(colon,)g(pro)m(vides)e(the)i -(functionalit)m(y)e(of)630 4405 y Fs(ignoreboth)p Ft(.)150 -4575 y Fs(HISTSIZE)96 b Ft(The)42 b(maxim)m(um)f(n)m(um)m(b)s(er)g(of)i -(commands)e(to)j(remem)m(b)s(er)d(on)h(the)h(history)e(list.)75 -b(The)630 4684 y(default)30 b(v)-5 b(alue)29 b(is)h(500.)150 -4854 y Fs(HISTTIMEFORMAT)630 4963 y Ft(If)44 b(this)f(v)-5 -b(ariable)43 b(is)g(set)h(and)g(not)g(n)m(ull,)i(its)e(v)-5 -b(alue)43 b(is)g(used)h(as)g(a)h(format)f(string)f(for)630 -5073 y Fq(strftime)c Ft(to)c(prin)m(t)e(the)i(time)f(stamp)g(asso)s -(ciated)h(with)f(eac)m(h)h(history)f(en)m(try)g(displa)m(y)m(ed)630 -5183 y(b)m(y)g(the)f Fs(history)f Ft(builtin.)47 b(If)33 -b(this)g(v)-5 b(ariable)32 b(is)h(set,)i(time)e(stamps)h(are)g(written) -e(to)j(the)630 5292 y(history)29 b(\014le)h(so)g(they)h(ma)m(y)g(b)s(e) -f(preserv)m(ed)g(across)h(shell)d(sessions.)p eop +(separating)g(them)g(with)f(a)h(colon,)h(pro)m(vides)e(the)h +(functionalit)m(y)h(of)630 4405 y Fs(ignoreboth)p Ft(.)150 +4575 y Fs(HISTSIZE)96 b Ft(The)42 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i +(commands)e(to)j(remem)m(b)s(er)d(on)h(the)h(history)f(list.)77 +b(The)630 4684 y(default)31 b(v)-5 b(alue)30 b(is)h(500.)150 +4854 y Fs(HISTTIMEFORMAT)630 4963 y Ft(If)44 b(this)g(v)-5 +b(ariable)45 b(is)f(set)g(and)g(not)g(n)m(ull,)k(its)d(v)-5 +b(alue)44 b(is)g(used)g(as)g(a)h(format)f(string)g(for)630 +5073 y Fq(strftime)c Ft(to)35 b(prin)m(t)f(the)h(time)g(stamp)f(asso)s +(ciated)i(with)f(eac)m(h)g(history)g(en)m(try)f(displa)m(y)m(ed)630 +5183 y(b)m(y)g(the)f Fs(history)f Ft(builtin.)50 b(If)33 +b(this)h(v)-5 b(ariable)34 b(is)g(set,)h(time)f(stamps)g(are)g(written) +f(to)i(the)630 5292 y(history)30 b(\014le)h(so)f(they)h(ma)m(y)g(b)s(e) +f(preserv)m(ed)g(across)h(shell)f(sessions.)p eop end %%Page: 60 66 -60 65 bop 150 -116 a Ft(60)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fs(HOSTFILE)96 b Ft(Con)m(tains)38 b(the)g(name)g(of)h(a)g -(\014le)e(in)g(the)h(same)h(format)g(as)f(`)p Fs(/etc/hosts)p -Ft(')e(that)j(should)630 408 y(b)s(e)i(read)h(when)f(the)i(shell)d -(needs)h(to)i(complete)g(a)f(hostname.)76 b(The)42 b(list)e(of)i(p)s -(ossible)630 518 y(hostname)26 b(completions)e(ma)m(y)j(b)s(e)d(c)m -(hanged)j(while)c(the)j(shell)e(is)g(running;)h(the)h(next)f(time)630 -628 y(hostname)37 b(completion)g(is)f(attempted)i(after)g(the)f(v)-5 -b(alue)36 b(is)h(c)m(hanged,)i(Bash)e(adds)g(the)630 -737 y(con)m(ten)m(ts)27 b(of)f(the)g(new)f(\014le)g(to)i(the)f -(existing)e(list.)38 b(If)25 b Fs(HOSTFILE)f Ft(is)h(set,)i(but)e(has)h -(no)f(v)-5 b(alue,)630 847 y(Bash)41 b(attempts)g(to)g(read)f(`)p -Fs(/etc/hosts)p Ft(')f(to)i(obtain)f(the)g(list)f(of)i(p)s(ossible)d +TeXDict begin 60 65 bop 150 -116 a Ft(60)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(HOSTFILE)96 b Ft(Con)m(tains)39 +b(the)f(name)g(of)h(a)g(\014le)f(in)g(the)g(same)h(format)g(as)f(`)p +Fs(/etc/hosts)p Ft(')e(that)j(should)630 408 y(b)s(e)i(read)h(when)f +(the)i(shell)f(needs)f(to)i(complete)h(a)e(hostname.)76 +b(The)42 b(list)g(of)g(p)s(ossible)630 518 y(hostname)26 +b(completions)g(ma)m(y)h(b)s(e)d(c)m(hanged)j(while)e(the)h(shell)g(is) +f(running;)h(the)g(next)f(time)630 628 y(hostname)37 +b(completion)i(is)e(attempted)h(after)g(the)f(v)-5 b(alue)37 +b(is)h(c)m(hanged,)h(Bash)e(adds)g(the)630 737 y(con)m(ten)m(ts)27 +b(of)f(the)g(new)f(\014le)h(to)h(the)f(existing)g(list.)40 +b(If)25 b Fs(HOSTFILE)f Ft(is)i(set,)h(but)e(has)h(no)f(v)-5 +b(alue,)630 847 y(Bash)41 b(attempts)g(to)g(read)f(`)p +Fs(/etc/hosts)p Ft(')f(to)i(obtain)g(the)f(list)h(of)g(p)s(ossible)f (hostname)630 956 y(completions.)i(When)30 b Fs(HOSTFILE)e -Ft(is)i(unset,)g(the)g(hostname)h(list)e(is)g(cleared.)150 +Ft(is)j(unset,)f(the)g(hostname)h(list)g(is)f(cleared.)150 1125 y Fs(HOSTNAME)96 b Ft(The)30 b(name)g(of)h(the)f(curren)m(t)h -(host.)150 1294 y Fs(HOSTTYPE)96 b Ft(A)30 b(string)g(describing)e(the) -i(mac)m(hine)g(Bash)h(is)e(running)f(on.)150 1462 y Fs(IGNOREEOF)630 -1572 y Ft(Con)m(trols)e(the)i(action)f(of)g(the)g(shell)e(on)i(receipt) -g(of)g(an)g Fs(EOF)f Ft(c)m(haracter)i(as)g(the)f(sole)g(input.)630 -1681 y(If)j(set,)i(the)f(v)-5 b(alue)31 b(denotes)g(the)g(n)m(um)m(b)s -(er)f(of)h(consecutiv)m(e)h Fs(EOF)e Ft(c)m(haracters)i(that)f(can)h(b) +(host.)150 1294 y Fs(HOSTTYPE)96 b Ft(A)30 b(string)h(describing)f(the) +g(mac)m(hine)h(Bash)g(is)f(running)f(on.)150 1462 y Fs(IGNOREEOF)630 +1572 y Ft(Con)m(trols)e(the)h(action)g(of)f(the)g(shell)g(on)g(receipt) +h(of)f(an)g Fs(EOF)f Ft(c)m(haracter)i(as)g(the)f(sole)h(input.)630 +1681 y(If)i(set,)i(the)f(v)-5 b(alue)32 b(denotes)f(the)g(n)m(um)m(b)s +(er)f(of)h(consecutiv)m(e)i Fs(EOF)d Ft(c)m(haracters)i(that)f(can)h(b) s(e)630 1791 y(read)40 b(as)f(the)h(\014rst)f(c)m(haracter)i(on)f(an)f -(input)f(line)g(b)s(efore)h(the)h(shell)e(will)f(exit.)69 -b(If)39 b(the)630 1901 y(v)-5 b(ariable)36 b(exists)g(but)g(do)s(es)g -(not)h(ha)m(v)m(e)h(a)g(n)m(umeric)d(v)-5 b(alue)36 b(\(or)i(has)e(no)h -(v)-5 b(alue\))36 b(then)h(the)630 2010 y(default)30 -b(is)g(10.)43 b(If)30 b(the)h(v)-5 b(ariable)29 b(do)s(es)i(not)g -(exist,)g(then)f Fs(EOF)g Ft(signi\014es)f(the)i(end)f(of)h(input)630 -2120 y(to)g(the)g(shell.)39 b(This)28 b(is)i(only)f(in)g(e\013ect)j -(for)e(in)m(teractiv)m(e)h(shells.)150 2288 y Fs(INPUTRC)144 -b Ft(The)68 b(name)h(of)f(the)h(Readline)e(initialization)f(\014le,)77 -b(o)m(v)m(erriding)67 b(the)i(default)f(of)630 2398 y(`)p +(input)g(line)h(b)s(efore)f(the)h(shell)g(will)g(exit.)70 +b(If)39 b(the)630 1901 y(v)-5 b(ariable)38 b(exists)f(but)f(do)s(es)g +(not)h(ha)m(v)m(e)h(a)g(n)m(umeric)e(v)-5 b(alue)37 b(\(or)h(has)e(no)h +(v)-5 b(alue\))37 b(then)g(the)630 2010 y(default)31 +b(is)g(10.)43 b(If)30 b(the)h(v)-5 b(ariable)31 b(do)s(es)g(not)g +(exist,)h(then)e Fs(EOF)g Ft(signi\014es)h(the)g(end)f(of)h(input)630 +2120 y(to)g(the)g(shell.)41 b(This)29 b(is)i(only)f(in)g(e\013ect)i +(for)e(in)m(teractiv)m(e)j(shells.)150 2288 y Fs(INPUTRC)144 +b Ft(The)68 b(name)h(of)f(the)h(Readline)g(initialization)j(\014le,)78 +b(o)m(v)m(erriding)69 b(the)g(default)g(of)630 2398 y(`)p Fs(~/.inputrc)p Ft('.)150 2567 y Fs(LANG)288 b Ft(Used)28 -b(to)h(determine)e(the)h(lo)s(cale)f(category)j(for)e(an)m(y)h -(category)h(not)e(sp)s(eci\014cally)d(selected)630 2676 -y(with)k(a)i(v)-5 b(ariable)29 b(starting)h(with)f Fs(LC_)p -Ft(.)150 2845 y Fs(LC_ALL)192 b Ft(This)27 b(v)-5 b(ariable)27 -b(o)m(v)m(errides)i(the)g(v)-5 b(alue)28 b(of)h Fs(LANG)f -Ft(and)g(an)m(y)h(other)g Fs(LC_)f Ft(v)-5 b(ariable)27 -b(sp)s(ecifying)630 2954 y(a)k(lo)s(cale)f(category)-8 -b(.)150 3123 y Fs(LC_COLLATE)630 3232 y Ft(This)36 b(v)-5 -b(ariable)36 b(determines)h(the)h(collation)f(order)g(used)g(when)f -(sorting)h(the)h(results)f(of)630 3342 y(\014lename)e(expansion,)i(and) -f(determines)f(the)i(b)s(eha)m(vior)e(of)h(range)h(expressions,)g -(equiv-)630 3452 y(alence)e(classes,)h(and)f(collating)f(sequences)h -(within)d(\014lename)i(expansion)g(and)g(pattern)630 -3561 y(matc)m(hing)c(\(see)i(Section)e(3.5.8)i([Filename)e(Expansion],) -f(page)i(22\).)150 3730 y Fs(LC_CTYPE)96 b Ft(This)35 -b(v)-5 b(ariable)35 b(determines)g(the)i(in)m(terpretation)f(of)h(c)m -(haracters)h(and)e(the)g(b)s(eha)m(vior)g(of)630 3839 -y(c)m(haracter)46 b(classes)f(within)d(\014lename)i(expansion)g(and)g -(pattern)h(matc)m(hing)g(\(see)g(Sec-)630 3949 y(tion)30 -b(3.5.8)i([Filename)e(Expansion],)f(page)i(22\).)150 -4118 y Fs(LC_MESSAGES)630 4227 y Ft(This)24 b(v)-5 b(ariable)25 -b(determines)g(the)h(lo)s(cale)g(used)f(to)i(translate)f(double-quoted) +b(to)h(determine)f(the)g(lo)s(cale)h(category)h(for)e(an)m(y)h +(category)h(not)e(sp)s(eci\014cally)g(selected)630 2676 +y(with)i(a)h(v)-5 b(ariable)31 b(starting)g(with)f Fs(LC_)p +Ft(.)150 2845 y Fs(LC_ALL)192 b Ft(This)28 b(v)-5 b(ariable)29 +b(o)m(v)m(errides)h(the)f(v)-5 b(alue)29 b(of)g Fs(LANG)f +Ft(and)g(an)m(y)h(other)g Fs(LC_)f Ft(v)-5 b(ariable)29 +b(sp)s(ecifying)630 2954 y(a)i(lo)s(cale)h(category)-8 +b(.)150 3123 y Fs(LC_COLLATE)630 3232 y Ft(This)37 b(v)-5 +b(ariable)38 b(determines)g(the)g(collation)i(order)d(used)g(when)f +(sorting)i(the)g(results)g(of)630 3342 y(\014lename)e(expansion,)i(and) +e(determines)g(the)h(b)s(eha)m(vior)f(of)g(range)h(expressions,)h +(equiv-)630 3452 y(alence)e(classes,)h(and)e(collating)i(sequences)e +(within)f(\014lename)h(expansion)g(and)f(pattern)630 +3561 y(matc)m(hing)d(\(see)h(Section)f(3.5.8)h([Filename)g(Expansion],) +e(page)h(22\).)150 3730 y Fs(LC_CTYPE)96 b Ft(This)36 +b(v)-5 b(ariable)37 b(determines)f(the)h(in)m(terpretation)h(of)f(c)m +(haracters)h(and)e(the)g(b)s(eha)m(vior)h(of)630 3839 +y(c)m(haracter)46 b(classes)g(within)e(\014lename)h(expansion)g(and)f +(pattern)h(matc)m(hing)h(\(see)f(Sec-)630 3949 y(tion)31 +b(3.5.8)h([Filename)g(Expansion],)e(page)h(22\).)150 +4118 y Fs(LC_MESSAGES)630 4227 y Ft(This)25 b(v)-5 b(ariable)27 +b(determines)f(the)g(lo)s(cale)i(used)d(to)i(translate)g(double-quoted) f(strings)g(pre-)630 4337 y(ceded)31 b(b)m(y)f(a)h(`)p -Fs($)p Ft(')f(\(see)h(Section)g(3.1.2.5)h([Lo)s(cale)f(T)-8 -b(ranslation],)30 b(page)h(7\).)150 4505 y Fs(LC_NUMERIC)630 -4615 y Ft(This)e(v)-5 b(ariable)29 b(determines)g(the)i(lo)s(cale)f -(category)i(used)e(for)g(n)m(um)m(b)s(er)f(formatting.)150 -4784 y Fs(LINENO)192 b Ft(The)30 b(line)f(n)m(um)m(b)s(er)g(in)g(the)h -(script)g(or)g(shell)e(function)i(curren)m(tly)f(executing.)150 +Fs($)p Ft(')f(\(see)h(Section)h(3.1.2.5)g([Lo)s(cale)g(T)-8 +b(ranslation],)32 b(page)f(7\).)150 4505 y Fs(LC_NUMERIC)630 +4615 y Ft(This)f(v)-5 b(ariable)31 b(determines)f(the)h(lo)s(cale)h +(category)g(used)e(for)g(n)m(um)m(b)s(er)f(formatting.)150 +4784 y Fs(LINENO)192 b Ft(The)30 b(line)h(n)m(um)m(b)s(er)e(in)h(the)g +(script)h(or)f(shell)g(function)h(curren)m(tly)f(executing.)150 4952 y Fs(LINES)240 b Ft(Used)25 b(b)m(y)g(the)g Fs(select)e -Ft(builtin)f(command)j(to)h(determine)e(the)h(column)f(length)g(for)h -(prin)m(t-)630 5062 y(ing)30 b(selection)g(lists.)39 -b(Automatically)30 b(set)h(up)s(on)e(receipt)h(of)g(a)h +Ft(builtin)i(command)g(to)h(determine)f(the)g(column)g(length)g(for)g +(prin)m(t-)630 5062 y(ing)31 b(selection)h(lists.)41 +b(Automatically)33 b(set)e(up)s(on)e(receipt)i(of)f(a)h Fs(SIGWINCH)p Ft(.)150 5230 y Fs(MACHTYPE)96 b Ft(A)26 -b(string)f(that)i(fully)d(describ)s(es)g(the)i(system)g(t)m(yp)s(e)h -(on)f(whic)m(h)e(Bash)j(is)e(executing,)i(in)e(the)630 -5340 y(standard)30 b Fl(gnu)g Fq(cpu-compan)m(y-system)h -Ft(format.)p eop +b(string)g(that)h(fully)f(describ)s(es)f(the)h(system)g(t)m(yp)s(e)h +(on)f(whic)m(h)f(Bash)i(is)f(executing,)i(in)e(the)630 +5340 y(standard)k Fl(gnu)g Fq(cpu-compan)m(y-system)h +Ft(format.)p eop end %%Page: 61 67 -61 66 bop 150 -116 a Ft(Chapter)30 b(5:)41 b(Shell)28 -b(V)-8 b(ariables)2457 b(61)150 299 y Fs(MAILCHECK)630 -408 y Ft(Ho)m(w)28 b(often)g(\(in)f(seconds\))h(that)g(the)f(shell)f -(should)g(c)m(hec)m(k)j(for)e(mail)f(in)g(the)i(\014les)f(sp)s -(eci\014ed)630 518 y(in)i(the)i Fs(MAILPATH)e Ft(or)i -Fs(MAIL)e Ft(v)-5 b(ariables.)41 b(The)30 b(default)g(is)f(60)j -(seconds.)42 b(When)30 b(it)g(is)g(time)630 628 y(to)37 -b(c)m(hec)m(k)h(for)e(mail,)h(the)g(shell)d(do)s(es)i(so)h(b)s(efore)f -(displa)m(ying)e(the)i(primary)f(prompt.)57 b(If)630 -737 y(this)36 b(v)-5 b(ariable)36 b(is)g(unset,)i(or)f(set)h(to)g(a)f -(v)-5 b(alue)37 b(that)g(is)f(not)i(a)f(n)m(um)m(b)s(er)f(greater)i -(than)f(or)630 847 y(equal)30 b(to)h(zero,)g(the)g(shell)e(disables)f +TeXDict begin 61 66 bop 150 -116 a Ft(Chapter)30 b(5:)41 +b(Shell)30 b(V)-8 b(ariables)2459 b(61)150 299 y Fs(MAILCHECK)630 +408 y Ft(Ho)m(w)28 b(often)g(\(in)g(seconds\))g(that)g(the)f(shell)h +(should)f(c)m(hec)m(k)i(for)e(mail)h(in)f(the)h(\014les)g(sp)s +(eci\014ed)630 518 y(in)i(the)h Fs(MAILPATH)e Ft(or)i +Fs(MAIL)e Ft(v)-5 b(ariables.)43 b(The)30 b(default)h(is)f(60)i +(seconds.)42 b(When)30 b(it)h(is)g(time)630 628 y(to)37 +b(c)m(hec)m(k)h(for)e(mail,)j(the)e(shell)f(do)s(es)g(so)h(b)s(efore)f +(displa)m(ying)h(the)f(primary)g(prompt.)57 b(If)630 +737 y(this)37 b(v)-5 b(ariable)38 b(is)f(unset,)h(or)f(set)h(to)g(a)f +(v)-5 b(alue)38 b(that)f(is)g(not)h(a)f(n)m(um)m(b)s(er)f(greater)i +(than)f(or)630 847 y(equal)31 b(to)g(zero,)g(the)g(shell)g(disables)f (mail)h(c)m(hec)m(king.)150 1011 y Fs(OLDPWD)192 b Ft(The)30 -b(previous)f(w)m(orking)g(directory)h(as)h(set)g(b)m(y)f(the)h +b(previous)g(w)m(orking)g(directory)h(as)g(set)g(b)m(y)f(the)h Fs(cd)e Ft(builtin.)150 1176 y Fs(OPTERR)192 b Ft(If)35 -b(set)i(to)f(the)h(v)-5 b(alue)35 b(1,)j(Bash)e(displa)m(ys)e(error)h +b(set)i(to)f(the)h(v)-5 b(alue)36 b(1,)i(Bash)e(displa)m(ys)g(error)f (messages)i(generated)g(b)m(y)f(the)g Fs(getopts)630 -1285 y Ft(builtin)27 b(command.)150 1450 y Fs(OSTYPE)192 -b Ft(A)30 b(string)g(describing)e(the)i(op)s(erating)g(system)h(Bash)f -(is)g(running)d(on.)150 1614 y Fs(PIPESTATUS)630 1724 -y Ft(An)c(arra)m(y)h(v)-5 b(ariable)22 b(\(see)j(Section)e(6.7)i([Arra) -m(ys],)g(page)f(72\))h(con)m(taining)e(a)h(list)e(of)i(exit)f(sta-)630 -1833 y(tus)i(v)-5 b(alues)26 b(from)f(the)h(pro)s(cesses)g(in)e(the)i -(most-recen)m(tly-executed)i(foreground)d(pip)s(eline)630 -1943 y(\(whic)m(h)k(ma)m(y)i(con)m(tain)g(only)f(a)g(single)f +1285 y Ft(builtin)30 b(command.)150 1450 y Fs(OSTYPE)192 +b Ft(A)30 b(string)h(describing)f(the)g(op)s(erating)h(system)g(Bash)f +(is)h(running)d(on.)150 1614 y Fs(PIPESTATUS)630 1724 +y Ft(An)23 b(arra)m(y)h(v)-5 b(ariable)24 b(\(see)h(Section)f(6.7)h +([Arra)m(ys],)g(page)f(72\))h(con)m(taining)g(a)f(list)g(of)g(exit)g +(sta-)630 1833 y(tus)h(v)-5 b(alues)27 b(from)e(the)h(pro)s(cesses)g +(in)f(the)h(most-recen)m(tly-executed)j(foreground)c(pip)s(eline)630 +1943 y(\(whic)m(h)30 b(ma)m(y)h(con)m(tain)h(only)f(a)f(single)h (command\).)150 2107 y Fs(POSIXLY_CORRECT)630 2217 y -Ft(If)j(this)g(v)-5 b(ariable)32 b(is)g(in)f(the)i(en)m(vironmen)m(t)g -(when)e Fs(bash)h Ft(starts,)i(the)f(shell)e(en)m(ters)j -Fl(posix)630 2326 y Ft(mo)s(de)22 b(\(see)h(Section)f(6.11)i([Bash)e -(POSIX)f(Mo)s(de],)k(page)e(76\))g(b)s(efore)f(reading)f(the)h(startup) -630 2436 y(\014les,)31 b(as)g(if)g(the)g(`)p Fs(--posix)p -Ft(')f(in)m(v)m(o)s(cation)h(option)g(had)g(b)s(een)g(supplied.)40 -b(If)31 b(it)g(is)f(set)i(while)630 2545 y(the)f(shell)d(is)i(running,) -d Fs(bash)j Ft(enables)f Fl(posix)h Ft(mo)s(de,)g(as)h(if)e(the)i +Ft(If)h(this)h(v)-5 b(ariable)34 b(is)f(in)f(the)h(en)m(vironmen)m(t)h +(when)d Fs(bash)h Ft(starts,)i(the)f(shell)g(en)m(ters)h +Fl(posix)630 2326 y Ft(mo)s(de)22 b(\(see)h(Section)g(6.11)h([Bash)e +(POSIX)f(Mo)s(de],)k(page)e(76\))g(b)s(efore)f(reading)g(the)g(startup) +630 2436 y(\014les,)32 b(as)f(if)h(the)f(`)p Fs(--posix)p +Ft(')f(in)m(v)m(o)s(cation)j(option)f(had)f(b)s(een)g(supplied.)42 +b(If)31 b(it)h(is)f(set)h(while)630 2545 y(the)f(shell)f(is)h(running,) +d Fs(bash)i Ft(enables)g Fl(posix)g Ft(mo)s(de,)g(as)h(if)f(the)h (command)870 2682 y Fs(set)47 b(-o)g(posix)630 2819 y Ft(had)30 b(b)s(een)f(executed.)150 2984 y Fs(PPID)288 -b Ft(The)30 b(pro)s(cess)g Fl(id)g Ft(of)h(the)f(shell's)f(paren)m(t)i -(pro)s(cess.)40 b(This)29 b(v)-5 b(ariable)29 b(is)g(readonly)-8 +b Ft(The)30 b(pro)s(cess)g Fl(id)g Ft(of)h(the)f(shell's)h(paren)m(t)g +(pro)s(cess.)40 b(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8 b(.)150 3148 y Fs(PROMPT_COMMAND)630 3258 y Ft(If)32 -b(set,)h(the)f(v)-5 b(alue)32 b(is)f(in)m(terpreted)g(as)h(a)h(command) -f(to)h(execute)g(b)s(efore)f(the)g(prin)m(ting)e(of)630 -3367 y(eac)m(h)i(primary)c(prompt)h(\()p Fs($PS1)p Ft(\).)150 -3532 y Fs(PS3)336 b Ft(The)34 b(v)-5 b(alue)34 b(of)g(this)f(v)-5 -b(ariable)33 b(is)h(used)f(as)i(the)f(prompt)g(for)g(the)g -Fs(select)f Ft(command.)52 b(If)630 3641 y(this)29 b(v)-5 -b(ariable)29 b(is)h(not)g(set,)i(the)e Fs(select)f Ft(command)h -(prompts)f(with)g(`)p Fs(#?)h Ft(')150 3806 y Fs(PS4)336 -b Ft(The)33 b(v)-5 b(alue)33 b(is)g(the)h(prompt)f(prin)m(ted)f(b)s -(efore)h(the)h(command)f(line)f(is)h(ec)m(ho)s(ed)h(when)f(the)630 -3915 y(`)p Fs(-x)p Ft(')23 b(option)g(is)g(set)h(\(see)g(Section)g(4.3) -g([The)f(Set)h(Builtin],)f(page)h(50\).)40 b(The)23 b(\014rst)f(c)m -(haracter)630 4025 y(of)34 b Fs(PS4)g Ft(is)f(replicated)h(m)m(ultiple) -e(times,)j(as)f(necessary)-8 b(,)37 b(to)e(indicate)e(m)m(ultiple)f -(lev)m(els)i(of)630 4134 y(indirection.)k(The)30 b(default)g(is)f(`)p -Fs(+)h Ft('.)150 4299 y Fs(PWD)336 b Ft(The)30 b(curren)m(t)g(w)m -(orking)g(directory)g(as)g(set)h(b)m(y)f(the)h Fs(cd)f +b(set,)h(the)f(v)-5 b(alue)33 b(is)f(in)m(terpreted)g(as)g(a)h(command) +f(to)h(execute)g(b)s(efore)f(the)g(prin)m(ting)g(of)630 +3367 y(eac)m(h)g(primary)d(prompt)g(\()p Fs($PS1)p Ft(\).)150 +3532 y Fs(PS3)336 b Ft(The)34 b(v)-5 b(alue)35 b(of)f(this)g(v)-5 +b(ariable)35 b(is)g(used)e(as)i(the)f(prompt)g(for)g(the)g +Fs(select)f Ft(command.)52 b(If)630 3641 y(this)30 b(v)-5 +b(ariable)31 b(is)g(not)f(set,)i(the)e Fs(select)f Ft(command)h +(prompts)f(with)h(`)p Fs(#?)g Ft(')150 3806 y Fs(PS4)336 +b Ft(The)33 b(v)-5 b(alue)34 b(is)g(the)g(prompt)f(prin)m(ted)g(b)s +(efore)g(the)h(command)f(line)h(is)g(ec)m(ho)s(ed)g(when)f(the)630 +3915 y(`)p Fs(-x)p Ft(')23 b(option)h(is)g(set)g(\(see)g(Section)h(4.3) +f([The)f(Set)h(Builtin],)i(page)e(50\).)40 b(The)23 b(\014rst)f(c)m +(haracter)630 4025 y(of)34 b Fs(PS4)g Ft(is)g(replicated)i(m)m(ultiple) +f(times,)h(as)e(necessary)-8 b(,)37 b(to)e(indicate)g(m)m(ultiple)g +(lev)m(els)h(of)630 4134 y(indirection.)41 b(The)30 b(default)h(is)f(`) +p Fs(+)g Ft('.)150 4299 y Fs(PWD)336 b Ft(The)30 b(curren)m(t)g(w)m +(orking)h(directory)g(as)f(set)h(b)m(y)f(the)h Fs(cd)f Ft(builtin.)150 4463 y Fs(RANDOM)192 b Ft(Eac)m(h)30 -b(time)f(this)f(parameter)h(is)f(referenced,)i(a)f(random)g(in)m(teger) -g(b)s(et)m(w)m(een)h(0)f(and)g(32767)630 4573 y(is)h(generated.)43 -b(Assigning)29 b(a)i(v)-5 b(alue)30 b(to)h(this)f(v)-5 -b(ariable)29 b(seeds)i(the)g(random)f(n)m(um)m(b)s(er)f(gen-)630 -4682 y(erator.)150 4847 y Fs(REPLY)240 b Ft(The)30 b(default)f(v)-5 -b(ariable)30 b(for)g(the)g Fs(read)g Ft(builtin.)150 -5011 y Fs(SECONDS)144 b Ft(This)39 b(v)-5 b(ariable)39 -b(expands)h(to)h(the)g(n)m(um)m(b)s(er)e(of)i(seconds)g(since)f(the)g -(shell)f(w)m(as)i(started.)630 5121 y(Assignmen)m(t)h(to)h(this)f(v)-5 -b(ariable)41 b(resets)i(the)g(coun)m(t)g(to)g(the)g(v)-5 -b(alue)42 b(assigned,)j(and)d(the)630 5230 y(expanded)35 -b(v)-5 b(alue)35 b(b)s(ecomes)i(the)f(v)-5 b(alue)35 -b(assigned)g(plus)f(the)i(n)m(um)m(b)s(er)f(of)h(seconds)g(since)630 -5340 y(the)31 b(assignmen)m(t.)p eop +b(time)g(this)f(parameter)g(is)g(referenced,)h(a)f(random)g(in)m(teger) +h(b)s(et)m(w)m(een)g(0)f(and)g(32767)630 4573 y(is)i(generated.)43 +b(Assigning)31 b(a)g(v)-5 b(alue)31 b(to)g(this)g(v)-5 +b(ariable)31 b(seeds)g(the)g(random)f(n)m(um)m(b)s(er)f(gen-)630 +4682 y(erator.)150 4847 y Fs(REPLY)240 b Ft(The)30 b(default)g(v)-5 +b(ariable)32 b(for)e(the)g Fs(read)g Ft(builtin.)150 +5011 y Fs(SECONDS)144 b Ft(This)40 b(v)-5 b(ariable)41 +b(expands)f(to)h(the)g(n)m(um)m(b)s(er)e(of)i(seconds)g(since)g(the)f +(shell)h(w)m(as)g(started.)630 5121 y(Assignmen)m(t)i(to)g(this)g(v)-5 +b(ariable)43 b(resets)g(the)g(coun)m(t)g(to)g(the)g(v)-5 +b(alue)43 b(assigned,)j(and)c(the)630 5230 y(expanded)35 +b(v)-5 b(alue)36 b(b)s(ecomes)h(the)f(v)-5 b(alue)36 +b(assigned)g(plus)f(the)h(n)m(um)m(b)s(er)f(of)h(seconds)g(since)630 +5340 y(the)31 b(assignmen)m(t.)p eop end %%Page: 62 68 -62 67 bop 150 -116 a Ft(62)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fs(SHELL)240 b Ft(The)29 b(full)f(pathname)i(to)h(the)f(shell)e -(is)h(k)m(ept)h(in)f(this)g(en)m(vironmen)m(t)g(v)-5 -b(ariable.)40 b(If)29 b(it)h(is)f(not)630 408 y(set)36 -b(when)f(the)h(shell)e(starts,)k(Bash)e(assigns)g(to)g(it)g(the)g(full) -d(pathname)j(of)g(the)g(curren)m(t)630 518 y(user's)30 -b(login)f(shell.)150 666 y Fs(SHELLOPTS)630 775 y Ft(A)i -(colon-separated)g(list)e(of)i(enabled)e(shell)g(options.)40 -b(Eac)m(h)31 b(w)m(ord)f(in)f(the)i(list)e(is)h(a)h(v)-5 +TeXDict begin 62 67 bop 150 -116 a Ft(62)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(SHELL)240 b Ft(The)29 +b(full)h(pathname)g(to)h(the)f(shell)g(is)g(k)m(ept)g(in)g(this)g(en)m +(vironmen)m(t)g(v)-5 b(ariable.)42 b(If)29 b(it)i(is)f(not)630 +408 y(set)36 b(when)f(the)h(shell)g(starts,)i(Bash)e(assigns)h(to)f(it) +h(the)f(full)f(pathname)h(of)g(the)g(curren)m(t)630 518 +y(user's)30 b(login)h(shell.)150 666 y Fs(SHELLOPTS)630 +775 y Ft(A)g(colon-separated)h(list)f(of)g(enabled)f(shell)h(options.) +41 b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h(list)g(is)g(a)g(v)-5 b(alid)630 885 y(argumen)m(t)29 b(for)g(the)g(`)p Fs(-o)p -Ft(')g(option)f(to)i(the)f Fs(set)f Ft(builtin)e(command)j(\(see)g -(Section)g(4.3)h([The)630 994 y(Set)f(Builtin],)e(page)i(50\).)42 -b(The)28 b(options)g(app)s(earing)f(in)g Fs(SHELLOPTS)f +Ft(')g(option)g(to)h(the)f Fs(set)f Ft(builtin)h(command)g(\(see)g +(Section)h(4.3)g([The)630 994 y(Set)f(Builtin],)h(page)f(50\).)42 +b(The)28 b(options)h(app)s(earing)f(in)g Fs(SHELLOPTS)e Ft(are)j(those)h(rep)s(orted)630 1104 y(as)g(`)p Fs(on)p -Ft(')f(b)m(y)h(`)p Fs(set)g(-o)p Ft('.)40 b(If)29 b(this)g(v)-5 -b(ariable)28 b(is)h(in)f(the)i(en)m(vironmen)m(t)f(when)g(Bash)h -(starts)g(up,)630 1213 y(eac)m(h)41 b(shell)c(option)i(in)f(the)i(list) -e(will)e(b)s(e)j(enabled)g(b)s(efore)g(reading)f(an)m(y)i(startup)f -(\014les.)630 1323 y(This)29 b(v)-5 b(ariable)29 b(is)g(readonly)-8 +Ft(')f(b)m(y)h(`)p Fs(set)g(-o)p Ft('.)40 b(If)29 b(this)h(v)-5 +b(ariable)30 b(is)g(in)f(the)h(en)m(vironmen)m(t)g(when)f(Bash)h +(starts)g(up,)630 1213 y(eac)m(h)41 b(shell)e(option)h(in)f(the)h(list) +g(will)f(b)s(e)g(enabled)h(b)s(efore)f(reading)g(an)m(y)h(startup)f +(\014les.)630 1323 y(This)30 b(v)-5 b(ariable)31 b(is)f(readonly)-8 b(.)150 1471 y Fs(SHLVL)240 b Ft(Incremen)m(ted)21 b(b)m(y)g(one)g(eac) -m(h)h(time)e(a)i(new)e(instance)g(of)h(Bash)g(is)f(started.)38 -b(This)19 b(is)h(in)m(tended)630 1580 y(to)31 b(b)s(e)f(a)h(coun)m(t)g -(of)f(ho)m(w)h(deeply)e(y)m(our)h(Bash)h(shells)d(are)j(nested.)150 -1728 y Fs(TIMEFORMAT)630 1837 y Ft(The)f(v)-5 b(alue)31 -b(of)g(this)f(parameter)h(is)f(used)g(as)h(a)g(format)h(string)e(sp)s -(ecifying)e(ho)m(w)j(the)g(tim-)630 1947 y(ing)36 b(information)e(for)j -(pip)s(elines)c(pre\014xed)i(with)g(the)i Fs(time)e Ft(reserv)m(ed)i(w) -m(ord)f(should)f(b)s(e)630 2056 y(displa)m(y)m(ed.)j(The)27 -b(`)p Fs(\045)p Ft(')h(c)m(haracter)h(in)m(tro)s(duces)d(an)i(escap)s -(e)g(sequence)g(that)g(is)e(expanded)h(to)630 2166 y(a)37 -b(time)f(v)-5 b(alue)35 b(or)i(other)f(information.)57 -b(The)36 b(escap)s(e)g(sequences)h(and)e(their)h(meanings)630 -2276 y(are)31 b(as)f(follo)m(ws;)g(the)h(braces)f(denote)h(optional)f -(p)s(ortions.)630 2423 y Fs(\045\045)384 b Ft(A)30 b(literal)f(`)p +m(h)h(time)f(a)h(new)e(instance)h(of)g(Bash)g(is)g(started.)38 +b(This)20 b(is)h(in)m(tended)630 1580 y(to)31 b(b)s(e)f(a)h(coun)m(t)g +(of)f(ho)m(w)h(deeply)f(y)m(our)g(Bash)h(shells)f(are)h(nested.)150 +1728 y Fs(TIMEFORMAT)630 1837 y Ft(The)f(v)-5 b(alue)32 +b(of)f(this)g(parameter)g(is)g(used)f(as)h(a)g(format)h(string)f(sp)s +(ecifying)f(ho)m(w)h(the)g(tim-)630 1947 y(ing)37 b(information)f(for)h +(pip)s(elines)f(pre\014xed)f(with)h(the)h Fs(time)e Ft(reserv)m(ed)i(w) +m(ord)f(should)g(b)s(e)630 2056 y(displa)m(y)m(ed.)k(The)27 +b(`)p Fs(\045)p Ft(')h(c)m(haracter)h(in)m(tro)s(duces)e(an)h(escap)s +(e)g(sequence)g(that)g(is)f(expanded)g(to)630 2166 y(a)37 +b(time)g(v)-5 b(alue)36 b(or)h(other)f(information.)59 +b(The)36 b(escap)s(e)g(sequences)h(and)e(their)i(meanings)630 +2276 y(are)31 b(as)f(follo)m(ws;)i(the)f(braces)f(denote)h(optional)h +(p)s(ortions.)630 2423 y Fs(\045\045)384 b Ft(A)30 b(literal)i(`)p Fs(\045)p Ft('.)630 2570 y Fs(\045[)p Fj(p)11 b Fs(][l]R)85 -b Ft(The)30 b(elapsed)g(time)g(in)f(seconds.)630 2718 +b Ft(The)30 b(elapsed)h(time)g(in)f(seconds.)630 2718 y Fs(\045[)p Fj(p)11 b Fs(][l]U)85 b Ft(The)30 b(n)m(um)m(b)s(er)f(of)h -(CPU)g(seconds)h(sp)s(en)m(t)f(in)f(user)g(mo)s(de.)630 +(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(user)f(mo)s(de.)630 2865 y Fs(\045[)p Fj(p)11 b Fs(][l]S)85 b Ft(The)30 b(n)m(um)m(b)s(er)f -(of)h(CPU)g(seconds)h(sp)s(en)m(t)f(in)f(system)h(mo)s(de.)630 +(of)h(CPU)g(seconds)h(sp)s(en)m(t)f(in)g(system)g(mo)s(de.)630 3013 y Fs(\045P)384 b Ft(The)30 b(CPU)g(p)s(ercen)m(tage,)i(computed)e (as)h(\(\045U)f Fs(+)g Ft(\045S\))g(/)h(\045R.)630 3160 -y(The)23 b(optional)h Fq(p)i Ft(is)d(a)h(digit)f(sp)s(ecifying)e(the)j -(precision,)g(the)g(n)m(um)m(b)s(er)f(of)h(fractional)f(digits)630 -3270 y(after)36 b(a)f(decimal)g(p)s(oin)m(t.)54 b(A)35 -b(v)-5 b(alue)35 b(of)g(0)h(causes)g(no)f(decimal)f(p)s(oin)m(t)g(or)i -(fraction)f(to)h(b)s(e)630 3379 y(output.)48 b(A)m(t)34 -b(most)f(three)g(places)g(after)g(the)g(decimal)f(p)s(oin)m(t)g(ma)m(y) -i(b)s(e)e(sp)s(eci\014ed;)h(v)-5 b(alues)630 3489 y(of)31 +y(The)23 b(optional)j Fq(p)g Ft(is)e(a)g(digit)h(sp)s(ecifying)e(the)h +(precision,)i(the)e(n)m(um)m(b)s(er)f(of)h(fractional)h(digits)630 +3270 y(after)36 b(a)f(decimal)i(p)s(oin)m(t.)55 b(A)35 +b(v)-5 b(alue)36 b(of)f(0)h(causes)g(no)f(decimal)h(p)s(oin)m(t)f(or)h +(fraction)g(to)g(b)s(e)630 3379 y(output.)48 b(A)m(t)34 +b(most)f(three)g(places)h(after)f(the)g(decimal)h(p)s(oin)m(t)f(ma)m(y) +h(b)s(e)e(sp)s(eci\014ed;)i(v)-5 b(alues)630 3489 y(of)31 b Fq(p)h Ft(greater)g(than)e(3)h(are)f(c)m(hanged)h(to)g(3.)42 -b(If)29 b Fq(p)k Ft(is)c(not)i(sp)s(eci\014ed,)e(the)i(v)-5 -b(alue)29 b(3)i(is)f(used.)630 3618 y(The)54 b(optional)f -Fs(l)h Ft(sp)s(eci\014es)f(a)i(longer)e(format,)61 b(including)51 -b(min)m(utes,)60 b(of)54 b(the)g(form)630 3727 y Fq(MM)10 +b(If)29 b Fq(p)k Ft(is)d(not)h(sp)s(eci\014ed,)f(the)h(v)-5 +b(alue)30 b(3)h(is)g(used.)630 3618 y(The)54 b(optional)h +Fs(l)f Ft(sp)s(eci\014es)g(a)h(longer)f(format,)61 b(including)54 +b(min)m(utes,)61 b(of)54 b(the)g(form)630 3727 y Fq(MM)10 b Ft(m)p Fq(SS)p Ft(.)p Fq(FF)d Ft(s.)103 b(The)50 b(v)-5 -b(alue)51 b(of)g Fq(p)j Ft(determines)c(whether)g(or)h(not)h(the)f -(fraction)g(is)630 3837 y(included.)630 3965 y(If)30 -b(this)f(v)-5 b(ariable)29 b(is)h(not)g(set,)i(Bash)e(acts)h(as)g(if)e -(it)h(had)g(the)h(v)-5 b(alue)870 4094 y Fs +b(alue)52 b(of)f Fq(p)j Ft(determines)d(whether)f(or)h(not)h(the)f +(fraction)h(is)630 3837 y(included.)630 3965 y(If)30 +b(this)g(v)-5 b(ariable)31 b(is)g(not)f(set,)i(Bash)e(acts)h(as)g(if)f +(it)h(had)f(the)h(v)-5 b(alue)870 4094 y Fs ($'\\nreal\\t\0453lR\\nuser\\t\0453)o(lU\\n)o(sys\\)o(t\0453)o(lS')630 -4222 y Ft(If)37 b(the)g(v)-5 b(alue)37 b(is)f(n)m(ull,)h(no)h(timing)d -(information)h(is)g(displa)m(y)m(ed.)60 b(A)37 b(trailing)f(newline)f -(is)630 4332 y(added)30 b(when)f(the)i(format)f(string)g(is)f(displa)m +4222 y Ft(If)37 b(the)g(v)-5 b(alue)38 b(is)f(n)m(ull,)i(no)f(timing)f +(information)h(is)f(displa)m(y)m(ed.)62 b(A)37 b(trailing)i(newline)e +(is)630 4332 y(added)30 b(when)f(the)i(format)f(string)h(is)f(displa)m (y)m(ed.)150 4479 y Fs(TMOUT)240 b Ft(If)22 b(set)h(to)g(a)g(v)-5 -b(alue)22 b(greater)i(than)e(zero,)j Fs(TMOUT)d Ft(is)f(treated)j(as)e -(the)h(default)f(timeout)g(for)h(the)630 4589 y Fs(read)31 -b Ft(builtin)e(\(see)k(Section)e(4.2)j([Bash)e(Builtins],)e(page)j +b(alue)23 b(greater)h(than)e(zero,)j Fs(TMOUT)d Ft(is)g(treated)i(as)e +(the)h(default)g(timeout)g(for)g(the)630 4589 y Fs(read)31 +b Ft(builtin)h(\(see)h(Section)f(4.2)i([Bash)e(Builtins],)h(page)g (39\).)47 b(The)32 b Fs(select)e Ft(command)630 4699 -y(\(see)f(Section)g(3.2.4.2)h([Conditional)d(Constructs],)h(page)i -(10\))f(terminates)f(if)g(input)e(do)s(es)630 4808 y(not)31 -b(arriv)m(e)f(after)h Fs(TMOUT)e Ft(seconds)h(when)f(input)g(is)g -(coming)h(from)g(a)h(terminal.)630 4937 y(In)d(an)h(in)m(terativ)m(e)g -(shell,)e(the)i(v)-5 b(alue)29 b(is)e(in)m(terpreted)h(as)h(the)g(n)m -(um)m(b)s(er)f(of)h(seconds)f(to)i(w)m(ait)630 5046 y(for)i(input)e -(after)j(issuing)d(the)i(primary)f(prompt)g(when)g(the)i(shell)d(is)i -(in)m(teractiv)m(e.)47 b(Bash)630 5156 y(terminates)30 -b(after)h(that)g(n)m(um)m(b)s(er)e(of)i(seconds)f(if)f(input)g(do)s(es) -h(not)g(arriv)m(e.)150 5303 y Fs(UID)336 b Ft(The)30 -b(n)m(umeric)f(real)h(user)g(id)f(of)h(the)h(curren)m(t)f(user.)40 -b(This)29 b(v)-5 b(ariable)29 b(is)g(readonly)-8 b(.)p -eop +y(\(see)f(Section)h(3.2.4.2)g([Conditional)g(Constructs],)e(page)i +(10\))f(terminates)g(if)g(input)e(do)s(es)630 4808 y(not)k(arriv)m(e)g +(after)g Fs(TMOUT)e Ft(seconds)h(when)f(input)h(is)g(coming)h(from)f(a) +h(terminal.)630 4937 y(In)d(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 5046 y(for)i(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 5156 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 +5303 y Fs(UID)336 b Ft(The)30 b(n)m(umeric)g(real)h(user)f(id)g(of)g +(the)h(curren)m(t)f(user.)40 b(This)30 b(v)-5 b(ariable)31 +b(is)f(readonly)-8 b(.)p eop end %%Page: 63 69 -63 68 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(63)150 299 y Fo(6)80 b(Bash)54 -b(F)-13 b(eatures)275 537 y Ft(This)28 b(section)j(describ)s(es)d -(features)j(unique)d(to)k(Bash.)150 798 y Fr(6.1)68 b(In)l(v)l(oking)46 -b(Bash)390 1017 y Fs(bash)h([long-opt])e([-ir])h +TeXDict begin 63 68 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(63)150 299 y Fo(6)80 +b(Bash)54 b(F)-13 b(eatures)275 537 y Ft(This)29 b(section)j(describ)s +(es)d(features)i(unique)e(to)j(Bash.)150 798 y Fr(6.1)68 +b(In)l(v)l(oking)46 b(Bash)390 1017 y Fs(bash)h([long-opt])e([-ir])h ([-abefhkmnptuvxdBCDHP])c([-o)47 b Fj(option)11 b Fs(])45 b([-O)i Fj(shopt_option)11 b Fs(])44 b([)p Fj(ar-)390 1127 y(gument)57 b Fs(...)o(])390 1236 y(bash)47 b([long-opt])e @@ -7292,1458 +8992,1463 @@ b Fs([)p Fj(ar-)390 1346 y(gument)g Fs(...)o(])390 1455 y(bash)47 b([long-opt])e(-s)i([-abefhkmnptuvxdBCDHP])42 b([-o)k Fj(option)11 b Fs(])46 b([-O)h Fj(shopt_option)11 b Fs(])43 b([)p Fj(ar-)390 1565 y(gument)57 b Fs(...)o(])275 -1701 y Ft(In)28 b(addition)g(to)i(the)f(single-c)m(haracter)h(shell)e -(command-line)g(options)h(\(see)h(Section)f(4.3)i([The)e(Set)150 -1810 y(Builtin],)24 b(page)h(50\),)i(there)e(are)g(sev)m(eral)g(m)m -(ulti-c)m(haracter)g(options)f(that)h(y)m(ou)g(can)g(use.)38 +1701 y Ft(In)28 b(addition)i(to)g(the)f(single-c)m(haracter)j(shell)e +(command-line)g(options)g(\(see)g(Section)g(4.3)h([The)e(Set)150 +1810 y(Builtin],)e(page)e(50\),)i(there)e(are)g(sev)m(eral)h(m)m +(ulti-c)m(haracter)h(options)e(that)g(y)m(ou)g(can)g(use.)38 b(These)25 b(options)150 1920 y(m)m(ust)30 b(app)s(ear)g(on)g(the)h -(command)f(line)f(b)s(efore)h(the)g(single-c)m(haracter)h(options)f(to) -h(b)s(e)f(recognized.)150 2081 y Fs(--debugger)630 2191 -y Ft(Arrange)j(for)g(the)g(debugger)g(pro\014le)f(to)i(b)s(e)e -(executed)i(b)s(efore)f(the)g(shell)e(starts.)49 b(T)-8 -b(urns)630 2301 y(on)40 b(extended)g(debugging)f(mo)s(de)h(\(see)h -(Section)e(4.2)i([Bash)g(Builtins],)f(page)h(39)g(for)f(a)630 -2410 y(description)g(of)i(the)f Fs(extdebug)f Ft(option)h(to)h(the)g -Fs(shopt)f Ft(builtin\))d(and)j(shell)f(function)630 -2520 y(tracing)35 b(\(see)h(Section)f(4.3)i([The)e(Set)g(Builtin],)g -(page)h(50)g(for)f(a)g(description)f(of)h(the)h Fs(-o)630 +(command)f(line)h(b)s(efore)f(the)g(single-c)m(haracter)j(options)e(to) +g(b)s(e)f(recognized.)150 2081 y Fs(--debugger)630 2191 +y Ft(Arrange)j(for)g(the)g(debugger)g(pro\014le)g(to)h(b)s(e)e +(executed)i(b)s(efore)f(the)g(shell)g(starts.)49 b(T)-8 +b(urns)630 2301 y(on)40 b(extended)g(debugging)g(mo)s(de)g(\(see)h +(Section)f(4.2)h([Bash)g(Builtins],)i(page)e(39)g(for)f(a)630 +2410 y(description)i(of)g(the)f Fs(extdebug)f Ft(option)i(to)g(the)g +Fs(shopt)f Ft(builtin\))g(and)g(shell)h(function)630 +2520 y(tracing)36 b(\(see)g(Section)g(4.3)h([The)e(Set)g(Builtin],)j +(page)e(50)g(for)f(a)g(description)h(of)f(the)h Fs(-o)630 2629 y(functrace)28 b Ft(option\).)150 2790 y Fs(--dump-po-strings)630 -2900 y Ft(A)37 b(list)e(of)h(all)g(double-quoted)f(strings)g(preceded)h -(b)m(y)h(`)p Fs($)p Ft(')f(is)g(prin)m(ted)f(on)h(the)h(standard)630 -3009 y(ouput)27 b(in)g(the)h Fl(gnu)g Fs(gettext)d Ft(PO)j(\(p)s -(ortable)f(ob)5 b(ject\))29 b(\014le)e(format.)41 b(Equiv)-5 -b(alen)m(t)26 b(to)j(`)p Fs(-D)p Ft(')630 3119 y(except)i(for)f(the)h +2900 y Ft(A)37 b(list)g(of)f(all)i(double-quoted)e(strings)g(preceded)g +(b)m(y)h(`)p Fs($)p Ft(')f(is)h(prin)m(ted)f(on)g(the)h(standard)630 +3009 y(ouput)27 b(in)h(the)g Fl(gnu)g Fs(gettext)d Ft(PO)j(\(p)s +(ortable)g(ob)5 b(ject\))29 b(\014le)f(format.)41 b(Equiv)-5 +b(alen)m(t)28 b(to)h(`)p Fs(-D)p Ft(')630 3119 y(except)i(for)f(the)h (output)f(format.)150 3280 y Fs(--dump-strings)630 3389 -y Ft(Equiv)-5 b(alen)m(t)29 b(to)i(`)p Fs(-D)p Ft('.)150 -3550 y Fs(--help)192 b Ft(Displa)m(y)30 b(a)g(usage)h(message)h(on)e -(standard)g(output)g(and)f(exit)i(sucessfully)-8 b(.)150 +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 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)46 b Ft(\(instead)41 b(of)g(`)p Fs(~/.bashrc)p -Ft('\))e(in)h(an)h(in)m(teractiv)m(e)630 4039 y(shell.)150 -4200 y Fs(--login)144 b Ft(Equiv)-5 b(alen)m(t)29 b(to)i(`)p +Fq(\014lename)47 b Ft(\(instead)42 b(of)f(`)p Fs(~/.bashrc)p +Ft('\))e(in)i(an)g(in)m(teractiv)m(e)630 4039 y(shell.)150 +4200 y Fs(--login)144 b Ft(Equiv)-5 b(alen)m(t)31 b(to)g(`)p Fs(-l)p Ft('.)150 4361 y Fs(--noediting)630 4471 y Ft(Do)h(not)e(use)h -(the)g Fl(gnu)f Ft(Readline)g(library)e(\(see)j(Chapter)g(8)g([Command) -f(Line)f(Editing],)630 4580 y(page)i(83\))h(to)f(read)f(command)g -(lines)f(when)g(the)i(shell)d(is)i(in)m(teractiv)m(e.)150 -4741 y Fs(--noprofile)630 4850 y Ft(Don't)i(load)e(the)h(system-wide)f -(startup)g(\014le)f(`)p Fs(/etc/profile)p Ft(')f(or)j(an)m(y)g(of)g -(the)f(p)s(ersonal)630 4960 y(initialization)24 b(\014les)i(`)p -Fs(~/.bash_profile)p Ft(',)f(`)p Fs(~/.bash_login)p Ft(',)g(or)i(`)p -Fs(~/.profile)p Ft(')e(when)630 5070 y(Bash)31 b(is)e(in)m(v)m(ok)m(ed) -i(as)f(a)h(login)e(shell.)150 5230 y Fs(--norc)192 b -Ft(Don't)31 b(read)g(the)f(`)p Fs(~/.bashrc)p Ft(')f(initialization)e -(\014le)i(in)g(an)i(in)m(teractiv)m(e)g(shell.)39 b(This)29 -b(is)g(on)630 5340 y(b)m(y)h(default)g(if)f(the)i(shell)d(is)i(in)m(v)m -(ok)m(ed)h(as)f Fs(sh)p Ft(.)p eop +(the)g Fl(gnu)f Ft(Readline)i(library)e(\(see)h(Chapter)g(8)g([Command) +f(Line)g(Editing],)630 4580 y(page)h(83\))h(to)f(read)f(command)g +(lines)h(when)e(the)i(shell)f(is)h(in)m(teractiv)m(e.)150 +4741 y Fs(--noprofile)630 4850 y Ft(Don't)h(load)f(the)g(system-wide)g +(startup)f(\014le)g(`)p Fs(/etc/profile)p Ft(')e(or)j(an)m(y)g(of)g +(the)f(p)s(ersonal)630 4960 y(initialization)g(\014les)d(`)p +Fs(~/.bash_profile)p Ft(',)e(`)p Fs(~/.bash_login)p Ft(',)g(or)i(`)p +Fs(~/.profile)p Ft(')e(when)630 5070 y(Bash)31 b(is)f(in)m(v)m(ok)m(ed) +i(as)e(a)h(login)g(shell.)150 5230 y Fs(--norc)192 b +Ft(Don't)31 b(read)g(the)f(`)p Fs(~/.bashrc)p Ft(')f(initialization)k +(\014le)d(in)g(an)h(in)m(teractiv)m(e)i(shell.)41 b(This)30 +b(is)g(on)630 5340 y(b)m(y)g(default)h(if)f(the)h(shell)f(is)h(in)m(v)m +(ok)m(ed)h(as)e Fs(sh)p Ft(.)p eop end %%Page: 64 70 -64 69 bop 150 -116 a Ft(64)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fs(--posix)144 b Ft(Change)24 b(the)h(b)s(eha)m(vior)e(of)h(Bash) -h(where)e(the)i(default)e(op)s(eration)h(di\013ers)f(from)g(the)i -Fl(posix)630 408 y Ft(1003.2)31 b(standard)d(to)i(matc)m(h)f(the)g -(standard.)40 b(This)27 b(is)g(in)m(tended)h(to)i(mak)m(e)f(Bash)g(b)s -(eha)m(v)m(e)630 518 y(as)39 b(a)f(strict)g(sup)s(erset)g(of)g(that)h -(standard.)64 b(See)38 b(Section)g(6.11)i([Bash)f(POSIX)e(Mo)s(de],)630 -628 y(page)31 b(76,)h(for)e(a)g(description)f(of)h(the)h(Bash)g +TeXDict begin 64 69 bop 150 -116 a Ft(64)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(--posix)144 b Ft(Change)24 +b(the)h(b)s(eha)m(vior)f(of)g(Bash)h(where)e(the)i(default)f(op)s +(eration)h(di\013ers)f(from)f(the)i Fl(posix)630 408 +y Ft(1003.2)31 b(standard)d(to)i(matc)m(h)f(the)g(standard.)40 +b(This)28 b(is)g(in)m(tended)h(to)h(mak)m(e)f(Bash)g(b)s(eha)m(v)m(e) +630 518 y(as)39 b(a)f(strict)h(sup)s(erset)f(of)g(that)h(standard.)64 +b(See)38 b(Section)h(6.11)h([Bash)f(POSIX)e(Mo)s(de],)630 +628 y(page)31 b(76,)h(for)e(a)g(description)h(of)f(the)h(Bash)g Fl(posix)e Ft(mo)s(de.)150 787 y Fs(--restricted)630 -897 y Ft(Mak)m(e)54 b(the)e(shell)e(a)j(restricted)f(shell)e(\(see)j -(Section)f(6.10)i([The)d(Restricted)i(Shell],)630 1006 +897 y Ft(Mak)m(e)54 b(the)e(shell)g(a)h(restricted)g(shell)f(\(see)h +(Section)g(6.10)h([The)d(Restricted)j(Shell],)630 1006 y(page)31 b(76\).)150 1166 y Fs(--verbose)630 1275 y -Ft(Equiv)-5 b(alen)m(t)29 b(to)i(`)p Fs(-v)p Ft('.)41 -b(Prin)m(t)29 b(shell)g(input)f(lines)h(as)i(they're)f(read.)150 -1435 y Fs(--version)630 1544 y Ft(Sho)m(w)e(v)m(ersion)f(information)f -(for)i(this)f(instance)h(of)g(Bash)g(on)g(the)g(standard)f(output)h -(and)630 1654 y(exit)i(successfully)-8 b(.)275 1813 y(There)28 -b(are)i(sev)m(eral)f(single-c)m(haracter)h(options)e(that)i(ma)m(y)g(b) -s(e)e(supplied)e(at)k(in)m(v)m(o)s(cation)f(whic)m(h)f(are)150 -1923 y(not)j(a)m(v)-5 b(ailable)29 b(with)g(the)i Fs(set)e +Ft(Equiv)-5 b(alen)m(t)31 b(to)g(`)p Fs(-v)p Ft('.)41 +b(Prin)m(t)30 b(shell)h(input)e(lines)i(as)g(they're)f(read.)150 +1435 y Fs(--version)630 1544 y Ft(Sho)m(w)e(v)m(ersion)g(information)g +(for)g(this)g(instance)h(of)f(Bash)g(on)g(the)g(standard)f(output)h +(and)630 1654 y(exit)j(successfully)-8 b(.)275 1813 y(There)28 +b(are)i(sev)m(eral)g(single-c)m(haracter)i(options)d(that)h(ma)m(y)g(b) +s(e)e(supplied)g(at)i(in)m(v)m(o)s(cation)h(whic)m(h)e(are)150 +1923 y(not)i(a)m(v)-5 b(ailable)32 b(with)e(the)h Fs(set)e Ft(builtin.)150 2082 y Fs(-c)h Fj(string)630 2192 y Ft(Read)23 -b(and)f(execute)i(commands)f(from)f Fq(string)30 b Ft(after)23 -b(pro)s(cessing)e(the)i(options,)h(then)f(exit.)630 2301 -y(An)m(y)37 b(remaining)d(argumen)m(ts)j(are)g(assigned)f(to)h(the)g(p) -s(ositional)d(parameters,)39 b(starting)630 2411 y(with)29 +b(and)f(execute)i(commands)f(from)f Fq(string)31 b Ft(after)23 +b(pro)s(cessing)f(the)h(options,)i(then)e(exit.)630 2301 +y(An)m(y)37 b(remaining)f(argumen)m(ts)h(are)g(assigned)g(to)g(the)g(p) +s(ositional)g(parameters,)i(starting)630 2411 y(with)30 b Fs($0)p Ft(.)150 2570 y Fs(-i)384 b Ft(F)-8 b(orce)22 -b(the)g(shell)d(to)i(run)f(in)m(teractiv)m(ely)-8 b(.)38 -b(In)m(teractiv)m(e)22 b(shells)d(are)j(describ)s(ed)c(in)i(Section)h -(6.3)630 2680 y([In)m(teractiv)m(e)32 b(Shells],)d(page)i(67.)150 -2839 y Fs(-l)384 b Ft(Mak)m(e)33 b(this)d(shell)g(act)i(as)g(if)e(it)h -(had)g(b)s(een)f(directly)g(in)m(v)m(ok)m(ed)i(b)m(y)g(login.)42 -b(When)31 b(the)h(shell)630 2949 y(is)k(in)m(teractiv)m(e,)41 -b(this)36 b(is)g(equiv)-5 b(alen)m(t)37 b(to)h(starting)g(a)f(login)g -(shell)e(with)h(`)p Fs(exec)30 b(-l)g(bash)p Ft('.)630 -3059 y(When)h(the)g(shell)f(is)g(not)h(in)m(teractiv)m(e,)i(the)e -(login)f(shell)g(startup)h(\014les)f(will)e(b)s(e)j(executed.)630 +b(the)g(shell)f(to)g(run)f(in)m(teractiv)m(ely)-8 b(.)41 +b(In)m(teractiv)m(e)23 b(shells)e(are)h(describ)s(ed)d(in)i(Section)h +(6.3)630 2680 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(67.)150 +2839 y Fs(-l)384 b Ft(Mak)m(e)33 b(this)e(shell)h(act)g(as)g(if)f(it)h +(had)f(b)s(een)f(directly)i(in)m(v)m(ok)m(ed)h(b)m(y)f(login.)44 +b(When)31 b(the)h(shell)630 2949 y(is)37 b(in)m(teractiv)m(e,)43 +b(this)37 b(is)g(equiv)-5 b(alen)m(t)39 b(to)f(starting)h(a)e(login)i +(shell)e(with)g(`)p Fs(exec)30 b(-l)g(bash)p Ft('.)630 +3059 y(When)h(the)g(shell)h(is)f(not)g(in)m(teractiv)m(e,)k(the)c +(login)h(shell)g(startup)f(\014les)g(will)g(b)s(e)g(executed.)630 3168 y(`)p Fs(exec)e(bash)h(-l)p Ft(')43 b(or)h(`)p Fs(exec)29 -b(bash)g(--login)p Ft(')42 b(will)f(replace)j(the)g(curren)m(t)f(shell) -f(with)h(a)630 3278 y(Bash)26 b(login)e(shell.)37 b(See)26 -b(Section)f(6.2)i([Bash)e(Startup)g(Files],)h(page)g(65,)i(for)d(a)h -(description)630 3387 y(of)31 b(the)f(sp)s(ecial)f(b)s(eha)m(vior)h(of) -g(a)h(login)e(shell.)150 3547 y Fs(-r)384 b Ft(Mak)m(e)54 -b(the)e(shell)e(a)j(restricted)f(shell)e(\(see)j(Section)f(6.10)i([The) -d(Restricted)i(Shell],)630 3656 y(page)31 b(76\).)150 -3816 y Fs(-s)384 b Ft(If)24 b(this)g(option)h(is)f(presen)m(t,)i(or)f -(if)f(no)g(argumen)m(ts)i(remain)d(after)j(option)e(pro)s(cessing,)h -(then)630 3925 y(commands)j(are)h(read)g(from)f(the)h(standard)f -(input.)38 b(This)27 b(option)h(allo)m(ws)g(the)h(p)s(ositional)630 -4035 y(parameters)i(to)g(b)s(e)f(set)g(when)g(in)m(v)m(oking)f(an)i(in) -m(teractiv)m(e)g(shell.)150 4194 y Fs(-D)384 b Ft(A)37 -b(list)e(of)h(all)g(double-quoted)f(strings)g(preceded)h(b)m(y)h(`)p -Fs($)p Ft(')f(is)g(prin)m(ted)f(on)h(the)h(standard)630 -4304 y(ouput.)71 b(These)40 b(are)h(the)g(strings)f(that)h(are)g(sub)5 -b(ject)41 b(to)g(language)g(translation)f(when)630 4413 -y(the)d(curren)m(t)g(lo)s(cale)f(is)g(not)h Fs(C)g Ft(or)f -Fs(POSIX)g Ft(\(see)h(Section)g(3.1.2.5)i([Lo)s(cale)f(T)-8 -b(ranslation],)630 4523 y(page)31 b(7\).)42 b(This)28 -b(implies)g(the)i(`)p Fs(-n)p Ft(')h(option;)f(no)g(commands)g(will)e -(b)s(e)h(executed.)150 4682 y Fs([-+]O)g([)p Fj(shopt_option)11 -b Fs(])630 4792 y Fq(shopt)p 854 4792 28 4 v 40 w(option)43 -b Ft(is)g(one)i(of)f(the)g(shell)f(options)g(accepted)i(b)m(y)f(the)h -Fs(shopt)d Ft(builtin)f(\(see)630 4902 y(Chapter)29 b(4)i([Shell)d -(Builtin)f(Commands],)j(page)g(33\).)42 b(If)30 b Fq(shopt)p -2856 4902 V 39 w(option)g Ft(is)f(presen)m(t,)h(`)p Fs(-O)p -Ft(')630 5011 y(sets)39 b(the)f(v)-5 b(alue)38 b(of)g(that)h(option;)j -(`)p Fs(+O)p Ft(')c(unsets)g(it.)64 b(If)38 b Fq(shopt)p -2803 5011 V 39 w(option)g Ft(is)f(not)i(supplied,)630 -5121 y(the)28 b(names)f(and)h(v)-5 b(alues)27 b(of)g(the)h(shell)e -(options)h(accepted)i(b)m(y)f Fs(shopt)e Ft(are)i(prin)m(ted)e(on)i +b(bash)g(--login)p Ft(')42 b(will)i(replace)h(the)f(curren)m(t)f(shell) +h(with)g(a)630 3278 y(Bash)26 b(login)g(shell.)39 b(See)26 +b(Section)g(6.2)h([Bash)e(Startup)g(Files],)j(page)e(65,)i(for)d(a)h +(description)630 3387 y(of)31 b(the)f(sp)s(ecial)h(b)s(eha)m(vior)g(of) +f(a)h(login)g(shell.)150 3547 y Fs(-r)384 b Ft(Mak)m(e)54 +b(the)e(shell)g(a)h(restricted)g(shell)f(\(see)h(Section)g(6.10)h([The) +d(Restricted)j(Shell],)630 3656 y(page)31 b(76\).)150 +3816 y Fs(-s)384 b Ft(If)24 b(this)h(option)h(is)f(presen)m(t,)h(or)f +(if)g(no)f(argumen)m(ts)i(remain)e(after)i(option)f(pro)s(cessing,)h +(then)630 3925 y(commands)i(are)h(read)g(from)f(the)h(standard)f +(input.)39 b(This)28 b(option)h(allo)m(ws)h(the)f(p)s(ositional)630 +4035 y(parameters)i(to)g(b)s(e)f(set)g(when)g(in)m(v)m(oking)h(an)g(in) +m(teractiv)m(e)i(shell.)150 4194 y Fs(-D)384 b Ft(A)37 +b(list)g(of)f(all)i(double-quoted)e(strings)g(preceded)g(b)m(y)h(`)p +Fs($)p Ft(')f(is)h(prin)m(ted)f(on)g(the)h(standard)630 +4304 y(ouput.)71 b(These)40 b(are)h(the)g(strings)g(that)g(are)g(sub)5 +b(ject)41 b(to)g(language)h(translation)g(when)630 4413 +y(the)37 b(curren)m(t)g(lo)s(cale)h(is)f(not)g Fs(C)g +Ft(or)f Fs(POSIX)g Ft(\(see)h(Section)h(3.1.2.5)h([Lo)s(cale)g(T)-8 +b(ranslation],)630 4523 y(page)31 b(7\).)42 b(This)29 +b(implies)i(the)f(`)p Fs(-n)p Ft(')h(option;)g(no)f(commands)g(will)h +(b)s(e)e(executed.)150 4682 y Fs([-+]O)g([)p Fj(shopt_option)11 +b Fs(])630 4792 y Fq(shopt)p 854 4792 28 4 v 40 w(option)44 +b Ft(is)g(one)h(of)f(the)g(shell)h(options)f(accepted)h(b)m(y)f(the)h +Fs(shopt)d Ft(builtin)i(\(see)630 4902 y(Chapter)29 b(4)i([Shell)f +(Builtin)g(Commands],)g(page)g(33\).)42 b(If)30 b Fq(shopt)p +2856 4902 V 39 w(option)h Ft(is)f(presen)m(t,)g(`)p Fs(-O)p +Ft(')630 5011 y(sets)39 b(the)f(v)-5 b(alue)39 b(of)f(that)h(option;)k +(`)p Fs(+O)p Ft(')38 b(unsets)g(it.)65 b(If)38 b Fq(shopt)p +2803 5011 V 39 w(option)h Ft(is)f(not)h(supplied,)630 +5121 y(the)28 b(names)f(and)h(v)-5 b(alues)28 b(of)f(the)h(shell)g +(options)g(accepted)h(b)m(y)f Fs(shopt)e Ft(are)i(prin)m(ted)f(on)h (the)630 5230 y(standard)33 b(output.)50 b(If)33 b(the)h(in)m(v)m(o)s -(cation)g(option)f(is)g(`)p Fs(+O)p Ft(',)h(the)g(output)f(is)g(displa) -m(y)m(ed)f(in)h(a)630 5340 y(format)e(that)g(ma)m(y)g(b)s(e)e(reused)h -(as)h(input.)p eop +(cation)i(option)e(is)g(`)p Fs(+O)p Ft(',)g(the)g(output)f(is)h(displa) +m(y)m(ed)g(in)g(a)630 5340 y(format)d(that)g(ma)m(y)g(b)s(e)e(reused)h +(as)h(input.)p eop end %%Page: 65 71 -65 70 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(65)150 299 y Fs(--)384 b Ft(A)38 -b Fs(--)g Ft(signals)e(the)j(end)e(of)i(options)e(and)h(disables)e -(further)h(option)g(pro)s(cessing.)63 b(An)m(y)630 408 -y(argumen)m(ts)31 b(after)g(the)f Fs(--)g Ft(are)h(treated)g(as)g -(\014lenames)e(and)h(argumen)m(ts.)275 575 y(A)d Fm(lo)-5 -b(gin)35 b Ft(shell)25 b(is)h(one)i(whose)f(\014rst)f(c)m(haracter)j -(of)e(argumen)m(t)h(zero)f(is)g(`)p Fs(-)p Ft(',)h(or)f(one)g(in)m(v)m -(ok)m(ed)h(with)e(the)150 685 y(`)p Fs(--login)p Ft(')j(option.)275 -825 y(An)24 b Fm(inter)-5 b(active)33 b Ft(shell)23 b(is)h(one)h -(started)g(without)f(non-option)h(argumen)m(ts,)h(unless)e(`)p -Fs(-s)p Ft(')g(is)g(sp)s(eci\014ed,)150 934 y(without)42 -b(sp)s(ecifying)e(the)k(`)p Fs(-c)p Ft(')e(option,)k(and)c(whose)h -(input)e(and)h(output)g(are)h(b)s(oth)g(connected)g(to)150 -1044 y(terminals)20 b(\(as)j(determined)e(b)m(y)h Fs(isatty\(3\))p -Ft(\),)f(or)i(one)f(started)g(with)f(the)h(`)p Fs(-i)p -Ft(')g(option.)38 b(See)22 b(Section)g(6.3)150 1153 y([In)m(teractiv)m -(e)32 b(Shells],)d(page)i(67,)g(for)f(more)h(information.)275 -1293 y(If)38 b(argumen)m(ts)h(remain)f(after)h(option)g(pro)s(cessing,) -h(and)e(neither)g(the)h(`)p Fs(-c)p Ft(')f(nor)h(the)g(`)p -Fs(-s)p Ft(')f(option)150 1403 y(has)33 b(b)s(een)g(supplied,)f(the)i -(\014rst)e(argumen)m(t)j(is)d(assumed)h(to)h(b)s(e)f(the)h(name)g(of)g -(a)g(\014le)f(con)m(taining)g(shell)150 1512 y(commands)d(\(see)g -(Section)g(3.8)h([Shell)d(Scripts],)h(page)i(31\).)41 -b(When)30 b(Bash)g(is)f(in)m(v)m(ok)m(ed)i(in)d(this)h(fashion,)150 -1622 y Fs($0)37 b Ft(is)f(set)i(to)h(the)e(name)h(of)f(the)h(\014le,)h -(and)d(the)i(p)s(ositional)d(parameters)j(are)g(set)g(to)g(the)g -(remaining)150 1731 y(argumen)m(ts.)h(Bash)26 b(reads)f(and)g(executes) -h(commands)f(from)g(this)f(\014le,)i(then)f(exits.)39 -b(Bash's)25 b(exit)h(status)150 1841 y(is)f(the)i(exit)g(status)f(of)h -(the)g(last)f(command)g(executed)h(in)f(the)g(script.)39 -b(If)26 b(no)g(commands)g(are)h(executed,)150 1951 y(the)k(exit)f -(status)h(is)e(0.)150 2221 y Fr(6.2)68 b(Bash)45 b(Startup)g(Files)275 -2470 y Ft(This)35 b(section)j(describs)e(ho)m(w)h(Bash)h(executes)h -(its)e(startup)g(\014les.)61 b(If)37 b(an)m(y)h(of)g(the)g(\014les)e +TeXDict begin 65 70 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(65)150 299 y Fs(--)384 +b Ft(A)38 b Fs(--)g Ft(signals)g(the)h(end)e(of)i(options)f(and)g +(disables)g(further)f(option)h(pro)s(cessing.)64 b(An)m(y)630 +408 y(argumen)m(ts)31 b(after)g(the)f Fs(--)g Ft(are)h(treated)g(as)g +(\014lenames)f(and)g(argumen)m(ts.)275 575 y(A)d Fm(lo)-5 +b(gin)35 b Ft(shell)27 b(is)g(one)h(whose)f(\014rst)f(c)m(haracter)j +(of)e(argumen)m(t)h(zero)f(is)h(`)p Fs(-)p Ft(',)g(or)f(one)g(in)m(v)m +(ok)m(ed)i(with)e(the)150 685 y(`)p Fs(--login)p Ft(')i(option.)275 +825 y(An)24 b Fm(inter)-5 b(active)33 b Ft(shell)25 b(is)g(one)g +(started)g(without)g(non-option)h(argumen)m(ts,)g(unless)f(`)p +Fs(-s)p Ft(')f(is)h(sp)s(eci\014ed,)150 934 y(without)43 +b(sp)s(ecifying)f(the)i(`)p Fs(-c)p Ft(')e(option,)47 +b(and)42 b(whose)h(input)f(and)g(output)g(are)h(b)s(oth)g(connected)g +(to)150 1044 y(terminals)22 b(\(as)h(determined)f(b)m(y)g +Fs(isatty\(3\))p Ft(\),)f(or)i(one)f(started)g(with)g(the)g(`)p +Fs(-i)p Ft(')g(option.)39 b(See)22 b(Section)h(6.3)150 +1153 y([In)m(teractiv)m(e)33 b(Shells],)e(page)g(67,)g(for)f(more)h +(information.)275 1293 y(If)38 b(argumen)m(ts)h(remain)g(after)g +(option)h(pro)s(cessing,)h(and)d(neither)h(the)g(`)p +Fs(-c)p Ft(')f(nor)h(the)g(`)p Fs(-s)p Ft(')f(option)150 +1403 y(has)33 b(b)s(een)g(supplied,)h(the)g(\014rst)e(argumen)m(t)j(is) +e(assumed)g(to)h(b)s(e)f(the)h(name)g(of)g(a)g(\014le)g(con)m(taining)h +(shell)150 1512 y(commands)30 b(\(see)g(Section)h(3.8)g([Shell)f +(Scripts],)g(page)h(31\).)41 b(When)30 b(Bash)g(is)g(in)m(v)m(ok)m(ed)i +(in)d(this)h(fashion,)150 1622 y Fs($0)37 b Ft(is)g(set)h(to)h(the)e +(name)h(of)f(the)h(\014le,)i(and)c(the)i(p)s(ositional)g(parameters)g +(are)g(set)g(to)g(the)g(remaining)150 1731 y(argumen)m(ts.)h(Bash)26 +b(reads)f(and)g(executes)h(commands)f(from)g(this)g(\014le,)i(then)e +(exits.)40 b(Bash's)25 b(exit)i(status)150 1841 y(is)f(the)h(exit)h +(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 -(an)g(error.)38 b(Tildes)23 b(are)j(expanded)e(in)f(\014le)i(names)g -(as)g(describ)s(ed)e(ab)s(o)m(v)m(e)150 2689 y(under)29 -b(Tilde)f(Expansion)h(\(see)i(Section)f(3.5.2)j([Tilde)28 -b(Expansion],)h(page)j(18\).)275 2828 y(In)m(teractiv)m(e)f(shells)e -(are)i(describ)s(ed)d(in)h(Section)h(6.3)i([In)m(teractiv)m(e)g -(Shells],)c(page)j(67.)150 3063 y Fk(In)m(v)m(ok)m(ed)40 -b(as)h(an)f(in)m(teractiv)m(e)f(login)j(shell,)g(or)g(with)e(`)p -Fi(--login)p Fk(')275 3312 y Ft(When)e(Bash)g(is)g(in)m(v)m(ok)m(ed)h -(as)f(an)g(in)m(teractiv)m(e)i(login)d(shell,)i(or)f(as)h(a)g(non-in)m -(teractiv)m(e)g(shell)d(with)150 3422 y(the)f(`)p Fs(--login)p -Ft(')d(option,)k(it)d(\014rst)h(reads)g(and)g(executes)i(commands)e -(from)f(the)i(\014le)f(`)p Fs(/etc/profile)p Ft(',)150 -3531 y(if)27 b(that)i(\014le)e(exists.)40 b(After)28 -b(reading)g(that)g(\014le,)g(it)g(lo)s(oks)g(for)g(`)p -Fs(~/.bash_profile)p Ft(',)d(`)p Fs(~/.bash_login)p Ft(',)150 -3641 y(and)j(`)p Fs(~/.profile)p Ft(',)f(in)h(that)h(order,)g(and)f -(reads)g(and)h(executes)h(commands)e(from)g(the)h(\014rst)f(one)h(that) -150 3750 y(exists)h(and)f(is)g(readable.)40 b(The)30 -b(`)p Fs(--noprofile)p Ft(')d(option)j(ma)m(y)g(b)s(e)g(used)f(when)g -(the)h(shell)f(is)g(started)h(to)150 3860 y(inhibit)d(this)i(b)s(eha)m -(vior.)275 3999 y(When)72 b(a)i(login)e(shell)f(exits,)84 -b(Bash)73 b(reads)g(and)g(executes)h(commands)f(from)g(the)g(\014le)150 -4109 y(`)p Fs(~/.bash_logout)p Ft(',)27 b(if)j(it)f(exists.)150 -4343 y Fk(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f -(non-login)k(shell)275 4592 y Ft(When)35 b(an)g(in)m(teractiv)m(e)h -(shell)e(that)h(is)g(not)g(a)h(login)e(shell)g(is)g(started,)j(Bash)f -(reads)f(and)g(executes)150 4702 y(commands)24 b(from)f(`)p -Fs(~/.bashrc)p Ft(',)h(if)f(that)h(\014le)f(exists.)39 -b(This)22 b(ma)m(y)j(b)s(e)e(inhibited)d(b)m(y)k(using)f(the)h(`)p -Fs(--norc)p Ft(')150 4812 y(option.)51 b(The)33 b(`)p -Fs(--rcfile)28 b Fj(file)11 b Ft(')33 b(option)g(will)e(force)k(Bash)f -(to)h(read)e(and)h(execute)h(commands)e(from)150 4921 -y Fq(\014le)i Ft(instead)29 b(of)i(`)p Fs(~/.bashrc)p -Ft('.)275 5061 y(So,)f(t)m(ypically)-8 b(,)30 b(y)m(our)g(`)p -Fs(~/.bash_profile)p Ft(')d(con)m(tains)k(the)f(line)390 -5200 y Fs(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g(~/.bashrc;)e(fi) -150 5340 y Ft(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h(login-sp)s -(eci\014c)d(initializations.)p eop +(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 +(page)i(18\).)275 2828 y(In)m(teractiv)m(e)g(shells)f(are)g(describ)s +(ed)e(in)h(Section)h(6.3)h([In)m(teractiv)m(e)h(Shells],)d(page)h(67.) +150 3063 y Fk(In)m(v)m(ok)m(ed)40 b(as)h(an)f(in)m(teractiv)m(e)f +(login)j(shell,)g(or)g(with)e(`)p Fi(--login)p Fk(')275 +3312 y Ft(When)e(Bash)g(is)h(in)m(v)m(ok)m(ed)h(as)e(an)g(in)m +(teractiv)m(e)k(login)d(shell,)i(or)d(as)h(a)g(non-in)m(teractiv)m(e)i +(shell)d(with)150 3422 y(the)d(`)p Fs(--login)p Ft(')d(option,)37 +b(it)d(\014rst)g(reads)g(and)g(executes)i(commands)e(from)f(the)i +(\014le)g(`)p Fs(/etc/profile)p Ft(',)150 3531 y(if)28 +b(that)h(\014le)f(exists.)41 b(After)28 b(reading)h(that)f(\014le,)h +(it)g(lo)s(oks)g(for)f(`)p Fs(~/.bash_profile)p Ft(',)d(`)p +Fs(~/.bash_login)p Ft(',)150 3641 y(and)j(`)p Fs(~/.profile)p +Ft(',)f(in)i(that)g(order,)g(and)f(reads)g(and)h(executes)h(commands)e +(from)g(the)h(\014rst)f(one)h(that)150 3750 y(exists)i(and)e(is)h +(readable.)41 b(The)30 b(`)p Fs(--noprofile)p Ft(')d(option)k(ma)m(y)f +(b)s(e)g(used)f(when)g(the)h(shell)h(is)f(started)g(to)150 +3860 y(inhibit)g(this)g(b)s(eha)m(vior.)275 3999 y(When)72 +b(a)i(login)g(shell)f(exits,)85 b(Bash)73 b(reads)g(and)g(executes)h +(commands)f(from)g(the)g(\014le)150 4109 y(`)p Fs(~/.bash_logout)p +Ft(',)27 b(if)k(it)f(exists.)150 4343 y Fk(In)m(v)m(ok)m(ed)40 +b(as)h(an)f(in)m(teractiv)m(e)f(non-login)k(shell)275 +4592 y Ft(When)35 b(an)g(in)m(teractiv)m(e)j(shell)e(that)f(is)h(not)f +(a)h(login)g(shell)g(is)f(started,)i(Bash)f(reads)f(and)g(executes)150 +4702 y(commands)24 b(from)f(`)p Fs(~/.bashrc)p Ft(',)h(if)g(that)g +(\014le)g(exists.)40 b(This)23 b(ma)m(y)i(b)s(e)e(inhibited)g(b)m(y)h +(using)g(the)g(`)p Fs(--norc)p Ft(')150 4812 y(option.)52 +b(The)33 b(`)p Fs(--rcfile)28 b Fj(file)11 b Ft(')33 +b(option)h(will)g(force)h(Bash)f(to)h(read)e(and)h(execute)h(commands)e +(from)150 4921 y Fq(\014le)j Ft(instead)30 b(of)h(`)p +Fs(~/.bashrc)p Ft('.)275 5061 y(So,)f(t)m(ypically)-8 +b(,)33 b(y)m(our)d(`)p Fs(~/.bash_profile)p Ft(')d(con)m(tains)32 +b(the)e(line)390 5200 y Fs(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g +(~/.bashrc;)e(fi)150 5340 y Ft(after)31 b(\(or)g(b)s(efore\))f(an)m(y)h +(login-sp)s(eci\014c)g(initializations.)p eop end %%Page: 66 72 -66 71 bop 150 -116 a Ft(66)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fk(In)m(v)m(ok)m(ed)40 b(non-in)m(teractiv)m(ely)275 -571 y Ft(When)24 b(Bash)h(is)f(started)h(non-in)m(teractiv)m(ely)-8 -b(,)26 b(to)g(run)d(a)i(shell)e(script,)i(for)g(example,)h(it)e(lo)s -(oks)g(for)h(the)150 680 y(v)-5 b(ariable)33 b Fs(BASH_ENV)f -Ft(in)h(the)i(en)m(vironmen)m(t,)g(expands)f(its)f(v)-5 -b(alue)34 b(if)g(it)g(app)s(ears)f(there,)j(and)e(uses)g(the)150 -790 y(expanded)c(v)-5 b(alue)29 b(as)i(the)g(name)f(of)h(a)f(\014le)g -(to)h(read)f(and)g(execute.)42 b(Bash)31 b(b)s(eha)m(v)m(es)g(as)g(if)e -(the)h(follo)m(wing)150 900 y(command)g(w)m(ere)h(executed:)390 -1062 y Fs(if)47 b([)h(-n)f("$BASH_ENV")e(];)i(then)f(.)i("$BASH_ENV";)c -(fi)150 1224 y Ft(but)30 b(the)g(v)-5 b(alue)30 b(of)h(the)f -Fs(PATH)f Ft(v)-5 b(ariable)30 b(is)f(not)i(used)e(to)i(searc)m(h)g -(for)f(the)h(\014le)e(name.)275 1387 y(As)38 b(noted)h(ab)s(o)m(v)m(e,) -j(if)37 b(a)i(non-in)m(teractiv)m(e)g(shell)e(is)h(in)m(v)m(ok)m(ed)h -(with)e(the)h(`)p Fs(--login)p Ft(')g(option,)i(Bash)150 +TeXDict begin 66 71 bop 150 -116 a Ft(66)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fk(In)m(v)m(ok)m(ed)40 +b(non-in)m(teractiv)m(ely)275 571 y Ft(When)24 b(Bash)h(is)g(started)g +(non-in)m(teractiv)m(ely)-8 b(,)29 b(to)d(run)d(a)i(shell)g(script,)h +(for)f(example,)i(it)e(lo)s(oks)g(for)g(the)150 680 y(v)-5 +b(ariable)35 b Fs(BASH_ENV)d Ft(in)i(the)h(en)m(vironmen)m(t,)h +(expands)e(its)g(v)-5 b(alue)35 b(if)g(it)g(app)s(ears)e(there,)j(and)e +(uses)g(the)150 790 y(expanded)c(v)-5 b(alue)30 b(as)h(the)g(name)f(of) +h(a)f(\014le)h(to)g(read)f(and)g(execute.)42 b(Bash)31 +b(b)s(eha)m(v)m(es)g(as)g(if)f(the)g(follo)m(wing)150 +900 y(command)g(w)m(ere)h(executed:)390 1062 y Fs(if)47 +b([)h(-n)f("$BASH_ENV")e(];)i(then)f(.)i("$BASH_ENV";)c(fi)150 +1224 y Ft(but)30 b(the)g(v)-5 b(alue)31 b(of)g(the)f +Fs(PATH)f Ft(v)-5 b(ariable)32 b(is)e(not)h(used)e(to)i(searc)m(h)g +(for)f(the)h(\014le)f(name.)275 1387 y(As)38 b(noted)h(ab)s(o)m(v)m(e,) +j(if)c(a)h(non-in)m(teractiv)m(e)i(shell)e(is)g(in)m(v)m(ok)m(ed)h +(with)e(the)g(`)p Fs(--login)p Ft(')g(option,)j(Bash)150 1496 y(attempts)31 b(to)g(read)g(and)e(execute)j(commands)e(from)g(the) -h(login)e(shell)g(startup)g(\014les.)150 1776 y Fk(In)m(v)m(ok)m(ed)40 -b(with)g(name)g Fi(sh)275 2048 y Ft(If)29 b(Bash)g(is)g(in)m(v)m(ok)m -(ed)h(with)e(the)i(name)f Fs(sh)p Ft(,)g(it)h(tries)e(to)j(mimic)d(the) -h(startup)g(b)s(eha)m(vior)g(of)h(historical)150 2158 -y(v)m(ersions)g(of)g Fs(sh)g Ft(as)h(closely)f(as)g(p)s(ossible,)e -(while)h(conforming)g(to)i(the)g Fl(posix)e Ft(standard)h(as)h(w)m -(ell.)275 2320 y(When)50 b(in)m(v)m(ok)m(ed)i(as)g(an)f(in)m(teractiv)m -(e)h(login)e(shell,)55 b(or)c(as)g(a)h(non-in)m(teractiv)m(e)f(shell)f -(with)g(the)150 2430 y(`)p Fs(--login)p Ft(')39 b(option,)j(it)e -(\014rst)f(attempts)i(to)g(read)f(and)g(execute)h(commands)f(from)g(`)p -Fs(/etc/profile)p Ft(')150 2539 y(and)d(`)p Fs(~/.profile)p -Ft(',)g(in)f(that)i(order.)62 b(The)37 b(`)p Fs(--noprofile)p -Ft(')e(option)i(ma)m(y)h(b)s(e)f(used)g(to)h(inhibit)c(this)150 -2649 y(b)s(eha)m(vior.)81 b(When)44 b(in)m(v)m(ok)m(ed)g(as)h(an)f(in)m -(teractiv)m(e)h(shell)d(with)h(the)h(name)g Fs(sh)p Ft(,)j(Bash)d(lo)s -(oks)g(for)g(the)150 2759 y(v)-5 b(ariable)35 b Fs(ENV)p -Ft(,)i(expands)e(its)h(v)-5 b(alue)35 b(if)g(it)h(is)f(de\014ned,)i -(and)e(uses)h(the)g(expanded)g(v)-5 b(alue)35 b(as)i(the)f(name)150 -2868 y(of)i(a)h(\014le)f(to)h(read)f(and)g(execute.)66 -b(Since)37 b(a)i(shell)d(in)m(v)m(ok)m(ed)j(as)g Fs(sh)e -Ft(do)s(es)h(not)h(attempt)g(to)g(read)g(and)150 2978 -y(execute)i(commands)e(from)g(an)m(y)h(other)g(startup)f(\014les,)i -(the)f(`)p Fs(--rcfile)p Ft(')d(option)i(has)h(no)f(e\013ect.)70 -b(A)150 3087 y(non-in)m(teractiv)m(e)30 b(shell)d(in)m(v)m(ok)m(ed)i -(with)f(the)h(name)g Fs(sh)f Ft(do)s(es)g(not)i(attempt)g(to)f(read)g +h(login)g(shell)g(startup)e(\014les.)150 1776 y Fk(In)m(v)m(ok)m(ed)40 +b(with)g(name)h Fi(sh)275 2048 y Ft(If)29 b(Bash)g(is)h(in)m(v)m(ok)m +(ed)h(with)e(the)h(name)f Fs(sh)p Ft(,)g(it)i(tries)e(to)i(mimic)f(the) +f(startup)g(b)s(eha)m(vior)h(of)g(historical)150 2158 +y(v)m(ersions)h(of)f Fs(sh)g Ft(as)h(closely)h(as)e(p)s(ossible,)g +(while)h(conforming)f(to)h(the)g Fl(posix)e Ft(standard)h(as)h(w)m +(ell.)275 2320 y(When)50 b(in)m(v)m(ok)m(ed)j(as)f(an)f(in)m(teractiv)m +(e)j(login)e(shell,)57 b(or)51 b(as)g(a)h(non-in)m(teractiv)m(e)h +(shell)f(with)f(the)150 2430 y(`)p Fs(--login)p Ft(')39 +b(option,)k(it)e(\014rst)e(attempts)i(to)g(read)f(and)g(execute)h +(commands)f(from)g(`)p Fs(/etc/profile)p Ft(')150 2539 +y(and)d(`)p Fs(~/.profile)p Ft(',)g(in)g(that)h(order.)62 +b(The)37 b(`)p Fs(--noprofile)p Ft(')e(option)j(ma)m(y)g(b)s(e)f(used)g +(to)h(inhibit)f(this)150 2649 y(b)s(eha)m(vior.)82 b(When)44 +b(in)m(v)m(ok)m(ed)h(as)g(an)f(in)m(teractiv)m(e)j(shell)d(with)g(the)g +(name)g Fs(sh)p Ft(,)j(Bash)d(lo)s(oks)h(for)f(the)150 +2759 y(v)-5 b(ariable)37 b Fs(ENV)p Ft(,)g(expands)e(its)i(v)-5 +b(alue)36 b(if)g(it)h(is)f(de\014ned,)h(and)e(uses)h(the)g(expanded)g +(v)-5 b(alue)36 b(as)h(the)f(name)150 2868 y(of)i(a)h(\014le)g(to)g +(read)f(and)g(execute.)66 b(Since)38 b(a)h(shell)f(in)m(v)m(ok)m(ed)i +(as)f Fs(sh)e Ft(do)s(es)h(not)h(attempt)g(to)g(read)g(and)150 +2978 y(execute)i(commands)e(from)g(an)m(y)h(other)g(startup)f(\014les,) +j(the)e(`)p Fs(--rcfile)p Ft(')d(option)j(has)g(no)f(e\013ect.)70 +b(A)150 3087 y(non-in)m(teractiv)m(e)32 b(shell)d(in)m(v)m(ok)m(ed)h +(with)f(the)g(name)g Fs(sh)f Ft(do)s(es)g(not)i(attempt)g(to)f(read)g (an)m(y)g(other)g(startup)150 3197 y(\014les.)275 3359 -y(When)h(in)m(v)m(ok)m(ed)g(as)h Fs(sh)p Ft(,)f(Bash)h(en)m(ters)g -Fl(posix)e Ft(mo)s(de)h(after)h(the)g(startup)f(\014les)f(are)i(read.) +y(When)h(in)m(v)m(ok)m(ed)h(as)g Fs(sh)p Ft(,)f(Bash)h(en)m(ters)g +Fl(posix)e Ft(mo)s(de)h(after)h(the)g(startup)f(\014les)g(are)h(read.) 150 3639 y Fk(In)m(v)m(ok)m(ed)40 b(in)h Fh(posix)f Fk(mo)s(de)275 -3911 y Ft(When)d(Bash)g(is)f(started)i(in)e Fl(posix)g -Ft(mo)s(de,)j(as)e(with)f(the)i(`)p Fs(--posix)p Ft(')d(command)i(line) -f(option,)i(it)150 4021 y(follo)m(ws)26 b(the)i Fl(posix)e -Ft(standard)h(for)g(startup)g(\014les.)38 b(In)27 b(this)f(mo)s(de,)h -(in)m(teractiv)m(e)i(shells)c(expand)h(the)i Fs(ENV)150 -4131 y Ft(v)-5 b(ariable)34 b(and)h(commands)g(are)h(read)g(and)f -(executed)h(from)f(the)h(\014le)f(whose)g(name)g(is)g(the)h(expanded) -150 4240 y(v)-5 b(alue.)40 b(No)31 b(other)g(startup)f(\014les)f(are)i -(read.)150 4520 y Fk(In)m(v)m(ok)m(ed)40 b(b)m(y)g(remote)g(shell)i -(daemon)275 4792 y Ft(Bash)34 b(attempts)i(to)f(determine)f(when)f(it)h -(is)g(b)s(eing)f(run)g(b)m(y)h(the)h(remote)h(shell)c(daemon,)k -(usually)150 4902 y Fs(rshd)p Ft(.)60 b(If)36 b(Bash)h(determines)f(it) -h(is)f(b)s(eing)g(run)f(b)m(y)i(rshd,)h(it)e(reads)h(and)f(executes)j -(commands)d(from)150 5011 y(`)p Fs(~/.bashrc)p Ft(',)h(if)f(that)h -(\014le)f(exists)h(and)f(is)g(readable.)61 b(It)37 b(will)d(not)j(do)g -(this)f(if)g(in)m(v)m(ok)m(ed)h(as)h Fs(sh)p Ft(.)59 -b(The)150 5121 y(`)p Fs(--norc)p Ft(')34 b(option)h(ma)m(y)i(b)s(e)e -(used)f(to)j(inhibit)32 b(this)i(b)s(eha)m(vior,)j(and)e(the)g(`)p -Fs(--rcfile)p Ft(')f(option)h(ma)m(y)i(b)s(e)150 5230 -y(used)25 b(to)h(force)g(another)g(\014le)e(to)j(b)s(e)e(read,)h(but)f -Fs(rshd)g Ft(do)s(es)g(not)g(generally)g(in)m(v)m(ok)m(e)i(the)e(shell) -f(with)g(those)150 5340 y(options)30 b(or)g(allo)m(w)g(them)g(to)h(b)s -(e)f(sp)s(eci\014ed.)p eop +3911 y Ft(When)d(Bash)g(is)g(started)h(in)f Fl(posix)f +Ft(mo)s(de,)j(as)e(with)g(the)h(`)p Fs(--posix)p Ft(')d(command)i(line) +h(option,)h(it)150 4021 y(follo)m(ws)28 b(the)g Fl(posix)e +Ft(standard)h(for)g(startup)g(\014les.)39 b(In)27 b(this)g(mo)s(de,)g +(in)m(teractiv)m(e)k(shells)c(expand)f(the)i Fs(ENV)150 +4131 y Ft(v)-5 b(ariable)36 b(and)f(commands)g(are)h(read)g(and)f +(executed)h(from)f(the)h(\014le)g(whose)f(name)g(is)h(the)g(expanded) +150 4240 y(v)-5 b(alue.)41 b(No)31 b(other)g(startup)f(\014les)g(are)h +(read.)150 4520 y Fk(In)m(v)m(ok)m(ed)40 b(b)m(y)g(remote)h(shell)h +(daemon)275 4792 y Ft(Bash)34 b(attempts)i(to)f(determine)g(when)e(it)i +(is)g(b)s(eing)f(run)f(b)m(y)h(the)h(remote)h(shell)e(daemon,)i +(usually)150 4902 y Fs(rshd)p Ft(.)60 b(If)36 b(Bash)h(determines)g(it) +h(is)f(b)s(eing)g(run)e(b)m(y)i(rshd,)h(it)f(reads)g(and)f(executes)j +(commands)d(from)150 5011 y(`)p Fs(~/.bashrc)p Ft(',)h(if)g(that)g +(\014le)g(exists)h(and)e(is)h(readable.)62 b(It)37 b(will)g(not)g(do)g +(this)g(if)g(in)m(v)m(ok)m(ed)h(as)g Fs(sh)p Ft(.)59 +b(The)150 5121 y(`)p Fs(--norc)p Ft(')34 b(option)i(ma)m(y)h(b)s(e)e +(used)f(to)j(inhibit)e(this)g(b)s(eha)m(vior,)j(and)d(the)g(`)p +Fs(--rcfile)p Ft(')f(option)i(ma)m(y)h(b)s(e)150 5230 +y(used)25 b(to)h(force)g(another)g(\014le)f(to)i(b)s(e)e(read,)h(but)f +Fs(rshd)g Ft(do)s(es)g(not)g(generally)i(in)m(v)m(ok)m(e)h(the)d(shell) +h(with)f(those)150 5340 y(options)31 b(or)f(allo)m(w)i(them)e(to)h(b)s +(e)f(sp)s(eci\014ed.)p eop end %%Page: 67 73 -67 72 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(67)150 299 y Fk(In)m(v)m(ok)m(ed)40 +TeXDict begin 67 72 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(67)150 299 y Fk(In)m(v)m(ok)m(ed)40 b(with)g(unequal)h(e\013ectiv)m(e)e(and)i(real)g Fh(uid/gid)p -Fk(s)275 538 y Ft(If)26 b(Bash)i(is)e(started)i(with)e(the)h -(e\013ectiv)m(e)i(user)e(\(group\))g(id)f(not)i(equal)f(to)h(the)f -(real)g(user)g(\(group\))g(id,)150 648 y(and)f(the)i -Fs(-p)e Ft(option)g(is)g(not)i(supplied,)c(no)j(startup)g(\014les)f -(are)h(read,)h(shell)d(functions)h(are)h(not)g(inherited)150 -757 y(from)g(the)h(en)m(vironmen)m(t,)g(the)g Fs(SHELLOPTS)d -Ft(v)-5 b(ariable,)27 b(if)g(it)g(app)s(ears)g(in)f(the)i(en)m -(vironmen)m(t,)g(is)f(ignored,)150 867 y(and)g(the)h(e\013ectiv)m(e)i -(user)d(id)f(is)h(set)h(to)h(the)f(real)f(user)g(id.)39 -b(If)27 b(the)h Fs(-p)g Ft(option)f(is)g(supplied)d(at)29 -b(in)m(v)m(o)s(cation,)150 977 y(the)i(startup)f(b)s(eha)m(vior)f(is)g -(the)i(same,)g(but)f(the)g(e\013ectiv)m(e)i(user)e(id)f(is)g(not)i -(reset.)150 1220 y Fr(6.3)68 b(In)l(teractiv)l(e)47 b(Shells)150 +Fk(s)275 538 y Ft(If)26 b(Bash)i(is)f(started)h(with)f(the)g +(e\013ectiv)m(e)j(user)d(\(group\))g(id)g(not)h(equal)g(to)g(the)f +(real)h(user)f(\(group\))g(id,)150 648 y(and)f(the)i +Fs(-p)e Ft(option)h(is)g(not)h(supplied,)e(no)h(startup)g(\014les)g +(are)g(read,)h(shell)f(functions)g(are)g(not)g(inherited)150 +757 y(from)g(the)h(en)m(vironmen)m(t,)h(the)f Fs(SHELLOPTS)d +Ft(v)-5 b(ariable,)29 b(if)f(it)g(app)s(ears)f(in)g(the)h(en)m +(vironmen)m(t,)h(is)f(ignored,)150 867 y(and)f(the)h(e\013ectiv)m(e)j +(user)c(id)g(is)h(set)g(to)h(the)f(real)g(user)f(id.)40 +b(If)27 b(the)h Fs(-p)g Ft(option)g(is)g(supplied)e(at)j(in)m(v)m(o)s +(cation,)150 977 y(the)i(startup)f(b)s(eha)m(vior)g(is)g(the)h(same,)g +(but)f(the)g(e\013ectiv)m(e)j(user)d(id)g(is)g(not)h(reset.)150 +1220 y Fr(6.3)68 b(In)l(teractiv)l(e)47 b(Shells)150 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)h(shell)d(is)i(one)g(started)h -(without)f(non-option)f(argumen)m(ts,)j(unless)d(`)p -Fs(-s)p Ft(')h(is)f(sp)s(eci\014ed,)150 1889 y(without)32 -b(sp)s(eci\014ying)e(the)j(`)p Fs(-c)p Ft(')f(option,)h(and)f(whose)h -(input)d(and)j(error)f(output)g(are)h(b)s(oth)f(connected)150 -1998 y(to)f(terminals)e(\(as)i(determined)e(b)m(y)h Fs(isatty\(3\))p -Ft(\),)f(or)h(one)h(started)f(with)f(the)i(`)p Fs(-i)p -Ft(')f(option.)275 2128 y(An)g(in)m(teractiv)m(e)h(shell)d(generally)i -(reads)g(from)g(and)g(writes)f(to)i(a)g(user's)f(terminal.)275 -2258 y(The)e(`)p Fs(-s)p Ft(')i(in)m(v)m(o)s(cation)f(option)g(ma)m(y)h -(b)s(e)f(used)f(to)i(set)g(the)g(p)s(ositional)d(parameters)i(when)g -(an)g(in)m(ter-)150 2367 y(activ)m(e)j(shell)c(is)i(started.)150 +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 +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 +2258 y(The)e(`)p Fs(-s)p Ft(')i(in)m(v)m(o)s(cation)h(option)f(ma)m(y)g +(b)s(e)f(used)f(to)i(set)g(the)g(p)s(ositional)g(parameters)f(when)g +(an)g(in)m(ter-)150 2367 y(activ)m(e)k(shell)d(is)h(started.)150 2577 y Fk(6.3.2)63 b(Is)41 b(this)g(Shell)g(In)m(teractiv)m(e?)275 -2817 y Ft(T)-8 b(o)32 b(determine)f(within)f(a)i(startup)g(script)f -(whether)h(or)g(not)g(Bash)g(is)f(running)f(in)m(teractiv)m(ely)-8 -b(,)33 b(test)150 2926 y(the)42 b(v)-5 b(alue)41 b(of)g(the)h(`)p -Fs(-)p Ft(')g(sp)s(ecial)e(parameter.)75 b(It)41 b(con)m(tains)h -Fs(i)f Ft(when)g(the)h(shell)d(is)i(in)m(teractiv)m(e.)75 +2817 y Ft(T)-8 b(o)32 b(determine)g(within)g(a)g(startup)g(script)g +(whether)g(or)g(not)g(Bash)g(is)g(running)f(in)m(teractiv)m(ely)-8 +b(,)36 b(test)150 2926 y(the)42 b(v)-5 b(alue)42 b(of)f(the)h(`)p +Fs(-)p Ft(')g(sp)s(ecial)g(parameter.)75 b(It)41 b(con)m(tains)i +Fs(i)e Ft(when)g(the)h(shell)f(is)h(in)m(teractiv)m(e.)77 b(F)-8 b(or)150 3036 y(example:)390 3166 y Fs(case)47 b("$-")f(in)390 3275 y(*i*\))h(echo)f(This)h(shell)f(is)h(interactive)e (;;)390 3385 y(*\))i(echo)g(This)f(shell)h(is)g(not)g(interactive)e(;;) -390 3495 y(esac)275 3624 y Ft(Alternativ)m(ely)-8 b(,)25 -b(startup)e(scripts)g(ma)m(y)h(examine)f(the)h(v)-5 b(ariable)23 -b Fs(PS1)p Ft(;)i(it)f(is)e(unset)i(in)e(non-in)m(teractiv)m(e)150 -3734 y(shells,)29 b(and)g(set)i(in)e(in)m(teractiv)m(e)j(shells.)38 -b(Th)m(us:)390 3864 y Fs(if)47 b([)h(-z)f("$PS1")f(];)h(then)772 -3973 y(echo)f(This)h(shell)f(is)i(not)f(interactive)390 +390 3495 y(esac)275 3624 y Ft(Alternativ)m(ely)-8 b(,)28 +b(startup)23 b(scripts)h(ma)m(y)g(examine)g(the)g(v)-5 +b(ariable)25 b Fs(PS1)p Ft(;)g(it)g(is)e(unset)h(in)f(non-in)m +(teractiv)m(e)150 3734 y(shells,)31 b(and)e(set)i(in)f(in)m(teractiv)m +(e)k(shells.)40 b(Th)m(us:)390 3864 y Fs(if)47 b([)h(-z)f("$PS1")f(];)h +(then)772 3973 y(echo)f(This)h(shell)f(is)i(not)f(interactive)390 4083 y(else)772 4193 y(echo)f(This)h(shell)f(is)i(interactive)390 4302 y(fi)150 4512 y Fk(6.3.3)63 b(In)m(teractiv)m(e)38 -b(Shell)k(Beha)m(vior)275 4752 y Ft(When)30 b(the)g(shell)f(is)g -(running)f(in)m(teractiv)m(ely)-8 b(,)31 b(it)f(c)m(hanges)h(its)f(b)s +b(Shell)k(Beha)m(vior)275 4752 y Ft(When)30 b(the)g(shell)h(is)f +(running)f(in)m(teractiv)m(ely)-8 b(,)34 b(it)d(c)m(hanges)g(its)g(b)s (eha)m(vior)g(in)f(sev)m(eral)h(w)m(a)m(ys.)199 4881 -y(1.)61 b(Startup)37 b(\014les)f(are)i(read)f(and)g(executed)h(as)f -(describ)s(ed)f(in)g(Section)h(6.2)h([Bash)g(Startup)e(Files],)330 -4991 y(page)31 b(65.)199 5121 y(2.)61 b(Job)35 b(Con)m(trol)f(\(see)i -(Chapter)f(7)g([Job)g(Con)m(trol],)h(page)g(79\))g(is)e(enabled)g(b)m -(y)h(default.)54 b(When)34 b(job)330 5230 y(con)m(trol)g(is)f(in)f -(e\013ect,)37 b(Bash)d(ignores)f(the)h(k)m(eyb)s(oard-generated)h(job)e -(con)m(trol)h(signals)f Fs(SIGTTIN)p Ft(,)330 5340 y -Fs(SIGTTOU)p Ft(,)c(and)g Fs(SIGTSTP)p Ft(.)p eop +y(1.)61 b(Startup)37 b(\014les)g(are)h(read)f(and)g(executed)h(as)f +(describ)s(ed)g(in)g(Section)h(6.2)g([Bash)g(Startup)e(Files],)330 +4991 y(page)31 b(65.)199 5121 y(2.)61 b(Job)35 b(Con)m(trol)g(\(see)h +(Chapter)f(7)g([Job)g(Con)m(trol],)i(page)f(79\))g(is)f(enabled)g(b)m +(y)g(default.)55 b(When)34 b(job)330 5230 y(con)m(trol)h(is)f(in)f +(e\013ect,)k(Bash)d(ignores)g(the)g(k)m(eyb)s(oard-generated)h(job)e +(con)m(trol)i(signals)g Fs(SIGTTIN)p Ft(,)330 5340 y +Fs(SIGTTOU)p Ft(,)29 b(and)g Fs(SIGTSTP)p Ft(.)p eop +end %%Page: 68 74 -68 73 bop 150 -116 a Ft(68)2572 b(Bash)31 b(Reference)g(Man)m(ual)199 -299 y(3.)61 b(Bash)39 b(expands)f(and)g(displa)m(ys)f -Fs(PS1)h Ft(b)s(efore)h(reading)f(the)h(\014rst)f(line)f(of)i(a)g -(command,)i(and)d(ex-)330 408 y(pands)30 b(and)g(displa)m(ys)f -Fs(PS2)g Ft(b)s(efore)i(reading)f(the)h(second)f(and)h(subsequen)m(t)f -(lines)f(of)i(a)g(m)m(ulti-line)330 518 y(command.)199 -669 y(4.)61 b(Bash)26 b(executes)i(the)e(v)-5 b(alue)26 -b(of)g(the)h Fs(PROMPT_COMMAND)22 b Ft(v)-5 b(ariable)25 -b(as)i(a)f(command)g(b)s(efore)g(prin)m(ting)330 779 -y(the)31 b(primary)d(prompt,)i Fs($PS1)f Ft(\(see)i(Section)f(5.2)i -([Bash)f(V)-8 b(ariables],)30 b(page)h(55\).)199 930 -y(5.)61 b(Readline)28 b(\(see)j(Chapter)e(8)h([Command)e(Line)h -(Editing],)f(page)i(83\))h(is)e(used)g(to)h(read)f(commands)330 +TeXDict begin 68 73 bop 150 -116 a Ft(68)2572 b(Bash)31 +b(Reference)g(Man)m(ual)199 299 y(3.)61 b(Bash)39 b(expands)f(and)g +(displa)m(ys)h Fs(PS1)f Ft(b)s(efore)h(reading)g(the)g(\014rst)f(line)h +(of)g(a)g(command,)i(and)d(ex-)330 408 y(pands)30 b(and)g(displa)m(ys)h +Fs(PS2)e Ft(b)s(efore)i(reading)g(the)g(second)f(and)h(subsequen)m(t)f +(lines)h(of)g(a)g(m)m(ulti-line)330 518 y(command.)199 +669 y(4.)61 b(Bash)26 b(executes)i(the)e(v)-5 b(alue)27 +b(of)f(the)h Fs(PROMPT_COMMAND)22 b Ft(v)-5 b(ariable)27 +b(as)g(a)f(command)g(b)s(efore)g(prin)m(ting)330 779 +y(the)31 b(primary)e(prompt,)h Fs($PS1)f Ft(\(see)i(Section)g(5.2)h +([Bash)f(V)-8 b(ariables],)32 b(page)f(55\).)199 930 +y(5.)61 b(Readline)30 b(\(see)h(Chapter)e(8)h([Command)e(Line)i +(Editing],)g(page)g(83\))h(is)f(used)f(to)h(read)f(commands)330 1039 y(from)h(the)g(user's)g(terminal.)199 1190 y(6.)61 -b(Bash)36 b(insp)s(ects)f(the)i(v)-5 b(alue)36 b(of)g(the)g -Fs(ignoreeof)e Ft(option)i(to)h Fs(set)29 b(-o)36 b Ft(instead)g(of)g -(exiting)g(imme-)330 1300 y(diately)f(when)g(it)h(receiv)m(es)h(an)f -Fs(EOF)f Ft(on)h(its)f(standard)g(input)f(when)i(reading)f(a)h(command) -g(\(see)330 1409 y(Section)30 b(4.3)i([The)e(Set)g(Builtin],)f(page)i -(50\).)199 1560 y(7.)61 b(Command)43 b(history)g(\(see)i(Section)f(9.1) -h([Bash)f(History)g(F)-8 b(acilities],)47 b(page)e(109\))h(and)d -(history)330 1670 y(expansion)22 b(\(see)j(Section)e(9.3)i([History)e -(In)m(teraction],)j(page)e(111\))h(are)f(enabled)f(b)m(y)g(default.)38 -b(Bash)330 1779 y(will)20 b(sa)m(v)m(e)25 b(the)e(command)f(history)g -(to)i(the)f(\014le)f(named)g(b)m(y)h Fs($HISTFILE)d Ft(when)i(an)h(in)m -(teractiv)m(e)h(shell)330 1889 y(exits.)199 2040 y(8.)61 -b(Alias)29 b(expansion)h(\(see)h(Section)f(6.6)h([Aliases],)g(page)g -(71\))h(is)d(p)s(erformed)g(b)m(y)h(default.)199 2191 +b(Bash)36 b(insp)s(ects)g(the)h(v)-5 b(alue)37 b(of)f(the)g +Fs(ignoreeof)e Ft(option)j(to)g Fs(set)29 b(-o)36 b Ft(instead)h(of)f +(exiting)i(imme-)330 1300 y(diately)f(when)e(it)i(receiv)m(es)h(an)e +Fs(EOF)f Ft(on)h(its)g(standard)f(input)g(when)h(reading)g(a)g(command) +g(\(see)330 1409 y(Section)31 b(4.3)h([The)e(Set)g(Builtin],)i(page)f +(50\).)199 1560 y(7.)61 b(Command)43 b(history)h(\(see)h(Section)g(9.1) +g([Bash)f(History)h(F)-8 b(acilities],)51 b(page)45 b(109\))h(and)d +(history)330 1670 y(expansion)23 b(\(see)i(Section)f(9.3)h([History)f +(In)m(teraction],)j(page)d(111\))h(are)f(enabled)g(b)m(y)f(default.)39 +b(Bash)330 1779 y(will)23 b(sa)m(v)m(e)i(the)e(command)f(history)h(to)h +(the)f(\014le)g(named)f(b)m(y)h Fs($HISTFILE)d Ft(when)i(an)h(in)m +(teractiv)m(e)j(shell)330 1889 y(exits.)199 2040 y(8.)61 +b(Alias)31 b(expansion)g(\(see)g(Section)g(6.6)g([Aliases],)i(page)e +(71\))h(is)e(p)s(erformed)f(b)m(y)h(default.)199 2191 y(9.)61 b(In)24 b(the)g(absence)h(of)f(an)m(y)h(traps,)g(Bash)g -(ignores)e Fs(SIGTERM)g Ft(\(see)i(Section)f(3.7.6)i([Signals],)e(page) -h(31\).)154 2342 y(10.)61 b(In)26 b(the)h(absence)h(of)f(an)m(y)g -(traps,)g Fs(SIGINT)e Ft(is)h(caugh)m(t)i(and)f(handled)d(\(\(see)29 -b(Section)d(3.7.6)j([Signals],)330 2451 y(page)i(31\).)42 -b Fs(SIGINT)29 b Ft(will)e(in)m(terrupt)i(some)i(shell)e(builtins.)154 -2602 y(11.)61 b(An)40 b(in)m(teractiv)m(e)h(login)e(shell)g(sends)g(a)i -Fs(SIGHUP)d Ft(to)j(all)e(jobs)h(on)g(exit)g(if)g(the)g -Fs(hupoxexit)e Ft(shell)330 2712 y(option)30 b(has)g(b)s(een)g(enabled) -f(\(see)i(Section)f(3.7.6)j([Signals],)c(page)i(31\).)154 -2863 y(12.)61 b(The)31 b(`)p Fs(-n)p Ft(')g(in)m(v)m(o)s(cation)g -(option)f(is)h(ignored,)f(and)h(`)p Fs(set)f(-n)p Ft(')g(has)h(no)g -(e\013ect)i(\(see)f(Section)f(4.3)h([The)330 2972 y(Set)f(Builtin],)d -(page)j(50\).)154 3123 y(13.)61 b(Bash)32 b(will)d(c)m(hec)m(k)34 -b(for)e(mail)e(p)s(erio)s(dically)-8 b(,)30 b(dep)s(ending)f(on)j(the)g -(v)-5 b(alues)31 b(of)h(the)h Fs(MAIL)p Ft(,)e Fs(MAILPATH)p -Ft(,)330 3233 y(and)f Fs(MAILCHECK)e Ft(shell)g(v)-5 -b(ariables)29 b(\(see)j(Section)e(5.2)h([Bash)g(V)-8 -b(ariables],)30 b(page)h(55\).)154 3384 y(14.)61 b(Expansion)31 -b(errors)i(due)f(to)i(references)f(to)h(un)m(b)s(ound)c(shell)h(v)-5 -b(ariables)32 b(after)i(`)p Fs(set)29 b(-u)p Ft(')k(has)g(b)s(een)330 -3494 y(enabled)c(will)f(not)j(cause)g(the)f(shell)f(to)i(exit)f(\(see)h -(Section)g(4.3)g([The)f(Set)h(Builtin],)d(page)j(50\).)154 -3644 y(15.)61 b(The)48 b(shell)f(will)e(not)k(exit)f(on)h(expansion)e -(errors)h(caused)g(b)m(y)h Fq(v)-5 b(ar)54 b Ft(b)s(eing)47 -b(unset)h(or)h(n)m(ull)d(in)330 3754 y Fs(${)p Fj(var)11 -b Fs(:?)p Fj(word)g Fs(})26 b Ft(expansions)j(\(see)i(Section)g(3.5.3)h -([Shell)c(P)m(arameter)k(Expansion],)d(page)i(18\).)154 -3905 y(16.)61 b(Redirection)29 b(errors)h(encoun)m(tered)h(b)m(y)f -(shell)f(builtins)e(will)g(not)k(cause)g(the)f(shell)f(to)i(exit.)154 -4056 y(17.)61 b(When)26 b(running)e(in)i Fl(posix)f Ft(mo)s(de,)j(a)f -(sp)s(ecial)e(builtin)e(returning)i(an)h(error)h(status)g(will)d(not)i -(cause)330 4166 y(the)31 b(shell)d(to)j(exit)g(\(see)g(Section)f(6.11)i +(ignores)f Fs(SIGTERM)f Ft(\(see)i(Section)g(3.7.6)h([Signals],)g(page) +f(31\).)154 2342 y(10.)61 b(In)26 b(the)h(absence)h(of)f(an)m(y)g +(traps,)g Fs(SIGINT)e Ft(is)i(caugh)m(t)h(and)f(handled)e(\(\(see)k +(Section)e(3.7.6)i([Signals],)330 2451 y(page)i(31\).)42 +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) +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 +(e\013ect)i(\(see)f(Section)g(4.3)g([The)330 2972 y(Set)f(Builtin],)g +(page)g(50\).)154 3123 y(13.)61 b(Bash)32 b(will)g(c)m(hec)m(k)i(for)e +(mail)g(p)s(erio)s(dically)-8 b(,)34 b(dep)s(ending)c(on)i(the)g(v)-5 +b(alues)32 b(of)g(the)h Fs(MAIL)p Ft(,)e Fs(MAILPATH)p +Ft(,)330 3233 y(and)f Fs(MAILCHECK)e Ft(shell)i(v)-5 +b(ariables)31 b(\(see)h(Section)f(5.2)g([Bash)g(V)-8 +b(ariables],)32 b(page)f(55\).)154 3384 y(14.)61 b(Expansion)32 +b(errors)h(due)f(to)i(references)f(to)h(un)m(b)s(ound)c(shell)j(v)-5 +b(ariables)34 b(after)g(`)p Fs(set)29 b(-u)p Ft(')k(has)g(b)s(een)330 +3494 y(enabled)d(will)h(not)g(cause)g(the)f(shell)h(to)g(exit)g(\(see)g +(Section)h(4.3)f([The)f(Set)h(Builtin],)g(page)g(50\).)154 +3644 y(15.)61 b(The)48 b(shell)h(will)f(not)h(exit)g(on)g(expansion)f +(errors)g(caused)g(b)m(y)h Fq(v)-5 b(ar)54 b Ft(b)s(eing)48 +b(unset)g(or)h(n)m(ull)f(in)330 3754 y Fs(${)p Fj(var)11 +b Fs(:?)p Fj(word)g Fs(})26 b Ft(expansions)k(\(see)h(Section)h(3.5.3)g +([Shell)e(P)m(arameter)i(Expansion],)e(page)h(18\).)154 +3905 y(16.)61 b(Redirection)31 b(errors)f(encoun)m(tered)h(b)m(y)f +(shell)h(builtins)f(will)g(not)h(cause)g(the)f(shell)h(to)g(exit.)154 +4056 y(17.)61 b(When)26 b(running)f(in)i Fl(posix)e Ft(mo)s(de,)j(a)f +(sp)s(ecial)g(builtin)f(returning)g(an)g(error)h(status)g(will)g(not)f +(cause)330 4166 y(the)31 b(shell)f(to)h(exit)h(\(see)f(Section)g(6.11)h ([Bash)f(POSIX)e(Mo)s(de],)i(page)g(76\).)154 4316 y(18.)61 -b(A)34 b(failed)e Fs(exec)h Ft(will)e(not)j(cause)g(the)g(shell)e(to)i -(exit)g(\(see)g(Section)g(4.1)h([Bourne)f(Shell)d(Builtins],)330 -4426 y(page)g(33\).)154 4577 y(19.)61 b(P)m(arser)31 -b(syn)m(tax)f(errors)g(will)e(not)j(cause)g(the)f(shell)f(to)i(exit.) -154 4728 y(20.)61 b(Simple)19 b(sp)s(elling)g(correction)i(for)h -(directory)f(argumen)m(ts)g(to)i(the)e Fs(cd)g Ft(builtin)d(is)j -(enabled)f(b)m(y)i(default)330 4838 y(\(see)38 b(the)e(description)f -(of)i(the)f Fs(cdspell)f Ft(option)h(to)h(the)g Fs(shopt)e -Ft(builtin)e(in)j(Section)g(4.2)i([Bash)330 4947 y(Builtins],)28 -b(page)j(39\).)154 5098 y(21.)61 b(The)42 b(shell)f(will)f(c)m(hec)m(k) -k(the)f(v)-5 b(alue)42 b(of)g(the)h Fs(TMOUT)e Ft(v)-5 -b(ariable)42 b(and)g(exit)g(if)g(a)h(command)f(is)g(not)330 -5208 y(read)30 b(within)e(the)i(sp)s(eci\014ed)e(n)m(um)m(b)s(er)h(of)i -(seconds)f(after)g(prin)m(ting)e Fs($PS1)h Ft(\(see)i(Section)f(5.2)i -([Bash)330 5317 y(V)-8 b(ariables],)30 b(page)h(55\).)p -eop +b(A)34 b(failed)g Fs(exec)f Ft(will)h(not)g(cause)g(the)g(shell)g(to)g +(exit)h(\(see)f(Section)h(4.1)g([Bourne)f(Shell)f(Builtins],)330 +4426 y(page)e(33\).)154 4577 y(19.)61 b(P)m(arser)31 +b(syn)m(tax)f(errors)g(will)h(not)g(cause)g(the)f(shell)h(to)g(exit.) +154 4728 y(20.)61 b(Simple)21 b(sp)s(elling)h(correction)g(for)g +(directory)g(argumen)m(ts)f(to)i(the)e Fs(cd)g Ft(builtin)g(is)h +(enabled)f(b)m(y)h(default)330 4838 y(\(see)38 b(the)e(description)h +(of)g(the)f Fs(cdspell)f Ft(option)i(to)g(the)g Fs(shopt)e +Ft(builtin)h(in)h(Section)g(4.2)h([Bash)330 4947 y(Builtins],)31 +b(page)g(39\).)154 5098 y(21.)61 b(The)42 b(shell)h(will)g(c)m(hec)m(k) +h(the)f(v)-5 b(alue)43 b(of)f(the)h Fs(TMOUT)e Ft(v)-5 +b(ariable)44 b(and)e(exit)h(if)g(a)g(command)f(is)h(not)330 +5208 y(read)30 b(within)g(the)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)g(of)i +(seconds)f(after)g(prin)m(ting)g Fs($PS1)f Ft(\(see)i(Section)g(5.2)h +([Bash)330 5317 y(V)-8 b(ariables],)32 b(page)f(55\).)p +eop end %%Page: 69 75 -69 74 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(69)150 299 y Fr(6.4)68 b(Bash)45 -b(Conditional)h(Expressions)275 548 y Ft(Conditional)35 -b(expressions)i(are)i(used)f(b)m(y)g(the)g Fs([[)g Ft(comp)s(ound)f +TeXDict begin 69 74 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(69)150 299 y Fr(6.4)68 +b(Bash)45 b(Conditional)h(Expressions)275 548 y Ft(Conditional)38 +b(expressions)g(are)h(used)f(b)m(y)g(the)g Fs([[)g Ft(comp)s(ound)f (command)h(and)g(the)g Fs(test)g Ft(and)f Fs([)150 657 -y Ft(builtin)27 b(commands.)275 796 y(Expressions)k(ma)m(y)i(b)s(e)g -(unary)f(or)h(binary)-8 b(.)47 b(Unary)33 b(expressions)e(are)j(often)f -(used)f(to)i(examine)f(the)150 906 y(status)26 b(of)g(a)h(\014le.)38 -b(There)26 b(are)g(string)f(op)s(erators)h(and)g(n)m(umeric)e -(comparison)i(op)s(erators)g(as)g(w)m(ell.)38 b(If)26 -b(the)150 1016 y Fq(\014le)37 b Ft(argumen)m(t)d(to)f(one)h(of)f(the)g -(primaries)e(is)h(of)h(the)g(form)g(`)p Fs(/dev/fd/)p -Fj(N)11 b Ft(',)31 b(then)i(\014le)f(descriptor)g Fq(N)43 +y Ft(builtin)30 b(commands.)275 796 y(Expressions)i(ma)m(y)h(b)s(e)g +(unary)f(or)h(binary)-8 b(.)48 b(Unary)33 b(expressions)f(are)i(often)f +(used)f(to)i(examine)g(the)150 906 y(status)26 b(of)g(a)h(\014le.)39 +b(There)26 b(are)g(string)g(op)s(erators)g(and)g(n)m(umeric)f +(comparison)i(op)s(erators)f(as)g(w)m(ell.)40 b(If)26 +b(the)150 1016 y Fq(\014le)38 b Ft(argumen)m(t)c(to)f(one)h(of)f(the)g +(primaries)g(is)g(of)g(the)g(form)g(`)p Fs(/dev/fd/)p +Fj(N)11 b Ft(',)31 b(then)i(\014le)g(descriptor)g Fq(N)43 b Ft(is)150 1125 y(c)m(hec)m(k)m(ed.)e(If)26 b(the)g -Fq(\014le)k Ft(argumen)m(t)c(to)h(one)f(of)g(the)h(primaries)c(is)i -(one)h(of)g(`)p Fs(/dev/stdin)p Ft(',)f(`)p Fs(/dev/stdout)p -Ft(',)150 1235 y(or)30 b(`)p Fs(/dev/stderr)p Ft(',)e(\014le)i -(descriptor)f(0,)i(1,)g(or)g(2,)g(resp)s(ectiv)m(ely)-8 -b(,)30 b(is)f(c)m(hec)m(k)m(ed.)150 1401 y Fs(-a)h Fj(file)162 -b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists.)150 -1565 y Fs(-b)30 b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f -Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(blo)s(c)m(k)f(sp)s(ecial)f -(\014le.)150 1729 y Fs(-c)h Fj(file)162 b Ft(T)-8 b(rue)30 -b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(c)m(haracter)h(sp)s -(ecial)d(\014le.)150 1893 y Fs(-d)h Fj(file)162 b Ft(T)-8 -b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(directory) +Fq(\014le)31 b Ft(argumen)m(t)26 b(to)h(one)f(of)g(the)h(primaries)e +(is)h(one)g(of)g(`)p Fs(/dev/stdin)p Ft(',)f(`)p Fs(/dev/stdout)p +Ft(',)150 1235 y(or)30 b(`)p Fs(/dev/stderr)p Ft(',)e(\014le)j +(descriptor)f(0,)h(1,)g(or)g(2,)g(resp)s(ectiv)m(ely)-8 +b(,)32 b(is)e(c)m(hec)m(k)m(ed.)150 1401 y Fs(-a)g Fj(file)162 +b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists.)150 +1565 y Fs(-b)30 b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g +Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(blo)s(c)m(k)g(sp)s(ecial)g +(\014le.)150 1729 y Fs(-c)f Fj(file)162 b Ft(T)-8 b(rue)30 +b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(c)m(haracter)h(sp)s +(ecial)f(\014le.)150 1893 y Fs(-d)f Fj(file)162 b Ft(T)-8 +b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(directory) -8 b(.)150 2058 y Fs(-e)30 b Fj(file)162 b Ft(T)-8 b(rue)30 -b(if)f Fq(\014le)35 b Ft(exists.)150 2222 y Fs(-f)30 -b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 -b Ft(exists)30 b(and)g(is)f(a)i(regular)e(\014le.)150 -2386 y Fs(-g)h Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f -Fq(\014le)35 b Ft(exists)30 b(and)g(its)f(set-group-id)h(bit)g(is)f -(set.)150 2550 y Fs(-h)h Fj(file)162 b Ft(T)-8 b(rue)30 -b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(a)i(sym)m(b)s(olic)e -(link.)150 2714 y Fs(-k)h Fj(file)162 b Ft(T)-8 b(rue)30 -b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(its)f Fs(")p -Ft(stic)m(ky)p Fs(")h Ft(bit)g(is)f(set.)150 2878 y Fs(-p)h -Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b -Ft(exists)30 b(and)g(is)f(a)i(named)f(pip)s(e)e(\(FIF)m(O\).)150 -3042 y Fs(-r)i Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f -Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(readable.)150 -3206 y Fs(-s)h Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f -Fq(\014le)35 b Ft(exists)30 b(and)g(has)g(a)g(size)h(greater)g(than)f +b(if)g Fq(\014le)36 b Ft(exists.)150 2222 y Fs(-f)30 +b Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 +b Ft(exists)31 b(and)f(is)g(a)h(regular)f(\014le.)150 +2386 y Fs(-g)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g +Fq(\014le)36 b Ft(exists)31 b(and)f(its)g(set-group-id)h(bit)g(is)f +(set.)150 2550 y Fs(-h)g Fj(file)162 b Ft(T)-8 b(rue)30 +b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(a)h(sym)m(b)s(olic)g +(link.)150 2714 y Fs(-k)f Fj(file)162 b Ft(T)-8 b(rue)30 +b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(its)g Fs(")p +Ft(stic)m(ky)p Fs(")h Ft(bit)g(is)f(set.)150 2878 y Fs(-p)g +Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b +Ft(exists)31 b(and)f(is)g(a)h(named)f(pip)s(e)f(\(FIF)m(O\).)150 +3042 y Fs(-r)h Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g +Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(readable.)150 +3206 y Fs(-s)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g +Fq(\014le)36 b Ft(exists)31 b(and)f(has)g(a)g(size)i(greater)f(than)f (zero.)150 3370 y Fs(-t)g Fj(fd)258 b Ft(T)-8 b(rue)30 -b(if)f(\014le)h(descriptor)f Fq(fd)k Ft(is)d(op)s(en)f(and)h(refers)g +b(if)g(\014le)h(descriptor)f Fq(fd)j Ft(is)e(op)s(en)e(and)h(refers)g (to)h(a)g(terminal.)150 3534 y Fs(-u)f Fj(file)162 b -Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 b(and)g(its)f -(set-user-id)h(bit)f(is)h(set.)150 3698 y Fs(-w)g Fj(file)162 -b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 -b(and)g(is)f(writable.)150 3863 y Fs(-x)h Fj(file)162 -b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 -b(and)g(is)f(executable.)150 4027 y Fs(-O)h Fj(file)162 -b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 -b(and)g(is)f(o)m(wned)h(b)m(y)h(the)f(e\013ectiv)m(e)i(user)e(id.)150 -4191 y Fs(-G)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f -Fq(\014le)35 b Ft(exists)30 b(and)g(is)f(o)m(wned)h(b)m(y)h(the)f -(e\013ectiv)m(e)i(group)e(id.)150 4355 y Fs(-L)g Fj(file)162 -b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b Ft(exists)30 -b(and)g(is)f(a)i(sym)m(b)s(olic)e(link.)150 4519 y Fs(-S)h -Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 b -Ft(exists)30 b(and)g(is)f(a)i(so)s(c)m(k)m(et.)150 4683 -y Fs(-N)f Fj(file)162 b Ft(T)-8 b(rue)30 b(if)f Fq(\014le)35 -b Ft(exists)30 b(and)g(has)g(b)s(een)f(mo)s(di\014ed)g(since)g(it)h(w)m -(as)h(last)f(read.)150 4847 y Fj(file1)39 b Fs(-nt)30 -b Fj(file2)630 4957 y Ft(T)-8 b(rue)23 b(if)g Fq(\014le1)31 -b Ft(is)23 b(new)m(er)h(\(according)g(to)h(mo)s(di\014cation)d(date\))j -(than)f Fq(\014le2)p Ft(,)h(or)f(if)f Fq(\014le1)30 b -Ft(exists)630 5066 y(and)g Fq(\014le2)37 b Ft(do)s(es)30 +Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 b(and)f(its)g +(set-user-id)h(bit)f(is)h(set.)150 3698 y Fs(-w)f Fj(file)162 +b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 +b(and)f(is)g(writable.)150 3863 y Fs(-x)g Fj(file)162 +b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 +b(and)f(is)g(executable.)150 4027 y Fs(-O)g Fj(file)162 +b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 +b(and)f(is)g(o)m(wned)g(b)m(y)h(the)f(e\013ectiv)m(e)j(user)d(id.)150 +4191 y Fs(-G)g Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g +Fq(\014le)36 b Ft(exists)31 b(and)f(is)g(o)m(wned)g(b)m(y)h(the)f +(e\013ectiv)m(e)j(group)d(id.)150 4355 y Fs(-L)g Fj(file)162 +b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b Ft(exists)31 +b(and)f(is)g(a)h(sym)m(b)s(olic)g(link.)150 4519 y Fs(-S)f +Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 b +Ft(exists)31 b(and)f(is)g(a)h(so)s(c)m(k)m(et.)150 4683 +y Fs(-N)f Fj(file)162 b Ft(T)-8 b(rue)30 b(if)g Fq(\014le)36 +b Ft(exists)31 b(and)f(has)g(b)s(een)f(mo)s(di\014ed)h(since)g(it)h(w)m +(as)g(last)g(read.)150 4847 y Fj(file1)39 b Fs(-nt)30 +b Fj(file2)630 4957 y Ft(T)-8 b(rue)23 b(if)h Fq(\014le1)32 +b Ft(is)24 b(new)m(er)g(\(according)h(to)g(mo)s(di\014cation)f(date\))h +(than)f Fq(\014le2)p Ft(,)i(or)e(if)g Fq(\014le1)31 b +Ft(exists)630 5066 y(and)f Fq(\014le2)38 b Ft(do)s(es)30 b(not.)150 5230 y Fj(file1)39 b Fs(-ot)30 b Fj(file2)630 -5340 y Ft(T)-8 b(rue)30 b(if)f Fq(\014le1)37 b Ft(is)30 -b(older)f(than)h Fq(\014le2)p Ft(,)h(or)f(if)f Fq(\014le2)37 -b Ft(exists)30 b(and)g Fq(\014le1)37 b Ft(do)s(es)30 -b(not.)p eop +5340 y Ft(T)-8 b(rue)30 b(if)g Fq(\014le1)38 b Ft(is)31 +b(older)f(than)g Fq(\014le2)p Ft(,)i(or)e(if)g Fq(\014le2)38 +b Ft(exists)31 b(and)f Fq(\014le1)38 b Ft(do)s(es)30 +b(not.)p eop end %%Page: 70 76 -70 75 bop 150 -116 a Ft(70)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fj(file1)39 b Fs(-ef)30 b Fj(file2)630 408 y Ft(T)-8 -b(rue)30 b(if)f Fq(\014le1)37 b Ft(and)30 b Fq(\014le2)37 -b Ft(refer)30 b(to)i(the)e(same)h(device)f(and)g(ino)s(de)f(n)m(um)m(b) -s(ers.)150 570 y Fs(-o)h Fj(optname)630 679 y Ft(T)-8 -b(rue)41 b(if)f(shell)f(option)i Fq(optname)47 b Ft(is)40 -b(enabled.)72 b(The)41 b(list)f(of)h(options)f(app)s(ears)h(in)f(the) -630 789 y(description)18 b(of)j(the)f(`)p Fs(-o)p Ft(')g(option)g(to)h -(the)g Fs(set)e Ft(builtin)e(\(see)k(Section)f(4.3)h([The)g(Set)f -(Builtin],)630 898 y(page)31 b(50\).)150 1060 y Fs(-z)f -Fj(string)630 1169 y Ft(T)-8 b(rue)30 b(if)f(the)i(length)f(of)g -Fq(string)37 b Ft(is)30 b(zero.)150 1330 y Fs(-n)g Fj(string)150 -1440 y(string)192 b Ft(T)-8 b(rue)30 b(if)f(the)i(length)f(of)g -Fq(string)37 b Ft(is)30 b(non-zero.)150 1601 y Fj(string1)39 -b Fs(==)30 b Fj(string2)630 1711 y Ft(T)-8 b(rue)33 b(if)g(the)h -(strings)e(are)i(equal.)50 b(`)p Fs(=)p Ft(')34 b(ma)m(y)g(b)s(e)f -(used)g(in)f(place)i(of)f(`)p Fs(==)p Ft(')h(for)f(strict)h -Fl(posix)630 1820 y Ft(compliance.)150 1981 y Fj(string1)39 -b Fs(!=)30 b Fj(string2)630 2091 y Ft(T)-8 b(rue)30 b(if)f(the)i -(strings)e(are)i(not)f(equal.)150 2252 y Fj(string1)39 -b Fs(<)30 b Fj(string2)630 2362 y Ft(T)-8 b(rue)30 b(if)f -Fq(string1)37 b Ft(sorts)31 b(b)s(efore)f Fq(string2)37 -b Ft(lexicographically)28 b(in)h(the)i(curren)m(t)f(lo)s(cale.)150 -2523 y Fj(string1)39 b Fs(>)30 b Fj(string2)630 2632 -y Ft(T)-8 b(rue)30 b(if)f Fq(string1)37 b Ft(sorts)31 -b(after)g Fq(string2)37 b Ft(lexicographically)28 b(in)h(the)h(curren)m -(t)h(lo)s(cale.)150 2794 y Fj(arg1)40 b Fs(OP)29 b Fj(arg2)630 -2903 y Fs(OP)k Ft(is)g(one)h(of)h(`)p Fs(-eq)p Ft(',)f(`)p -Fs(-ne)p Ft(',)h(`)p Fs(-lt)p Ft(',)g(`)p Fs(-le)p Ft(',)f(`)p +TeXDict begin 70 75 bop 150 -116 a Ft(70)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fj(file1)39 b Fs(-ef)30 +b Fj(file2)630 408 y Ft(T)-8 b(rue)30 b(if)g Fq(\014le1)38 +b Ft(and)30 b Fq(\014le2)38 b Ft(refer)30 b(to)i(the)e(same)h(device)g +(and)f(ino)s(de)g(n)m(um)m(b)s(ers.)150 570 y Fs(-o)g +Fj(optname)630 679 y Ft(T)-8 b(rue)41 b(if)g(shell)g(option)h +Fq(optname)47 b Ft(is)41 b(enabled.)73 b(The)41 b(list)h(of)f(options)g +(app)s(ears)g(in)g(the)630 789 y(description)20 b(of)h(the)f(`)p +Fs(-o)p Ft(')g(option)h(to)g(the)g Fs(set)e Ft(builtin)h(\(see)h +(Section)g(4.3)g([The)g(Set)f(Builtin],)630 898 y(page)31 +b(50\).)150 1060 y Fs(-z)f Fj(string)630 1169 y Ft(T)-8 +b(rue)30 b(if)g(the)h(length)g(of)f Fq(string)38 b Ft(is)31 +b(zero.)150 1330 y Fs(-n)f Fj(string)150 1440 y(string)192 +b Ft(T)-8 b(rue)30 b(if)g(the)h(length)g(of)f Fq(string)38 +b Ft(is)31 b(non-zero.)150 1601 y Fj(string1)39 b Fs(==)30 +b Fj(string2)630 1711 y Ft(T)-8 b(rue)33 b(if)h(the)g(strings)f(are)h +(equal.)51 b(`)p Fs(=)p Ft(')34 b(ma)m(y)g(b)s(e)f(used)g(in)g(place)i +(of)e(`)p Fs(==)p Ft(')h(for)f(strict)i Fl(posix)630 +1820 y Ft(compliance.)150 1981 y Fj(string1)k Fs(!=)30 +b Fj(string2)630 2091 y Ft(T)-8 b(rue)30 b(if)g(the)h(strings)f(are)h +(not)f(equal.)150 2252 y Fj(string1)39 b Fs(<)30 b Fj(string2)630 +2362 y Ft(T)-8 b(rue)30 b(if)g Fq(string1)38 b Ft(sorts)31 +b(b)s(efore)f Fq(string2)38 b Ft(lexicographically)33 +b(in)d(the)h(curren)m(t)f(lo)s(cale.)150 2523 y Fj(string1)39 +b Fs(>)30 b Fj(string2)630 2632 y Ft(T)-8 b(rue)30 b(if)g +Fq(string1)38 b Ft(sorts)31 b(after)g Fq(string2)38 b +Ft(lexicographically)33 b(in)d(the)g(curren)m(t)h(lo)s(cale.)150 +2794 y Fj(arg1)40 b Fs(OP)29 b Fj(arg2)630 2903 y Fs(OP)k +Ft(is)h(one)g(of)h(`)p Fs(-eq)p Ft(',)f(`)p Fs(-ne)p +Ft(',)h(`)p Fs(-lt)p Ft(',)g(`)p Fs(-le)p Ft(',)f(`)p Fs(-gt)p Ft(',)h(or)f(`)p Fs(-ge)p Ft('.)51 b(These)34 -b(arithmetic)f(binary)630 3013 y(op)s(erators)j(return)e(true)i(if)e -Fq(arg1)44 b Ft(is)35 b(equal)g(to,)j(not)e(equal)f(to,)j(less)d(than,) -i(less)e(than)g(or)630 3122 y(equal)28 b(to,)h(greater)h(than,)e(or)g -(greater)i(than)d(or)i(equal)e(to)i Fq(arg2)p Ft(,)h(resp)s(ectiv)m -(ely)-8 b(.)40 b Fq(Arg1)c Ft(and)630 3232 y Fq(arg2)j -Ft(ma)m(y)30 b(b)s(e)g(p)s(ositiv)m(e)g(or)g(negativ)m(e)i(in)m +b(arithmetic)h(binary)630 3013 y(op)s(erators)h(return)e(true)i(if)f +Fq(arg1)44 b Ft(is)36 b(equal)g(to,)i(not)e(equal)g(to,)i(less)e(than,) +h(less)f(than)f(or)630 3122 y(equal)29 b(to,)g(greater)h(than,)e(or)g +(greater)i(than)d(or)i(equal)f(to)h Fq(arg2)p Ft(,)h(resp)s(ectiv)m +(ely)-8 b(.)42 b Fq(Arg1)36 b Ft(and)630 3232 y Fq(arg2)j +Ft(ma)m(y)30 b(b)s(e)g(p)s(ositiv)m(e)i(or)e(negativ)m(e)j(in)m (tegers.)150 3494 y Fr(6.5)68 b(Shell)45 b(Arithmetic)275 -3740 y Ft(The)34 b(shell)e(allo)m(ws)i(arithmetic)g(expressions)g(to)h -(b)s(e)f(ev)-5 b(aluated,)36 b(as)f(one)g(of)g(the)f(shell)f -(expansions)150 3849 y(or)d(b)m(y)h(the)f Fs(let)g Ft(and)f(the)i(`)p -Fs(-i)p Ft(')f(option)g(to)h(the)g Fs(declare)d Ft(builtins.)275 -3985 y(Ev)-5 b(aluation)25 b(is)h(done)g(in)f(\014xed-width)g(in)m -(tegers)i(with)e(no)i(c)m(hec)m(k)h(for)e(o)m(v)m(er\015o)m(w,)j -(though)d(division)e(b)m(y)150 4095 y(0)j(is)f(trapp)s(ed)g(and)h -(\015agged)g(as)h(an)f(error.)39 b(The)26 b(op)s(erators)h(and)g(their) -f(precedence,)i(asso)s(ciativit)m(y)-8 b(,)29 b(and)150 -4205 y(v)-5 b(alues)34 b(are)i(the)f(same)g(as)h(in)d(the)i(C)g -(language.)55 b(The)35 b(follo)m(wing)e(list)h(of)h(op)s(erators)g(is)f -(group)s(ed)g(in)m(to)150 4314 y(lev)m(els)25 b(of)h(equal-precedence)h -(op)s(erators.)39 b(The)25 b(lev)m(els)h(are)g(listed)f(in)f(order)i -(of)g(decreasing)f(precedence.)150 4476 y Fj(id)11 b -Fs(++)29 b Fj(id)p Fs(--)630 4586 y Ft(v)-5 b(ariable)29 -b(p)s(ost-incremen)m(t)h(and)g(p)s(ost-decremen)m(t)150 -4747 y Fs(++)p Fj(id)40 b Fs(--)p Fj(id)630 4857 y Ft(v)-5 -b(ariable)29 b(pre-incremen)m(t)h(and)g(pre-decremen)m(t)150 -5018 y Fs(-)g(+)354 b Ft(unary)29 b(min)m(us)g(and)h(plus)150 -5179 y Fs(!)g(~)354 b Ft(logical)30 b(and)g(bit)m(wise)f(negation)150 -5340 y Fs(**)384 b Ft(exp)s(onen)m(tiation)p eop +3740 y Ft(The)34 b(shell)g(allo)m(ws)i(arithmetic)g(expressions)f(to)g +(b)s(e)f(ev)-5 b(aluated,)37 b(as)e(one)g(of)g(the)f(shell)h +(expansions)150 3849 y(or)30 b(b)m(y)h(the)f Fs(let)g +Ft(and)f(the)i(`)p Fs(-i)p Ft(')f(option)h(to)g(the)g +Fs(declare)d Ft(builtins.)275 3985 y(Ev)-5 b(aluation)27 +b(is)g(done)f(in)g(\014xed-width)g(in)m(tegers)i(with)e(no)h(c)m(hec)m +(k)h(for)e(o)m(v)m(er\015o)m(w,)j(though)d(division)h(b)m(y)150 +4095 y(0)g(is)g(trapp)s(ed)f(and)h(\015agged)g(as)h(an)f(error.)39 +b(The)26 b(op)s(erators)h(and)g(their)g(precedence,)h(asso)s(ciativit)m +(y)-8 b(,)32 b(and)150 4205 y(v)-5 b(alues)35 b(are)h(the)f(same)g(as)h +(in)e(the)h(C)g(language.)56 b(The)35 b(follo)m(wing)h(list)g(of)f(op)s +(erators)g(is)g(group)s(ed)f(in)m(to)150 4314 y(lev)m(els)27 +b(of)f(equal-precedence)i(op)s(erators.)39 b(The)25 b(lev)m(els)j(are)e +(listed)h(in)e(order)h(of)g(decreasing)g(precedence.)150 +4476 y Fj(id)11 b Fs(++)29 b Fj(id)p Fs(--)630 4586 y +Ft(v)-5 b(ariable)31 b(p)s(ost-incremen)m(t)g(and)f(p)s(ost-decremen)m +(t)150 4747 y Fs(++)p Fj(id)40 b Fs(--)p Fj(id)630 4857 +y Ft(v)-5 b(ariable)31 b(pre-incremen)m(t)g(and)f(pre-decremen)m(t)150 +5018 y Fs(-)g(+)354 b Ft(unary)29 b(min)m(us)h(and)g(plus)150 +5179 y Fs(!)g(~)354 b Ft(logical)33 b(and)d(bit)m(wise)h(negation)150 +5340 y Fs(**)384 b Ft(exp)s(onen)m(tiation)p eop end %%Page: 71 77 -71 76 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(71)150 299 y Fs(*)30 b(/)g(\045)276 -b Ft(m)m(ultiplication,)28 b(division,)f(remainder)150 -464 y Fs(+)j(-)354 b Ft(addition,)29 b(subtraction)150 -630 y Fs(<<)h(>>)258 b Ft(left)30 b(and)g(righ)m(t)g(bit)m(wise)f -(shifts)150 795 y Fs(<=)h(>=)g(<)g(>)102 b Ft(comparison)150 -961 y Fs(==)30 b(!=)258 b Ft(equalit)m(y)30 b(and)g(inequalit)m(y)150 -1126 y Fs(&)432 b Ft(bit)m(wise)29 b(AND)150 1292 y Fs(^)432 -b Ft(bit)m(wise)29 b(exclusiv)m(e)h(OR)150 1458 y Fs(|)432 -b Ft(bit)m(wise)29 b(OR)150 1623 y Fs(&&)384 b Ft(logical)30 -b(AND)150 1789 y Fs(||)384 b Ft(logical)30 b(OR)150 1954 -y Fs(expr)f(?)h(expr)f(:)h(expr)630 2064 y Ft(conditional)f(op)s -(erator)150 2229 y Fs(=)h(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g +TeXDict begin 71 76 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(71)150 299 y Fs(*)30 +b(/)g(\045)276 b Ft(m)m(ultiplication,)33 b(division,)d(remainder)150 +464 y Fs(+)g(-)354 b Ft(addition,)31 b(subtraction)150 +630 y Fs(<<)f(>>)258 b Ft(left)31 b(and)f(righ)m(t)h(bit)m(wise)g +(shifts)150 795 y Fs(<=)f(>=)g(<)g(>)102 b Ft(comparison)150 +961 y Fs(==)30 b(!=)258 b Ft(equalit)m(y)32 b(and)e(inequalit)m(y)150 +1126 y Fs(&)432 b Ft(bit)m(wise)31 b(AND)150 1292 y Fs(^)432 +b Ft(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 1458 y Fs(|)432 +b Ft(bit)m(wise)31 b(OR)150 1623 y Fs(&&)384 b Ft(logical)33 +b(AND)150 1789 y Fs(||)384 b Ft(logical)33 b(OR)150 1954 +y Fs(expr)c(?)h(expr)f(:)h(expr)630 2064 y Ft(conditional)i(op)s +(erator)150 2229 y Fs(=)e(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g (^=)f(|=)630 2339 y Ft(assignmen)m(t)150 2504 y Fs(expr1)g(,)h(expr2) -630 2614 y Ft(comma)275 2782 y(Shell)36 b(v)-5 b(ariables)37 -b(are)i(allo)m(w)m(ed)g(as)g(op)s(erands;)i(parameter)e(expansion)f(is) -f(p)s(erformed)h(b)s(efore)g(the)150 2892 y(expression)f(is)g(ev)-5 -b(aluated.)65 b(Within)36 b(an)j(expression,)g(shell)d(v)-5 -b(ariables)37 b(ma)m(y)i(also)f(b)s(e)g(referenced)g(b)m(y)150 -3002 y(name)31 b(without)e(using)g(the)i(parameter)g(expansion)e(syn)m -(tax.)42 b(A)31 b(shell)d(v)-5 b(ariable)30 b(that)h(is)e(n)m(ull)g(or) -h(unset)150 3111 y(ev)-5 b(aluates)40 b(to)g(0)g(when)e(referenced)h(b) -m(y)g(name)h(without)e(using)g(the)h(parameter)h(expansion)e(syn)m -(tax.)150 3221 y(The)d(v)-5 b(alue)36 b(of)g(a)h(v)-5 -b(ariable)34 b(is)h(ev)-5 b(aluated)37 b(as)f(an)g(arithmetic)f -(expression)g(when)g(it)g(is)g(referenced,)j(or)150 3330 -y(when)31 b(a)i(v)-5 b(ariable)31 b(whic)m(h)g(has)h(b)s(een)f(giv)m -(en)i(the)f Fq(in)m(teger)39 b Ft(attribute)32 b(using)f(`)p -Fs(declare)e(-i)p Ft(')i(is)h(assigned)150 3440 y(a)37 -b(v)-5 b(alue.)57 b(A)36 b(n)m(ull)e(v)-5 b(alue)36 b(ev)-5 -b(aluates)37 b(to)g(0.)58 b(A)36 b(shell)f(v)-5 b(ariable)34 -b(need)i(not)h(ha)m(v)m(e)g(its)f(in)m(teger)g(attribute)150 -3550 y(turned)29 b(on)h(to)i(b)s(e)d(used)h(in)f(an)h(expression.)275 -3690 y(Constan)m(ts)41 b(with)f(a)i(leading)d(0)j(are)g(in)m(terpreted) -e(as)h(o)s(ctal)h(n)m(um)m(b)s(ers.)72 b(A)41 b(leading)f(`)p -Fs(0x)p Ft(')h(or)g(`)p Fs(0X)p Ft(')150 3800 y(denotes)31 -b(hexadecimal.)41 b(Otherwise,)30 b(n)m(um)m(b)s(ers)f(tak)m(e)k(the)e +630 2614 y Ft(comma)275 2782 y(Shell)38 b(v)-5 b(ariables)39 +b(are)g(allo)m(w)m(ed)i(as)e(op)s(erands;)i(parameter)e(expansion)g(is) +f(p)s(erformed)g(b)s(efore)g(the)150 2892 y(expression)g(is)g(ev)-5 +b(aluated.)66 b(Within)38 b(an)h(expression,)h(shell)e(v)-5 +b(ariables)39 b(ma)m(y)g(also)g(b)s(e)f(referenced)g(b)m(y)150 +3002 y(name)31 b(without)f(using)g(the)h(parameter)g(expansion)f(syn)m +(tax.)42 b(A)31 b(shell)f(v)-5 b(ariable)32 b(that)f(is)f(n)m(ull)h(or) +f(unset)150 3111 y(ev)-5 b(aluates)41 b(to)f(0)g(when)e(referenced)h(b) +m(y)g(name)h(without)f(using)g(the)g(parameter)h(expansion)f(syn)m +(tax.)150 3221 y(The)c(v)-5 b(alue)37 b(of)f(a)h(v)-5 +b(ariable)36 b(is)g(ev)-5 b(aluated)38 b(as)e(an)g(arithmetic)h +(expression)f(when)f(it)h(is)g(referenced,)i(or)150 3330 +y(when)31 b(a)i(v)-5 b(ariable)33 b(whic)m(h)f(has)g(b)s(een)f(giv)m +(en)j(the)e Fq(in)m(teger)40 b Ft(attribute)33 b(using)f(`)p +Fs(declare)d(-i)p Ft(')i(is)i(assigned)150 3440 y(a)k(v)-5 +b(alue.)58 b(A)36 b(n)m(ull)g(v)-5 b(alue)37 b(ev)-5 +b(aluates)38 b(to)f(0.)58 b(A)36 b(shell)h(v)-5 b(ariable)36 +b(need)g(not)h(ha)m(v)m(e)g(its)g(in)m(teger)g(attribute)150 +3550 y(turned)29 b(on)h(to)i(b)s(e)d(used)h(in)g(an)g(expression.)275 +3690 y(Constan)m(ts)41 b(with)g(a)h(leading)f(0)h(are)g(in)m(terpreted) +f(as)g(o)s(ctal)i(n)m(um)m(b)s(ers.)72 b(A)41 b(leading)h(`)p +Fs(0x)p Ft(')f(or)g(`)p Fs(0X)p Ft(')150 3800 y(denotes)31 +b(hexadecimal.)43 b(Otherwise,)31 b(n)m(um)m(b)s(ers)e(tak)m(e)k(the)e (form)f([)p Fq(base)5 b Fs(#)p Ft(])p Fq(n)p Ft(,)31 -b(where)f Fq(base)36 b Ft(is)30 b(a)h(decimal)150 3909 +b(where)f Fq(base)36 b Ft(is)31 b(a)g(decimal)150 3909 y(n)m(um)m(b)s(er)26 b(b)s(et)m(w)m(een)i(2)f(and)g(64)h(represen)m -(ting)f(the)g(arithmetic)f(base,)j(and)d Fq(n)h Ft(is)f(a)i(n)m(um)m(b) -s(er)e(in)g(that)i(base.)150 4019 y(If)39 b Fq(base)5 -b Fs(#)40 b Ft(is)f(omitted,)j(then)e(base)g(10)g(is)f(used.)68 -b(The)39 b(digits)g(greater)i(than)e(9)h(are)g(represen)m(ted)g(b)m(y) -150 4129 y(the)34 b(lo)m(w)m(ercase)g(letters,)h(the)e(upp)s(ercase)g -(letters,)h(`)p Fs(@)p Ft(',)h(and)e(`)p Fs(_)p Ft(',)h(in)e(that)i -(order.)50 b(If)32 b Fq(base)39 b Ft(is)33 b(less)f(than)150 -4238 y(or)38 b(equal)f(to)i(36,)h(lo)m(w)m(ercase)g(and)d(upp)s(ercase) -g(letters)h(ma)m(y)g(b)s(e)f(used)g(in)m(terc)m(hangably)g(to)i +(ting)g(the)f(arithmetic)h(base,)h(and)d Fq(n)h Ft(is)g(a)h(n)m(um)m(b) +s(er)e(in)h(that)h(base.)150 4019 y(If)39 b Fq(base)5 +b Fs(#)40 b Ft(is)g(omitted,)j(then)d(base)g(10)g(is)g(used.)68 +b(The)39 b(digits)i(greater)g(than)e(9)h(are)g(represen)m(ted)g(b)m(y) +150 4129 y(the)34 b(lo)m(w)m(ercase)h(letters,)h(the)d(upp)s(ercase)g +(letters,)i(`)p Fs(@)p Ft(',)g(and)e(`)p Fs(_)p Ft(',)h(in)f(that)h +(order.)50 b(If)32 b Fq(base)39 b Ft(is)34 b(less)f(than)150 +4238 y(or)38 b(equal)g(to)h(36,)h(lo)m(w)m(ercase)h(and)c(upp)s(ercase) +g(letters)i(ma)m(y)f(b)s(e)f(used)g(in)m(terc)m(hangably)i(to)g (represen)m(t)150 4348 y(n)m(um)m(b)s(ers)29 b(b)s(et)m(w)m(een)i(10)g -(and)f(35.)275 4488 y(Op)s(erators)44 b(are)h(ev)-5 b(aluated)45 -b(in)f(order)g(of)h(precedence.)85 b(Sub-expressions)43 -b(in)g(paren)m(theses)j(are)150 4598 y(ev)-5 b(aluated)31 -b(\014rst)e(and)h(ma)m(y)h(o)m(v)m(erride)f(the)h(precedence)g(rules)e +(and)f(35.)275 4488 y(Op)s(erators)44 b(are)h(ev)-5 b(aluated)46 +b(in)f(order)f(of)h(precedence.)85 b(Sub-expressions)44 +b(in)g(paren)m(theses)i(are)150 4598 y(ev)-5 b(aluated)32 +b(\014rst)d(and)h(ma)m(y)h(o)m(v)m(erride)g(the)g(precedence)g(rules)f (ab)s(o)m(v)m(e.)150 4871 y Fr(6.6)68 b(Aliases)275 5121 -y Fq(Aliases)32 b Ft(allo)m(w)d(a)i(string)d(to)j(b)s(e)e(substituted)f -(for)i(a)g(w)m(ord)f(when)g(it)g(is)g(used)g(as)h(the)g(\014rst)f(w)m -(ord)h(of)g(a)150 5230 y(simple)g(command.)45 b(The)31 -b(shell)g(main)m(tains)f(a)j(list)d(of)i(aliases)g(that)g(ma)m(y)h(b)s -(e)e(set)h(and)g(unset)f(with)g(the)150 5340 y Fs(alias)e -Ft(and)h Fs(unalias)e Ft(builtin)f(commands.)p eop +y Fq(Aliases)34 b Ft(allo)m(w)d(a)g(string)e(to)i(b)s(e)e(substituted)g +(for)h(a)g(w)m(ord)f(when)g(it)h(is)g(used)f(as)h(the)g(\014rst)f(w)m +(ord)h(of)g(a)150 5230 y(simple)i(command.)45 b(The)31 +b(shell)i(main)m(tains)f(a)h(list)f(of)g(aliases)i(that)e(ma)m(y)h(b)s +(e)e(set)h(and)g(unset)f(with)h(the)150 5340 y Fs(alias)d +Ft(and)h Fs(unalias)e Ft(builtin)i(commands.)p eop end %%Page: 72 78 -72 77 bop 150 -116 a Ft(72)2572 b(Bash)31 b(Reference)g(Man)m(ual)275 -299 y(The)e(\014rst)f(w)m(ord)i(of)f(eac)m(h)i(simple)d(command,)i(if)e -(unquoted,)h(is)g(c)m(hec)m(k)m(ed)i(to)g(see)f(if)f(it)g(has)g(an)g -(alias.)150 408 y(If)24 b(so,)i(that)g(w)m(ord)e(is)g(replaced)g(b)m(y) -g(the)h(text)h(of)e(the)h(alias.)38 b(The)24 b(c)m(haracters)i(`)p -Fs(/)p Ft(',)h(`)p Fs($)p Ft(',)f(`)p Fs(`)p Ft(',)g(`)p -Fs(=)p Ft(')f(and)f(an)m(y)h(of)150 518 y(the)e(shell)e(metac)m -(haracters)k(or)e(quoting)f(c)m(haracters)i(listed)e(ab)s(o)m(v)m(e)i -(ma)m(y)f(not)g(app)s(ear)f(in)g(an)h(alias)f(name.)150 -628 y(The)g(replacemen)m(t)g(text)h(ma)m(y)g(con)m(tain)g(an)m(y)f(v)-5 -b(alid)21 b(shell)f(input,)i(including)d(shell)h(metac)m(haracters.)40 -b(The)150 737 y(\014rst)35 b(w)m(ord)g(of)h(the)g(replacemen)m(t)h -(text)f(is)f(tested)i(for)e(aliases,)i(but)e(a)h(w)m(ord)g(that)g(is)f -(iden)m(tical)g(to)h(an)150 847 y(alias)30 b(b)s(eing)g(expanded)g(is)g -(not)h(expanded)f(a)h(second)g(time.)42 b(This)29 b(means)i(that)g(one) -g(ma)m(y)h(alias)e Fs(ls)g Ft(to)150 956 y Fs("ls)f(-F")p -Ft(,)36 b(for)f(instance,)h(and)e(Bash)h(do)s(es)g(not)g(try)g(to)g -(recursiv)m(ely)f(expand)g(the)h(replacemen)m(t)h(text.)150 -1066 y(If)31 b(the)h(last)g(c)m(haracter)h(of)f(the)g(alias)f(v)-5 -b(alue)31 b(is)g(a)h(space)g(or)g(tab)g(c)m(haracter,)i(then)d(the)h -(next)g(command)150 1176 y(w)m(ord)e(follo)m(wing)f(the)h(alias)g(is)f -(also)i(c)m(hec)m(k)m(ed)h(for)e(alias)g(expansion.)275 -1325 y(Aliases)d(are)h(created)i(and)d(listed)g(with)g(the)h -Fs(alias)f Ft(command,)h(and)g(remo)m(v)m(ed)h(with)e(the)h +TeXDict begin 72 77 bop 150 -116 a Ft(72)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(The)e(\014rst)f(w)m(ord)i(of)f(eac)m +(h)i(simple)f(command,)g(if)f(unquoted,)g(is)h(c)m(hec)m(k)m(ed)h(to)g +(see)f(if)g(it)g(has)f(an)g(alias.)150 408 y(If)24 b(so,)i(that)g(w)m +(ord)e(is)h(replaced)g(b)m(y)f(the)h(text)h(of)e(the)h(alias.)40 +b(The)24 b(c)m(haracters)i(`)p Fs(/)p Ft(',)h(`)p Fs($)p +Ft(',)f(`)p Fs(`)p Ft(',)g(`)p Fs(=)p Ft(')f(and)f(an)m(y)h(of)150 +518 y(the)e(shell)g(metac)m(haracters)i(or)e(quoting)g(c)m(haracters)h +(listed)g(ab)s(o)m(v)m(e)g(ma)m(y)f(not)g(app)s(ear)f(in)h(an)g(alias)h +(name.)150 628 y(The)e(replacemen)m(t)h(text)g(ma)m(y)g(con)m(tain)h +(an)m(y)e(v)-5 b(alid)23 b(shell)f(input,)h(including)f(shell)g(metac)m +(haracters.)40 b(The)150 737 y(\014rst)35 b(w)m(ord)g(of)h(the)g +(replacemen)m(t)i(text)e(is)g(tested)h(for)e(aliases,)k(but)c(a)h(w)m +(ord)g(that)g(is)g(iden)m(tical)i(to)e(an)150 847 y(alias)c(b)s(eing)f +(expanded)f(is)h(not)g(expanded)f(a)h(second)g(time.)43 +b(This)30 b(means)h(that)g(one)g(ma)m(y)h(alias)g Fs(ls)e +Ft(to)150 956 y Fs("ls)f(-F")p Ft(,)36 b(for)f(instance,)i(and)d(Bash)h +(do)s(es)g(not)g(try)g(to)g(recursiv)m(ely)h(expand)e(the)h(replacemen) +m(t)i(text.)150 1066 y(If)31 b(the)h(last)h(c)m(haracter)g(of)f(the)g +(alias)h(v)-5 b(alue)32 b(is)g(a)g(space)g(or)g(tab)g(c)m(haracter,)i +(then)d(the)h(next)g(command)150 1176 y(w)m(ord)e(follo)m(wing)i(the)e +(alias)i(is)e(also)i(c)m(hec)m(k)m(ed)g(for)e(alias)i(expansion.)275 +1325 y(Aliases)d(are)f(created)i(and)d(listed)i(with)f(the)g +Fs(alias)f Ft(command,)h(and)g(remo)m(v)m(ed)h(with)f(the)g Fs(unalias)150 1434 y Ft(command.)275 1583 y(There)44 -b(is)g(no)h(mec)m(hanism)f(for)g(using)g(argumen)m(ts)h(in)e(the)i -(replacemen)m(t)h(text,)j(as)d(in)d Fs(csh)p Ft(.)83 -b(If)150 1693 y(argumen)m(ts)37 b(are)h(needed,)g(a)g(shell)d(function) -g(should)g(b)s(e)i(used)f(\(see)i(Section)f(3.3)h([Shell)d(F)-8 -b(unctions],)150 1802 y(page)31 b(13\).)275 1951 y(Aliases)g(are)j(not) -e(expanded)g(when)g(the)h(shell)e(is)h(not)h(in)m(teractiv)m(e,)h -(unless)d(the)i Fs(expand_aliases)150 2061 y Ft(shell)c(option)g(is)h -(set)h(using)e Fs(shopt)g Ft(\(see)i(Section)f(4.2)i([Bash)e -(Builtins],)e(page)k(39\).)275 2210 y(The)38 b(rules)g(concerning)h -(the)g(de\014nition)e(and)i(use)g(of)g(aliases)g(are)g(somewhat)h -(confusing.)66 b(Bash)150 2320 y(alw)m(a)m(ys)41 b(reads)g(at)h(least)f -(one)g(complete)h(line)d(of)i(input)e(b)s(efore)i(executing)g(an)m(y)g -(of)g(the)g(commands)150 2429 y(on)h(that)h(line.)75 -b(Aliases)42 b(are)g(expanded)g(when)f(a)i(command)f(is)f(read,)46 -b(not)c(when)g(it)f(is)h(executed.)150 2539 y(Therefore,)g(an)e(alias)f -(de\014nition)e(app)s(earing)i(on)g(the)h(same)h(line)d(as)i(another)g -(command)f(do)s(es)h(not)150 2648 y(tak)m(e)31 b(e\013ect)f(un)m(til)e -(the)h(next)g(line)f(of)h(input)e(is)h(read.)41 b(The)28 -b(commands)h(follo)m(wing)f(the)h(alias)f(de\014nition)150 -2758 y(on)f(that)h(line)d(are)j(not)f(a\013ected)i(b)m(y)e(the)g(new)g -(alias.)39 b(This)25 b(b)s(eha)m(vior)h(is)g(also)h(an)g(issue)f(when)g -(functions)150 2868 y(are)d(executed.)39 b(Aliases)22 -b(are)h(expanded)f(when)f(a)i(function)f(de\014nition)e(is)i(read,)i -(not)f(when)e(the)i(function)150 2977 y(is)h(executed,)k(b)s(ecause)d -(a)h(function)e(de\014nition)e(is)j(itself)f(a)h(comp)s(ound)f -(command.)39 b(As)25 b(a)h(consequence,)150 3087 y(aliases)34 -b(de\014ned)f(in)g(a)h(function)f(are)i(not)f(a)m(v)-5 -b(ailable)34 b(un)m(til)e(after)j(that)g(function)e(is)g(executed.)53 -b(T)-8 b(o)35 b(b)s(e)150 3196 y(safe,)41 b(alw)m(a)m(ys)e(put)e(alias) -h(de\014nitions)e(on)i(a)h(separate)g(line,)g(and)f(do)g(not)g(use)g -Fs(alias)f Ft(in)g(comp)s(ound)150 3306 y(commands.)275 -3455 y(F)-8 b(or)31 b(almost)f(ev)m(ery)h(purp)s(ose,)e(shell)g -(functions)g(are)h(preferred)g(o)m(v)m(er)h(aliases.)150 -3749 y Fr(6.7)68 b(Arra)l(ys)275 4007 y Ft(Bash)33 b(pro)m(vides)f -(one-dimensional)f(arra)m(y)i(v)-5 b(ariables.)48 b(An)m(y)33 -b(v)-5 b(ariable)32 b(ma)m(y)h(b)s(e)g(used)f(as)h(an)g(arra)m(y;)150 -4117 y(the)c Fs(declare)d Ft(builtin)f(will)h(explicitly)g(declare)j -(an)f(arra)m(y)-8 b(.)41 b(There)28 b(is)g(no)g(maxim)m(um)g(limit)e -(on)i(the)h(size)150 4227 y(of)d(an)g(arra)m(y)-8 b(,)27 -b(nor)f(an)m(y)g(requiremen)m(t)f(that)h(mem)m(b)s(ers)f(b)s(e)g -(indexed)f(or)i(assigned)f(con)m(tiguously)-8 b(.)39 +b(is)h(no)g(mec)m(hanism)g(for)f(using)h(argumen)m(ts)g(in)f(the)h +(replacemen)m(t)i(text,)i(as)d(in)e Fs(csh)p Ft(.)83 +b(If)150 1693 y(argumen)m(ts)37 b(are)h(needed,)g(a)g(shell)f(function) +f(should)g(b)s(e)h(used)f(\(see)i(Section)g(3.3)g([Shell)f(F)-8 +b(unctions],)150 1802 y(page)31 b(13\).)275 1951 y(Aliases)i(are)h(not) +e(expanded)g(when)g(the)h(shell)g(is)g(not)g(in)m(teractiv)m(e,)j +(unless)c(the)h Fs(expand_aliases)150 2061 y Ft(shell)e(option)f(is)h +(set)g(using)f Fs(shopt)f Ft(\(see)i(Section)g(4.2)h([Bash)e +(Builtins],)h(page)h(39\).)275 2210 y(The)38 b(rules)h(concerning)h +(the)f(de\014nition)g(and)g(use)g(of)g(aliases)i(are)e(somewhat)h +(confusing.)67 b(Bash)150 2320 y(alw)m(a)m(ys)42 b(reads)f(at)h(least)g +(one)f(complete)i(line)e(of)g(input)f(b)s(efore)h(executing)h(an)m(y)f +(of)g(the)g(commands)150 2429 y(on)h(that)h(line.)77 +b(Aliases)44 b(are)e(expanded)g(when)f(a)i(command)f(is)g(read,)k(not)c +(when)g(it)g(is)h(executed.)150 2539 y(Therefore,)f(an)e(alias)h +(de\014nition)e(app)s(earing)h(on)f(the)h(same)h(line)f(as)g(another)g +(command)f(do)s(es)h(not)150 2648 y(tak)m(e)31 b(e\013ect)f(un)m(til)g +(the)f(next)g(line)h(of)f(input)f(is)h(read.)41 b(The)28 +b(commands)h(follo)m(wing)i(the)e(alias)h(de\014nition)150 +2758 y(on)d(that)h(line)f(are)h(not)f(a\013ected)i(b)m(y)e(the)g(new)g +(alias.)41 b(This)26 b(b)s(eha)m(vior)h(is)g(also)h(an)f(issue)g(when)f +(functions)150 2868 y(are)d(executed.)39 b(Aliases)24 +b(are)f(expanded)f(when)f(a)i(function)g(de\014nition)f(is)h(read,)h +(not)f(when)e(the)i(function)150 2977 y(is)i(executed,)j(b)s(ecause)d +(a)h(function)f(de\014nition)f(is)i(itself)g(a)f(comp)s(ound)f +(command.)39 b(As)25 b(a)h(consequence,)150 3087 y(aliases)36 +b(de\014ned)d(in)h(a)g(function)g(are)h(not)f(a)m(v)-5 +b(ailable)37 b(un)m(til)d(after)h(that)g(function)f(is)g(executed.)53 +b(T)-8 b(o)35 b(b)s(e)150 3196 y(safe,)41 b(alw)m(a)m(ys)f(put)d(alias) +j(de\014nitions)e(on)g(a)h(separate)g(line,)i(and)d(do)g(not)g(use)g +Fs(alias)f Ft(in)h(comp)s(ound)150 3306 y(commands.)275 +3455 y(F)-8 b(or)31 b(almost)g(ev)m(ery)g(purp)s(ose,)e(shell)i +(functions)f(are)g(preferred)g(o)m(v)m(er)h(aliases.)150 +3749 y Fr(6.7)68 b(Arra)l(ys)275 4007 y Ft(Bash)33 b(pro)m(vides)g +(one-dimensional)h(arra)m(y)f(v)-5 b(ariables.)50 b(An)m(y)33 +b(v)-5 b(ariable)34 b(ma)m(y)f(b)s(e)g(used)f(as)h(an)g(arra)m(y;)150 +4117 y(the)c Fs(declare)d Ft(builtin)i(will)h(explicitly)h(declare)g +(an)e(arra)m(y)-8 b(.)41 b(There)28 b(is)h(no)f(maxim)m(um)h(limit)g +(on)f(the)h(size)150 4227 y(of)d(an)g(arra)m(y)-8 b(,)27 +b(nor)f(an)m(y)g(requiremen)m(t)g(that)g(mem)m(b)s(ers)f(b)s(e)g +(indexed)g(or)h(assigned)g(con)m(tiguously)-8 b(.)41 b(Arra)m(ys)150 4336 y(are)31 b(zero-based.)275 4485 -y(An)f(arra)m(y)g(is)g(created)h(automatically)f(if)g(an)m(y)h(v)-5 -b(ariable)29 b(is)g(assigned)h(to)h(using)e(the)h(syn)m(tax)390 +y(An)f(arra)m(y)g(is)h(created)g(automatically)i(if)e(an)m(y)g(v)-5 +b(ariable)31 b(is)f(assigned)h(to)g(using)f(the)g(syn)m(tax)390 4634 y Fs(name[)p Fj(subscript)11 b Fs(]=)p Fj(value)150 -4783 y Ft(The)25 b Fq(subscript)f Ft(is)h(treated)h(as)f(an)g -(arithmetic)f(expression)g(that)i(m)m(ust)f(ev)-5 b(aluate)26 -b(to)f(a)h(n)m(um)m(b)s(er)e(greater)150 4893 y(than)30 -b(or)g(equal)g(to)h(zero.)42 b(T)-8 b(o)31 b(explicitly)d(declare)i(an) -g(arra)m(y)-8 b(,)32 b(use)390 5042 y Fs(declare)46 b(-a)h +4783 y Ft(The)25 b Fq(subscript)g Ft(is)h(treated)g(as)f(an)g +(arithmetic)h(expression)f(that)h(m)m(ust)f(ev)-5 b(aluate)27 +b(to)e(a)h(n)m(um)m(b)s(er)e(greater)150 4893 y(than)30 +b(or)g(equal)h(to)g(zero.)42 b(T)-8 b(o)31 b(explicitly)h(declare)f(an) +f(arra)m(y)-8 b(,)32 b(use)390 5042 y Fs(declare)46 b(-a)h Fj(name)150 5191 y Ft(The)30 b(syn)m(tax)390 5340 y Fs(declare)46 b(-a)h Fj(name)11 b Fs([)p Fj(subscript)g Fs(])p eop +end %%Page: 73 79 -73 78 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(73)150 299 y(is)28 b(also)i(accepted;)h(the)f -Fq(subscript)f Ft(is)f(ignored.)40 b(A)m(ttributes)29 -b(ma)m(y)h(b)s(e)e(sp)s(eci\014ed)g(for)h(an)g(arra)m(y)h(v)-5 -b(ariable)150 408 y(using)39 b(the)i Fs(declare)d Ft(and)i -Fs(readonly)f Ft(builtins.)67 b(Eac)m(h)42 b(attribute)e(applies)f(to)i -(all)f(mem)m(b)s(ers)f(of)i(an)150 518 y(arra)m(y)-8 -b(.)275 663 y(Arra)m(ys)30 b(are)h(assigned)e(to)i(using)e(comp)s(ound) -g(assignmen)m(ts)h(of)h(the)f(form)390 809 y Fs(name=\(value)p -Fj(1)55 b Fs(...)47 b(value)p Fj(n)11 b Fs(\))150 954 -y Ft(where)37 b(eac)m(h)h Fq(v)-5 b(alue)42 b Ft(is)37 -b(of)g(the)h(form)e Fs([[)p Fj(subscript)11 b Fs(]=])p -Fq(string)p Ft(.)57 b(If)36 b(the)i(optional)e(subscript)f(is)i(sup-) -150 1064 y(plied,)42 b(that)g(index)e(is)g(assigned)h(to;)47 -b(otherwise)41 b(the)g(index)f(of)i(the)f(elemen)m(t)h(assigned)e(is)h -(the)g(last)150 1173 y(index)33 b(assigned)h(to)h(b)m(y)f(the)h -(statemen)m(t)h(plus)c(one.)54 b(Indexing)32 b(starts)j(at)g(zero.)54 -b(This)33 b(syn)m(tax)i(is)e(also)150 1283 y(accepted)i(b)m(y)f(the)g -Fs(declare)e Ft(builtin.)47 b(Individual)30 b(arra)m(y)k(elemen)m(ts)g -(ma)m(y)h(b)s(e)e(assigned)g(to)h(using)f(the)150 1392 -y Fs(name[)p Fq(subscript)r Fs(]=)p Fq(v)-5 b(alue)31 -b Ft(syn)m(tax)g(in)m(tro)s(duced)e(ab)s(o)m(v)m(e.)275 -1538 y(An)m(y)k(elemen)m(t)h(of)g(an)f(arra)m(y)h(ma)m(y)g(b)s(e)f -(referenced)g(using)f Fs(${name[)p Fq(subscript)r Fs(]})p -Ft(.)45 b(The)33 b(braces)h(are)150 1647 y(required)27 -b(to)k(a)m(v)m(oid)e(con\015icts)g(with)f(the)i(shell's)d(\014lename)i -(expansion)f(op)s(erators.)41 b(If)28 b(the)i Fq(subscript)f -Ft(is)150 1757 y(`)p Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)f(the)h(w)m -(ord)f(expands)f(to)i(all)e(mem)m(b)s(ers)g(of)i(the)f(arra)m(y)h -Fq(name)p Ft(.)40 b(These)29 b(subscripts)e(di\013er)h(only)150 -1866 y(when)36 b(the)g(w)m(ord)g(app)s(ears)g(within)e(double)h -(quotes.)60 b(If)36 b(the)h(w)m(ord)f(is)f(double-quoted,)j -Fs(${name[*]})150 1976 y Ft(expands)20 b(to)h(a)g(single)e(w)m(ord)h -(with)g(the)h(v)-5 b(alue)20 b(of)g(eac)m(h)i(arra)m(y)f(mem)m(b)s(er)f +TeXDict begin 73 78 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(73)150 299 y(is)29 +b(also)i(accepted;)g(the)f Fq(subscript)g Ft(is)f(ignored.)41 +b(A)m(ttributes)30 b(ma)m(y)g(b)s(e)e(sp)s(eci\014ed)h(for)g(an)g(arra) +m(y)h(v)-5 b(ariable)150 408 y(using)40 b(the)h Fs(declare)d +Ft(and)i Fs(readonly)f Ft(builtins.)70 b(Eac)m(h)42 b(attribute)f +(applies)g(to)g(all)h(mem)m(b)s(ers)d(of)i(an)150 518 +y(arra)m(y)-8 b(.)275 663 y(Arra)m(ys)30 b(are)h(assigned)f(to)h(using) +f(comp)s(ound)f(assignmen)m(ts)i(of)g(the)f(form)390 +809 y Fs(name=\(value)p Fj(1)55 b Fs(...)47 b(value)p +Fj(n)11 b Fs(\))150 954 y Ft(where)37 b(eac)m(h)h Fq(v)-5 +b(alue)43 b Ft(is)38 b(of)f(the)h(form)e Fs([[)p Fj(subscript)11 +b Fs(]=])p Fq(string)p Ft(.)58 b(If)36 b(the)i(optional)g(subscript)e +(is)i(sup-)150 1064 y(plied,)44 b(that)e(index)f(is)g(assigned)h(to;)47 +b(otherwise)42 b(the)f(index)g(of)h(the)f(elemen)m(t)i(assigned)e(is)h +(the)f(last)150 1173 y(index)34 b(assigned)h(to)g(b)m(y)f(the)h +(statemen)m(t)h(plus)d(one.)54 b(Indexing)33 b(starts)i(at)g(zero.)54 +b(This)34 b(syn)m(tax)h(is)f(also)150 1283 y(accepted)h(b)m(y)f(the)g +Fs(declare)e Ft(builtin.)50 b(Individual)33 b(arra)m(y)h(elemen)m(ts)h +(ma)m(y)g(b)s(e)e(assigned)h(to)g(using)g(the)150 1392 +y Fs(name[)p Fq(subscript)r Fs(]=)p Fq(v)-5 b(alue)33 +b Ft(syn)m(tax)e(in)m(tro)s(duced)f(ab)s(o)m(v)m(e.)275 +1538 y(An)m(y)j(elemen)m(t)i(of)f(an)f(arra)m(y)h(ma)m(y)g(b)s(e)f +(referenced)g(using)g Fs(${name[)p Fq(subscript)r Fs(]})p +Ft(.)46 b(The)33 b(braces)h(are)150 1647 y(required)28 +b(to)j(a)m(v)m(oid)f(con\015icts)g(with)f(the)h(shell's)f(\014lename)h +(expansion)f(op)s(erators.)41 b(If)28 b(the)i Fq(subscript)g +Ft(is)150 1757 y(`)p Fs(@)p Ft(')f(or)h(`)p Fs(*)p Ft(',)f(the)h(w)m +(ord)f(expands)f(to)i(all)g(mem)m(b)s(ers)e(of)i(the)f(arra)m(y)h +Fq(name)p Ft(.)40 b(These)29 b(subscripts)f(di\013er)h(only)150 +1866 y(when)36 b(the)g(w)m(ord)g(app)s(ears)g(within)g(double)g +(quotes.)60 b(If)36 b(the)h(w)m(ord)f(is)g(double-quoted,)j +Fs(${name[*]})150 1976 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 -2086 y(of)38 b(the)g Fs(IFS)f Ft(v)-5 b(ariable,)39 b(and)e -Fs(${name[@]})e Ft(expands)i(eac)m(h)i(elemen)m(t)f(of)g +2086 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 2195 y(When)33 b(there)g(are)g(no)g(arra)m(y)g(mem)m(b)s(ers,)g -Fs(${name[@]})d Ft(expands)i(to)i(nothing.)47 b(This)31 -b(is)h(analogous)h(to)150 2305 y(the)i(expansion)f(of)i(the)f(sp)s -(ecial)f(parameters)h(`)p Fs(@)p Ft(')h(and)e(`)p Fs(*)p -Ft('.)55 b Fs(${#name[)p Fq(subscript)r Fs(]})31 b Ft(expands)j(to)i -(the)150 2414 y(length)k(of)g Fs(${name[)p Fq(subscript)r -Fs(]})p Ft(.)66 b(If)40 b Fq(subscript)g Ft(is)g(`)p -Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)i(the)e(expansion)e(is)g(the)i(n)m -(um)m(b)s(er)e(of)150 2524 y(elemen)m(ts)e(in)e(the)i(arra)m(y)-8 -b(.)60 b(Referencing)36 b(an)g(arra)m(y)i(v)-5 b(ariable)35 -b(without)g(a)i(subscript)e(is)g(equiv)-5 b(alen)m(t)36 -b(to)150 2634 y(referencing)30 b(elemen)m(t)g(zero.)275 -2779 y(The)i Fs(unset)g Ft(builtin)e(is)i(used)h(to)h(destro)m(y)g +Fs(${name[@]})d Ft(expands)i(to)i(nothing.)48 b(This)32 +b(is)h(analogous)h(to)150 2305 y(the)h(expansion)g(of)h(the)f(sp)s +(ecial)h(parameters)f(`)p Fs(@)p Ft(')h(and)e(`)p Fs(*)p +Ft('.)55 b Fs(${#name[)p Fq(subscript)r Fs(]})32 b Ft(expands)i(to)i +(the)150 2414 y(length)41 b(of)f Fs(${name[)p Fq(subscript)r +Fs(]})p Ft(.)67 b(If)40 b Fq(subscript)h Ft(is)g(`)p +Fs(@)p Ft(')f(or)h(`)p Fs(*)p Ft(',)i(the)e(expansion)f(is)g(the)h(n)m +(um)m(b)s(er)e(of)150 2524 y(elemen)m(ts)f(in)e(the)h(arra)m(y)-8 +b(.)60 b(Referencing)37 b(an)f(arra)m(y)i(v)-5 b(ariable)37 +b(without)f(a)h(subscript)f(is)g(equiv)-5 b(alen)m(t)38 +b(to)150 2634 y(referencing)31 b(elemen)m(t)g(zero.)275 +2779 y(The)h Fs(unset)g Ft(builtin)h(is)g(used)g(to)h(destro)m(y)g (arra)m(ys.)50 b Fs(unset)31 b Fq(name)5 b Ft([)p Fq(subscript)r -Ft(])32 b(destro)m(ys)i(the)f(arra)m(y)150 2888 y(elemen)m(t)c(at)h -(index)d Fq(subscript)p Ft(.)38 b Fs(unset)27 b Fq(name)p -Ft(,)j(where)e Fq(name)34 b Ft(is)27 b(an)i(arra)m(y)-8 -b(,)30 b(remo)m(v)m(es)g(the)f(en)m(tire)g(arra)m(y)-8 -b(.)150 2998 y(A)30 b(subscript)f(of)h(`)p Fs(*)p Ft(')h(or)f(`)p -Fs(@)p Ft(')h(also)f(remo)m(v)m(es)i(the)e(en)m(tire)h(arra)m(y)-8 +Ft(])33 b(destro)m(ys)h(the)f(arra)m(y)150 2888 y(elemen)m(t)d(at)g +(index)e Fq(subscript)p Ft(.)39 b Fs(unset)27 b Fq(name)p +Ft(,)j(where)e Fq(name)34 b Ft(is)28 b(an)h(arra)m(y)-8 +b(,)30 b(remo)m(v)m(es)g(the)f(en)m(tire)h(arra)m(y)-8 +b(.)150 2998 y(A)30 b(subscript)g(of)g(`)p Fs(*)p Ft(')h(or)f(`)p +Fs(@)p Ft(')h(also)g(remo)m(v)m(es)h(the)e(en)m(tire)i(arra)m(y)-8 b(.)275 3143 y(The)22 b Fs(declare)p Ft(,)h Fs(local)p -Ft(,)g(and)g Fs(readonly)e Ft(builtins)e(eac)m(h)25 b(accept)f(a)g(`)p -Fs(-a)p Ft(')f(option)f(to)i(sp)s(ecify)e(an)h(arra)m(y)-8 -b(.)150 3253 y(The)24 b Fs(read)g Ft(builtin)e(accepts)k(a)f(`)p -Fs(-a)p Ft(')g(option)g(to)g(assign)g(a)g(list)f(of)h(w)m(ords)f(read)h +Ft(,)g(and)g Fs(readonly)e Ft(builtins)h(eac)m(h)j(accept)f(a)g(`)p +Fs(-a)p Ft(')f(option)g(to)h(sp)s(ecify)f(an)g(arra)m(y)-8 +b(.)150 3253 y(The)24 b Fs(read)g Ft(builtin)h(accepts)h(a)f(`)p +Fs(-a)p Ft(')g(option)h(to)f(assign)h(a)f(list)h(of)f(w)m(ords)f(read)h (from)g(the)g(standard)f(input)150 3363 y(to)37 b(an)f(arra)m(y)-8 -b(,)39 b(and)c(can)h(read)g(v)-5 b(alues)36 b(from)f(the)i(standard)e -(input)f(in)m(to)i(individual)c(arra)m(y)k(elemen)m(ts.)150 -3472 y(The)30 b Fs(set)f Ft(and)h Fs(declare)e Ft(builtins)f(displa)m -(y)h(arra)m(y)j(v)-5 b(alues)30 b(in)f(a)h(w)m(a)m(y)h(that)g(allo)m -(ws)f(them)g(to)h(b)s(e)f(reused)150 3582 y(as)h(input.)150 +b(,)39 b(and)c(can)h(read)g(v)-5 b(alues)37 b(from)e(the)i(standard)e +(input)g(in)m(to)i(individual)f(arra)m(y)g(elemen)m(ts.)150 +3472 y(The)30 b Fs(set)f Ft(and)h Fs(declare)e Ft(builtins)i(displa)m +(y)g(arra)m(y)h(v)-5 b(alues)31 b(in)f(a)g(w)m(a)m(y)h(that)g(allo)m +(ws)h(them)e(to)h(b)s(e)f(reused)150 3582 y(as)h(input.)150 3866 y Fr(6.8)68 b(The)45 b(Directory)g(Stac)l(k)275 -4121 y Ft(The)26 b(directory)f(stac)m(k)j(is)e(a)h(list)e(of)i(recen)m -(tly-visited)e(directories.)39 b(The)26 b Fs(pushd)f -Ft(builtin)e(adds)j(direc-)150 4231 y(tories)e(to)g(the)h(stac)m(k)g -(as)f(it)g(c)m(hanges)g(the)h(curren)m(t)e(directory)-8 -b(,)26 b(and)d(the)h Fs(popd)f Ft(builtin)d(remo)m(v)m(es)26 -b(sp)s(eci\014ed)150 4340 y(directories)h(from)h(the)h(stac)m(k)h(and)d -(c)m(hanges)j(the)e(curren)m(t)g(directory)g(to)h(the)g(directory)e -(remo)m(v)m(ed.)41 b(The)150 4450 y Fs(dirs)29 b Ft(builtin)e(displa)m -(ys)i(the)h(con)m(ten)m(ts)i(of)f(the)f(directory)g(stac)m(k.)275 -4595 y(The)35 b(con)m(ten)m(ts)i(of)f(the)h(directory)e(stac)m(k)i(are) -f(also)g(visible)e(as)i(the)g(v)-5 b(alue)35 b(of)h(the)g +4121 y Ft(The)26 b(directory)g(stac)m(k)i(is)f(a)g(list)g(of)g(recen)m +(tly-visited)h(directories.)41 b(The)26 b Fs(pushd)f +Ft(builtin)h(adds)g(direc-)150 4231 y(tories)f(to)f(the)h(stac)m(k)g +(as)f(it)h(c)m(hanges)f(the)h(curren)m(t)e(directory)-8 +b(,)27 b(and)c(the)h Fs(popd)f Ft(builtin)g(remo)m(v)m(es)j(sp)s +(eci\014ed)150 4340 y(directories)j(from)f(the)h(stac)m(k)h(and)d(c)m +(hanges)j(the)e(curren)m(t)g(directory)h(to)g(the)g(directory)f(remo)m +(v)m(ed.)41 b(The)150 4450 y Fs(dirs)29 b Ft(builtin)h(displa)m(ys)h +(the)f(con)m(ten)m(ts)i(of)f(the)f(directory)h(stac)m(k.)275 +4595 y(The)k(con)m(ten)m(ts)i(of)f(the)h(directory)f(stac)m(k)h(are)f +(also)h(visible)g(as)f(the)g(v)-5 b(alue)36 b(of)g(the)g Fs(DIRSTACK)e Ft(shell)150 4705 y(v)-5 b(ariable.)150 4951 y Fk(6.8.1)63 b(Directory)40 b(Stac)m(k)g(Builtins)150 5200 y Fs(dirs)870 5340 y(dirs)47 b([+)p Fj(N)57 b Fs(|)48 -b(-)p Fj(N)11 b Fs(])46 b([-clpv])p eop +b(-)p Fj(N)11 b Fs(])46 b([-clpv])p eop end %%Page: 74 80 -74 79 bop 150 -116 a Ft(74)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(Displa)m(y)i(the)h(list)e(of)i(curren)m(tly)f(remem)m(b)s(ered)g -(directories.)49 b(Directories)34 b(are)g(added)f(to)630 -408 y(the)28 b(list)f(with)g(the)h Fs(pushd)f Ft(command;)i(the)f -Fs(popd)f Ft(command)h(remo)m(v)m(es)h(directories)e(from)630 -518 y(the)k(list.)630 670 y Fs(+)p Fj(N)384 b Ft(Displa)m(ys)21 -b(the)h Fq(N)10 b Ft(th)21 b(directory)g(\(coun)m(ting)h(from)f(the)h -(left)f(of)h(the)g(list)e(prin)m(ted)1110 780 y(b)m(y)30 -b Fs(dirs)f Ft(when)h(in)m(v)m(ok)m(ed)h(without)e(options\),)h -(starting)g(with)g(zero.)630 932 y Fs(-)p Fj(N)384 b -Ft(Displa)m(ys)45 b(the)i Fq(N)10 b Ft(th)46 b(directory)g(\(coun)m -(ting)g(from)g(the)g(righ)m(t)g(of)h(the)f(list)1110 -1042 y(prin)m(ted)24 b(b)m(y)h Fs(dirs)g Ft(when)f(in)m(v)m(ok)m(ed)i -(without)f(options\),)h(starting)g(with)e(zero.)630 1194 -y Fs(-c)384 b Ft(Clears)30 b(the)g(directory)g(stac)m(k)i(b)m(y)e -(deleting)f(all)h(of)g(the)h(elemen)m(ts.)630 1347 y -Fs(-l)384 b Ft(Pro)s(duces)30 b(a)i(longer)f(listing;)f(the)i(default)e -(listing)g(format)h(uses)g(a)h(tilde)e(to)1110 1456 y(denote)h(the)f -(home)h(directory)-8 b(.)630 1609 y Fs(-p)384 b Ft(Causes)30 -b Fs(dirs)f Ft(to)i(prin)m(t)e(the)i(directory)f(stac)m(k)i(with)d(one) -h(en)m(try)h(p)s(er)e(line.)630 1761 y Fs(-v)384 b Ft(Causes)36 -b Fs(dirs)f Ft(to)i(prin)m(t)e(the)h(directory)g(stac)m(k)i(with)d(one) -i(en)m(try)f(p)s(er)f(line,)1110 1871 y(pre\014xing)29 -b(eac)m(h)i(en)m(try)g(with)e(its)h(index)e(in)i(the)g(stac)m(k.)150 -2023 y Fs(popd)870 2154 y(popd)47 b([+)p Fj(N)57 b Fs(|)48 -b(-)p Fj(N)11 b Fs(])46 b([-n])630 2285 y Ft(Remo)m(v)m(e)26 -b(the)e(top)g(en)m(try)h(from)e(the)h(directory)g(stac)m(k,)j(and)c -Fs(cd)h Ft(to)h(the)f(new)f(top)i(directory)-8 b(.)630 -2395 y(When)32 b(no)g(argumen)m(ts)h(are)g(giv)m(en,)g -Fs(popd)e Ft(remo)m(v)m(es)j(the)f(top)f(directory)g(from)g(the)g(stac) -m(k)630 2504 y(and)f(p)s(erforms)e(a)j Fs(cd)f Ft(to)h(the)f(new)g(top) -h(directory)-8 b(.)43 b(The)31 b(elemen)m(ts)h(are)f(n)m(um)m(b)s(ered) -f(from)630 2614 y(0)d(starting)f(at)h(the)g(\014rst)f(directory)g -(listed)f(with)g Fs(dirs)p Ft(;)i(i.e.,)h Fs(popd)d Ft(is)h(equiv)-5 -b(alen)m(t)26 b(to)h Fs(popd)630 2724 y(+0)p Ft(.)630 -2876 y Fs(+)p Fj(N)384 b Ft(Remo)m(v)m(es)22 b(the)f -Fq(N)10 b Ft(th)20 b(directory)f(\(coun)m(ting)i(from)f(the)g(left)g -(of)h(the)f(list)f(prin)m(ted)1110 2986 y(b)m(y)30 b -Fs(dirs)p Ft(\),)g(starting)g(with)f(zero.)630 3138 y -Fs(-)p Fj(N)384 b Ft(Remo)m(v)m(es)46 b(the)g Fq(N)10 -b Ft(th)44 b(directory)g(\(coun)m(ting)h(from)g(the)g(righ)m(t)f(of)h -(the)g(list)1110 3248 y(prin)m(ted)29 b(b)m(y)h Fs(dirs)p -Ft(\),)g(starting)g(with)f(zero.)630 3400 y Fs(-n)384 -b Ft(Suppresses)27 b(the)j(normal)f(c)m(hange)h(of)g(directory)f(when)f -(remo)m(ving)i(directo-)1110 3510 y(ries)f(from)h(the)h(stac)m(k,)h(so) -f(that)g(only)e(the)i(stac)m(k)g(is)f(manipulated.)150 -3684 y Fs(pushd)870 3815 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 3946 y Ft(Sa)m(v)m(e)30 b(the)e(curren)m(t)g(directory)g(on) -g(the)h(top)f(of)h(the)f(directory)g(stac)m(k)i(and)e(then)g -Fs(cd)f Ft(to)i Fq(dir)p Ft(.)630 4055 y(With)h(no)g(argumen)m(ts,)h -Fs(pushd)e Ft(exc)m(hanges)j(the)e(top)h(t)m(w)m(o)h(directories.)630 -4208 y Fs(+)p Fj(N)384 b Ft(Brings)28 b(the)g Fq(N)10 -b Ft(th)29 b(directory)f(\(coun)m(ting)h(from)f(the)g(left)h(of)f(the)h -(list)e(prin)m(ted)1110 4317 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)g -(with)f(zero\))j(to)f(the)f(top)g(of)h(the)f(list)f(b)m(y)h(rotating)h -(the)1110 4427 y(stac)m(k.)630 4579 y Fs(-)p Fj(N)384 -b Ft(Brings)22 b(the)h Fq(N)10 b Ft(th)23 b(directory)g(\(coun)m(ting)g -(from)f(the)i(righ)m(t)e(of)h(the)h(list)d(prin)m(ted)1110 -4689 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)g(with)f(zero\))j(to)f(the) -f(top)g(of)h(the)f(list)f(b)m(y)h(rotating)h(the)1110 -4798 y(stac)m(k.)630 4951 y Fs(-n)384 b Ft(Suppresses)26 -b(the)i(normal)g(c)m(hange)h(of)f(directory)g(when)f(adding)g -(directories)1110 5060 y(to)k(the)g(stac)m(k,)h(so)e(that)h(only)f(the) -g(stac)m(k)i(is)e(manipulated.)630 5213 y Fj(dir)336 -b Ft(Mak)m(es)36 b(the)f(curren)m(t)g(w)m(orking)f(directory)g(b)s(e)g -(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)30 b(of)h(`)p -Fs(cd)f Fq(dir)7 b Ft('.)38 b Fs(cd)p Ft(s)30 b(to)h -Fq(dir)p Ft(.)p eop +TeXDict begin 74 79 bop 150 -116 a Ft(74)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(Displa)m(y)k(the)f(list)g(of)g +(curren)m(tly)g(remem)m(b)s(ered)f(directories.)51 b(Directories)36 +b(are)e(added)f(to)630 408 y(the)28 b(list)h(with)f(the)g +Fs(pushd)f Ft(command;)i(the)f Fs(popd)f Ft(command)h(remo)m(v)m(es)h +(directories)g(from)630 518 y(the)i(list.)630 670 y Fs(+)p +Fj(N)384 b Ft(Displa)m(ys)23 b(the)f Fq(N)10 b Ft(th)21 +b(directory)h(\(coun)m(ting)h(from)e(the)h(left)g(of)g(the)g(list)g +(prin)m(ted)1110 780 y(b)m(y)30 b Fs(dirs)f Ft(when)h(in)m(v)m(ok)m(ed) +i(without)e(options\),)h(starting)g(with)g(zero.)630 +932 y Fs(-)p Fj(N)384 b Ft(Displa)m(ys)47 b(the)g Fq(N)10 +b Ft(th)46 b(directory)h(\(coun)m(ting)g(from)f(the)g(righ)m(t)h(of)g +(the)f(list)1110 1042 y(prin)m(ted)25 b(b)m(y)g Fs(dirs)g +Ft(when)f(in)m(v)m(ok)m(ed)j(without)f(options\),)h(starting)g(with)e +(zero.)630 1194 y Fs(-c)384 b Ft(Clears)31 b(the)f(directory)h(stac)m +(k)h(b)m(y)e(deleting)h(all)h(of)e(the)h(elemen)m(ts.)630 +1347 y Fs(-l)384 b Ft(Pro)s(duces)30 b(a)i(longer)g(listing;)h(the)f +(default)f(listing)i(format)e(uses)g(a)h(tilde)g(to)1110 +1456 y(denote)f(the)f(home)h(directory)-8 b(.)630 1609 +y Fs(-p)384 b Ft(Causes)30 b Fs(dirs)f Ft(to)i(prin)m(t)f(the)h +(directory)g(stac)m(k)h(with)e(one)g(en)m(try)h(p)s(er)e(line.)630 +1761 y Fs(-v)384 b Ft(Causes)36 b Fs(dirs)f Ft(to)i(prin)m(t)f(the)g +(directory)h(stac)m(k)h(with)e(one)h(en)m(try)f(p)s(er)f(line,)1110 +1871 y(pre\014xing)30 b(eac)m(h)h(en)m(try)g(with)f(its)h(index)e(in)i +(the)f(stac)m(k.)150 2023 y Fs(popd)870 2154 y(popd)47 +b([+)p Fj(N)57 b Fs(|)48 b(-)p Fj(N)11 b Fs(])46 b([-n])630 +2285 y Ft(Remo)m(v)m(e)26 b(the)e(top)g(en)m(try)h(from)e(the)h +(directory)h(stac)m(k,)i(and)c Fs(cd)h Ft(to)h(the)f(new)f(top)i +(directory)-8 b(.)630 2395 y(When)32 b(no)g(argumen)m(ts)h(are)g(giv)m +(en,)h Fs(popd)d Ft(remo)m(v)m(es)j(the)f(top)f(directory)h(from)f(the) +g(stac)m(k)630 2504 y(and)f(p)s(erforms)e(a)j Fs(cd)f +Ft(to)h(the)f(new)g(top)h(directory)-8 b(.)44 b(The)31 +b(elemen)m(ts)i(are)e(n)m(um)m(b)s(ered)f(from)630 2614 +y(0)d(starting)g(at)g(the)g(\014rst)f(directory)h(listed)g(with)f +Fs(dirs)p Ft(;)h(i.e.,)i Fs(popd)c Ft(is)i(equiv)-5 b(alen)m(t)28 +b(to)f Fs(popd)630 2724 y(+0)p Ft(.)630 2876 y Fs(+)p +Fj(N)384 b Ft(Remo)m(v)m(es)22 b(the)f Fq(N)10 b Ft(th)20 +b(directory)g(\(coun)m(ting)i(from)e(the)g(left)h(of)g(the)f(list)h +(prin)m(ted)1110 2986 y(b)m(y)30 b Fs(dirs)p Ft(\),)g(starting)h(with)f +(zero.)630 3138 y Fs(-)p Fj(N)384 b Ft(Remo)m(v)m(es)46 +b(the)g Fq(N)10 b Ft(th)44 b(directory)h(\(coun)m(ting)h(from)f(the)g +(righ)m(t)g(of)g(the)g(list)1110 3248 y(prin)m(ted)30 +b(b)m(y)g Fs(dirs)p Ft(\),)g(starting)h(with)f(zero.)630 +3400 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 3510 +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 3684 y Fs(pushd)870 3815 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 3946 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 4055 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 4208 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 4317 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 4427 y(stac)m(k.)630 +4579 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 4689 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 4798 y(stac)m(k.)630 4951 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 5060 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 %%Page: 75 81 -75 80 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(75)150 299 y Fr(6.9)68 b(Con)l(trolling)47 -b(the)e(Prompt)275 544 y Ft(The)c(v)-5 b(alue)42 b(of)g(the)h(v)-5 -b(ariable)41 b Fs(PROMPT_COMMAND)d Ft(is)j(examined)g(just)h(b)s(efore) -g(Bash)g(prin)m(ts)f(eac)m(h)150 653 y(primary)f(prompt.)73 -b(If)41 b Fs(PROMPT_COMMAND)d Ft(is)i(set)i(and)f(has)h(a)g(non-n)m -(ull)d(v)-5 b(alue,)44 b(then)d(the)h(v)-5 b(alue)41 -b(is)150 763 y(executed)31 b(just)f(as)h(if)e(it)h(had)g(b)s(een)f(t)m -(yp)s(ed)h(on)h(the)f(command)g(line.)275 898 y(In)d(addition,)h(the)h -(follo)m(wing)e(table)h(describ)s(es)f(the)i(sp)s(ecial)e(c)m -(haracters)j(whic)m(h)e(can)g(app)s(ear)g(in)g(the)150 -1008 y(prompt)h(v)-5 b(ariables:)150 1168 y Fs(\\a)384 -b Ft(A)30 b(b)s(ell)f(c)m(haracter.)150 1328 y Fs(\\d)384 -b Ft(The)30 b(date,)h(in)e Fs(")p Ft(W)-8 b(eekda)m(y)32 -b(Mon)m(th)f(Date)p Fs(")h Ft(format)f(\(e.g.,)h Fs(")p -Ft(T)-8 b(ue)30 b(Ma)m(y)h(26)p Fs(")p Ft(\).)150 1488 -y Fs(\\D{)p Fj(format)11 b Fs(})630 1598 y Ft(The)27 -b Fq(format)i Ft(is)e(passed)f(to)i Fs(strftime)p Ft(\(3\))f(and)f(the) -i(result)e(is)g(inserted)g(in)m(to)h(the)h(prompt)630 -1708 y(string;)41 b(an)e(empt)m(y)f Fq(format)j Ft(results)c(in)g(a)i -(lo)s(cale-sp)s(eci\014c)e(time)h(represen)m(tation.)64 +TeXDict begin 75 80 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(75)150 299 y Fr(6.9)68 +b(Con)l(trolling)47 b(the)e(Prompt)275 544 y Ft(The)c(v)-5 +b(alue)43 b(of)f(the)h(v)-5 b(ariable)43 b Fs(PROMPT_COMMAND)38 +b Ft(is)k(examined)g(just)g(b)s(efore)g(Bash)g(prin)m(ts)g(eac)m(h)150 +653 y(primary)f(prompt.)73 b(If)41 b Fs(PROMPT_COMMAND)d +Ft(is)j(set)h(and)f(has)h(a)g(non-n)m(ull)f(v)-5 b(alue,)45 +b(then)c(the)h(v)-5 b(alue)42 b(is)150 763 y(executed)31 +b(just)f(as)h(if)f(it)h(had)f(b)s(een)f(t)m(yp)s(ed)h(on)h(the)f +(command)g(line.)275 898 y(In)d(addition,)j(the)f(follo)m(wing)h(table) +f(describ)s(es)f(the)h(sp)s(ecial)g(c)m(haracters)h(whic)m(h)f(can)f +(app)s(ear)g(in)h(the)150 1008 y(prompt)g(v)-5 b(ariables:)150 +1168 y Fs(\\a)384 b Ft(A)30 b(b)s(ell)h(c)m(haracter.)150 +1328 y Fs(\\d)384 b Ft(The)30 b(date,)h(in)f Fs(")p Ft(W)-8 +b(eekda)m(y)32 b(Mon)m(th)f(Date)p Fs(")h Ft(format)f(\(e.g.,)h +Fs(")p Ft(T)-8 b(ue)30 b(Ma)m(y)h(26)p Fs(")p Ft(\).)150 +1488 y Fs(\\D{)p Fj(format)11 b Fs(})630 1598 y Ft(The)27 +b Fq(format)i Ft(is)f(passed)e(to)i Fs(strftime)p Ft(\(3\))f(and)f(the) +i(result)f(is)g(inserted)g(in)m(to)h(the)g(prompt)630 +1708 y(string;)42 b(an)d(empt)m(y)f Fq(format)j Ft(results)d(in)g(a)h +(lo)s(cale-sp)s(eci\014c)h(time)f(represen)m(tation.)65 b(The)630 1817 y(braces)31 b(are)f(required.)150 1977 y Fs(\\e)384 b Ft(An)30 b(escap)s(e)h(c)m(haracter.)150 2137 y Fs(\\h)384 b Ft(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e (`.'.)150 2298 y Fs(\\H)384 b Ft(The)30 b(hostname.)150 2458 y Fs(\\j)384 b Ft(The)30 b(n)m(um)m(b)s(er)f(of)h(jobs)g(curren)m -(tly)g(managed)h(b)m(y)f(the)g(shell.)150 2618 y Fs(\\l)384 -b Ft(The)30 b(basename)h(of)f(the)h(shell's)d(terminal)h(device)h +(tly)h(managed)g(b)m(y)f(the)g(shell.)150 2618 y Fs(\\l)384 +b Ft(The)30 b(basename)h(of)f(the)h(shell's)f(terminal)h(device)g (name.)150 2778 y Fs(\\n)384 b Ft(A)30 b(newline.)150 -2938 y Fs(\\r)384 b Ft(A)30 b(carriage)h(return.)150 -3098 y Fs(\\s)384 b Ft(The)22 b(name)g(of)h(the)f(shell,)g(the)h -(basename)f(of)h Fs($0)f Ft(\(the)g(p)s(ortion)f(follo)m(wing)g(the)i -(\014nal)d(slash\).)150 3258 y Fs(\\t)384 b Ft(The)30 -b(time,)g(in)f(24-hour)i(HH:MM:SS)g(format.)150 3418 -y Fs(\\T)384 b Ft(The)30 b(time,)g(in)f(12-hour)i(HH:MM:SS)g(format.) -150 3579 y Fs(\\@)384 b Ft(The)30 b(time,)g(in)f(12-hour)i(am/pm)f -(format.)150 3739 y Fs(\\A)384 b Ft(The)30 b(time,)g(in)f(24-hour)i +2938 y Fs(\\r)384 b Ft(A)30 b(carriage)i(return.)150 +3098 y Fs(\\s)384 b Ft(The)22 b(name)g(of)h(the)f(shell,)i(the)f +(basename)f(of)h Fs($0)f Ft(\(the)g(p)s(ortion)g(follo)m(wing)i(the)f +(\014nal)e(slash\).)150 3258 y Fs(\\t)384 b Ft(The)30 +b(time,)h(in)f(24-hour)h(HH:MM:SS)g(format.)150 3418 +y Fs(\\T)384 b Ft(The)30 b(time,)h(in)f(12-hour)h(HH:MM:SS)g(format.) +150 3579 y Fs(\\@)384 b Ft(The)30 b(time,)h(in)f(12-hour)h(am/pm)f +(format.)150 3739 y Fs(\\A)384 b Ft(The)30 b(time,)h(in)f(24-hour)h (HH:MM)g(format.)150 3899 y Fs(\\u)384 b Ft(The)30 b(username)g(of)g (the)h(curren)m(t)f(user.)150 4059 y Fs(\\v)384 b Ft(The)30 -b(v)m(ersion)g(of)g(Bash)h(\(e.g.,)h(2.00\))150 4219 -y Fs(\\V)384 b Ft(The)30 b(release)h(of)f(Bash,)h(v)m(ersion)f -Fs(+)g Ft(patc)m(hlev)m(el)g(\(e.g.,)j(2.00.0\))150 4379 -y Fs(\\w)384 b Ft(The)30 b(curren)m(t)g(w)m(orking)g(directory)-8 -b(,)30 b(with)f Fs($HOME)g Ft(abbreviated)h(with)f(a)i(tilde.)150 +b(v)m(ersion)h(of)f(Bash)h(\(e.g.,)h(2.00\))150 4219 +y Fs(\\V)384 b Ft(The)30 b(release)i(of)e(Bash,)h(v)m(ersion)g +Fs(+)f Ft(patc)m(hlev)m(el)i(\(e.g.,)h(2.00.0\))150 4379 +y Fs(\\w)384 b Ft(The)30 b(curren)m(t)g(w)m(orking)h(directory)-8 +b(,)31 b(with)f Fs($HOME)f Ft(abbreviated)i(with)f(a)h(tilde.)150 4539 y Fs(\\W)384 b Ft(The)30 b(basename)h(of)f Fs($PWD)p -Ft(,)g(with)f Fs($HOME)g Ft(abbreviated)g(with)g(a)i(tilde.)150 -4699 y Fs(\\!)384 b Ft(The)30 b(history)f(n)m(um)m(b)s(er)g(of)i(this)e +Ft(,)g(with)g Fs($HOME)f Ft(abbreviated)h(with)g(a)h(tilde.)150 +4699 y Fs(\\!)384 b Ft(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i(this)f (command.)150 4860 y Fs(\\#)384 b Ft(The)30 b(command)g(n)m(um)m(b)s -(er)f(of)i(this)e(command.)150 5020 y Fs(\\$)384 b Ft(If)30 -b(the)g(e\013ectiv)m(e)i(uid)d(is)g(0,)i Fs(#)p Ft(,)g(otherwise)f +(er)f(of)i(this)f(command.)150 5020 y Fs(\\$)384 b Ft(If)30 +b(the)g(e\013ectiv)m(e)j(uid)d(is)g(0,)h Fs(#)p Ft(,)g(otherwise)g Fs($)p Ft(.)150 5180 y Fs(\\)p Fj(nnn)288 b Ft(The)30 -b(c)m(haracter)i(whose)e(ASCI)s(I)f(co)s(de)h(is)g(the)g(o)s(ctal)h(v) --5 b(alue)30 b Fq(nnn)p Ft(.)150 5340 y Fs(\\\\)384 b -Ft(A)30 b(bac)m(kslash.)p eop +b(c)m(haracter)i(whose)e(ASCI)s(I)f(co)s(de)h(is)h(the)f(o)s(ctal)i(v) +-5 b(alue)31 b Fq(nnn)p Ft(.)150 5340 y Fs(\\\\)384 b +Ft(A)30 b(bac)m(kslash.)p eop end %%Page: 76 82 -76 81 bop 150 -116 a Ft(76)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fs(\\[)384 b Ft(Begin)37 b(a)g(sequence)g(of)g(non-prin)m(ting)e -(c)m(haracters.)61 b(This)35 b(could)h(b)s(e)h(used)f(to)h(em)m(b)s(ed) -g(a)630 408 y(terminal)29 b(con)m(trol)i(sequence)f(in)m(to)h(the)f -(prompt.)150 568 y Fs(\\])384 b Ft(End)29 b(a)i(sequence)g(of)f -(non-prin)m(ting)e(c)m(haracters.)275 728 y(The)d(command)h(n)m(um)m(b) -s(er)f(and)h(the)g(history)f(n)m(um)m(b)s(er)g(are)i(usually)d -(di\013eren)m(t:)38 b(the)26 b(history)f(n)m(um)m(b)s(er)150 -838 y(of)i(a)f(command)h(is)e(its)h(p)s(osition)e(in)h(the)i(history)e -(list,)h(whic)m(h)g(ma)m(y)h(include)d(commands)i(restored)g(from)150 -947 y(the)39 b(history)g(\014le)f(\(see)i(Section)f(9.1)i([Bash)e -(History)g(F)-8 b(acilities],)41 b(page)f(109\),)j(while)38 -b(the)h(command)150 1057 y(n)m(um)m(b)s(er)j(is)g(the)i(p)s(osition)d -(in)h(the)h(sequence)h(of)f(commands)g(executed)h(during)d(the)j -(curren)m(t)f(shell)150 1167 y(session.)275 1302 y(After)35 -b(the)g(string)f(is)g(deco)s(ded,)i(it)e(is)g(expanded)g(via)h -(parameter)g(expansion,)h(command)e(substi-)150 1411 -y(tution,)j(arithmetic)e(expansion,)h(and)f(quote)h(remo)m(v)-5 -b(al,)38 b(sub)5 b(ject)35 b(to)i(the)f(v)-5 b(alue)35 -b(of)h(the)g Fs(promptvars)150 1521 y Ft(shell)29 b(option)g(\(see)j -(Section)e(4.2)h([Bash)g(Builtins],)d(page)j(39\).)150 +TeXDict begin 76 81 bop 150 -116 a Ft(76)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(\\[)384 b Ft(Begin)38 +b(a)f(sequence)g(of)g(non-prin)m(ting)g(c)m(haracters.)61 +b(This)36 b(could)h(b)s(e)g(used)f(to)h(em)m(b)s(ed)g(a)630 +408 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.)150 +568 y Fs(\\])384 b Ft(End)29 b(a)i(sequence)g(of)f(non-prin)m(ting)g(c) +m(haracters.)275 728 y(The)25 b(command)h(n)m(um)m(b)s(er)f(and)h(the)g +(history)g(n)m(um)m(b)s(er)f(are)i(usually)f(di\013eren)m(t:)39 +b(the)26 b(history)g(n)m(um)m(b)s(er)150 838 y(of)h(a)f(command)h(is)f +(its)h(p)s(osition)f(in)g(the)h(history)f(list,)i(whic)m(h)f(ma)m(y)g +(include)f(commands)g(restored)g(from)150 947 y(the)39 +b(history)h(\014le)f(\(see)h(Section)g(9.1)h([Bash)e(History)h(F)-8 +b(acilities],)45 b(page)40 b(109\),)j(while)d(the)f(command)150 +1057 y(n)m(um)m(b)s(er)j(is)h(the)h(p)s(osition)f(in)g(the)g(sequence)h +(of)f(commands)g(executed)h(during)e(the)i(curren)m(t)f(shell)150 +1167 y(session.)275 1302 y(After)35 b(the)g(string)g(is)g(deco)s(ded,)h +(it)f(is)g(expanded)f(via)i(parameter)f(expansion,)i(command)d(substi-) +150 1411 y(tution,)k(arithmetic)f(expansion,)g(and)e(quote)h(remo)m(v) +-5 b(al,)39 b(sub)5 b(ject)35 b(to)i(the)f(v)-5 b(alue)36 +b(of)g(the)g Fs(promptvars)150 1521 y Ft(shell)31 b(option)f(\(see)i +(Section)f(4.2)g([Bash)g(Builtins],)g(page)g(39\).)150 1779 y Fr(6.10)68 b(The)45 b(Restricted)h(Shell)275 2024 -y Ft(If)26 b(Bash)h(is)e(started)i(with)f(the)h(name)f +y Ft(If)26 b(Bash)h(is)f(started)h(with)g(the)g(name)f Fs(rbash)p Ft(,)h(or)f(the)h(`)p Fs(--restricted)p Ft(')d(or)j(`)p -Fs(-r)p Ft(')f(option)g(is)g(supplied)150 2133 y(at)32 -b(in)m(v)m(o)s(cation,)g(the)f(shell)e(b)s(ecomes)j(restricted.)43 -b(A)31 b(restricted)g(shell)e(is)h(used)h(to)h(set)f(up)f(an)i(en)m -(viron-)150 2243 y(men)m(t)26 b(more)f(con)m(trolled)g(than)g(the)h -(standard)e(shell.)38 b(A)25 b(restricted)g(shell)f(b)s(eha)m(v)m(es)i -(iden)m(tically)d(to)j Fs(bash)150 2352 y Ft(with)j(the)i(exception)f -(that)h(the)g(follo)m(wing)e(are)h(disallo)m(w)m(ed)f(or)i(not)f(p)s -(erformed:)225 2487 y Fp(\017)60 b Ft(Changing)29 b(directories)g(with) -h(the)g Fs(cd)g Ft(builtin.)225 2622 y Fp(\017)60 b Ft(Setting)30 -b(or)g(unsetting)g(the)h(v)-5 b(alues)29 b(of)i(the)f +Fs(-r)p Ft(')f(option)h(is)g(supplied)150 2133 y(at)32 +b(in)m(v)m(o)s(cation,)i(the)d(shell)g(b)s(ecomes)h(restricted.)44 +b(A)31 b(restricted)h(shell)f(is)g(used)g(to)h(set)f(up)f(an)i(en)m +(viron-)150 2243 y(men)m(t)26 b(more)f(con)m(trolled)i(than)e(the)h +(standard)e(shell.)40 b(A)25 b(restricted)h(shell)g(b)s(eha)m(v)m(es)g +(iden)m(tically)h(to)f Fs(bash)150 2352 y Ft(with)k(the)h(exception)g +(that)g(the)g(follo)m(wing)h(are)e(disallo)m(w)m(ed)i(or)f(not)f(p)s +(erformed:)225 2487 y Fp(\017)60 b Ft(Changing)30 b(directories)h(with) +g(the)f Fs(cd)g Ft(builtin.)225 2622 y Fp(\017)60 b Ft(Setting)31 +b(or)f(unsetting)h(the)g(v)-5 b(alues)30 b(of)h(the)f Fs(SHELL)p Ft(,)g Fs(PATH)p Ft(,)f Fs(ENV)p Ft(,)h(or)g Fs(BASH_ENV)e Ft(v)-5 b(ariables.)225 2757 y Fp(\017)60 -b Ft(Sp)s(ecifying)28 b(command)i(names)g(con)m(taining)g(slashes.)225 -2891 y Fp(\017)60 b Ft(Sp)s(ecifying)28 b(a)j(\014lename)e(con)m -(taining)h(a)h(slash)e(as)i(an)f(argumen)m(t)h(to)g(the)f -Fs(.)h Ft(builtin)26 b(command.)225 3026 y Fp(\017)60 -b Ft(Sp)s(ecifying)26 b(a)k(\014lename)e(con)m(taining)g(a)i(slash)d -(as)i(an)g(argumen)m(t)h(to)f(the)g(`)p Fs(-p)p Ft(')g(option)f(to)i -(the)f Fs(hash)330 3136 y Ft(builtin)e(command.)225 3270 -y Fp(\017)60 b Ft(Imp)s(orting)29 b(function)g(de\014nitions)f(from)h -(the)i(shell)e(en)m(vironmen)m(t)h(at)h(startup.)225 -3405 y Fp(\017)60 b Ft(P)m(arsing)30 b(the)g(v)-5 b(alue)30 -b(of)h Fs(SHELLOPTS)d Ft(from)h(the)i(shell)e(en)m(vironmen)m(t)h(at)h -(startup.)225 3540 y Fp(\017)60 b Ft(Redirecting)29 b(output)h(using)f -(the)i(`)p Fs(>)p Ft(',)g(`)p Fs(>|)p Ft(',)f(`)p Fs(<>)p -Ft(',)h(`)p Fs(>&)p Ft(',)f(`)p Fs(&>)p Ft(',)h(and)e(`)p -Fs(>>)p Ft(')i(redirection)e(op)s(erators.)225 3675 y -Fp(\017)60 b Ft(Using)30 b(the)g Fs(exec)f Ft(builtin)e(to)k(replace)g -(the)f(shell)f(with)g(another)i(command.)225 3809 y Fp(\017)60 -b Ft(Adding)39 b(or)i(deleting)f(builtin)d(commands)k(with)e(the)i(`)p -Fs(-f)p Ft(')g(and)f(`)p Fs(-d)p Ft(')h(options)f(to)i(the)f +b Ft(Sp)s(ecifying)30 b(command)g(names)g(con)m(taining)i(slashes.)225 +2891 y Fp(\017)60 b Ft(Sp)s(ecifying)30 b(a)h(\014lename)f(con)m +(taining)i(a)f(slash)f(as)h(an)f(argumen)m(t)h(to)g(the)f +Fs(.)h Ft(builtin)e(command.)225 3026 y Fp(\017)60 b +Ft(Sp)s(ecifying)28 b(a)i(\014lename)f(con)m(taining)h(a)g(slash)e(as)h +(an)g(argumen)m(t)h(to)f(the)g(`)p Fs(-p)p Ft(')g(option)g(to)h(the)f +Fs(hash)330 3136 y Ft(builtin)h(command.)225 3270 y Fp(\017)60 +b Ft(Imp)s(orting)30 b(function)g(de\014nitions)g(from)f(the)i(shell)g +(en)m(vironmen)m(t)g(at)g(startup.)225 3405 y Fp(\017)60 +b Ft(P)m(arsing)31 b(the)f(v)-5 b(alue)31 b(of)g Fs(SHELLOPTS)d +Ft(from)h(the)i(shell)g(en)m(vironmen)m(t)g(at)g(startup.)225 +3540 y Fp(\017)60 b Ft(Redirecting)31 b(output)f(using)g(the)h(`)p +Fs(>)p Ft(',)g(`)p Fs(>|)p Ft(',)f(`)p Fs(<>)p Ft(',)h(`)p +Fs(>&)p Ft(',)f(`)p Fs(&>)p Ft(',)h(and)e(`)p Fs(>>)p +Ft(')i(redirection)g(op)s(erators.)225 3675 y Fp(\017)60 +b Ft(Using)31 b(the)f Fs(exec)f Ft(builtin)h(to)h(replace)h(the)e +(shell)h(with)f(another)h(command.)225 3809 y Fp(\017)60 +b Ft(Adding)40 b(or)h(deleting)h(builtin)e(commands)h(with)f(the)h(`)p +Fs(-f)p Ft(')g(and)f(`)p Fs(-d)p Ft(')h(options)g(to)h(the)f Fs(enable)330 3919 y Ft(builtin.)225 4054 y Fp(\017)60 -b Ft(Using)30 b(the)g Fs(enable)f Ft(builtin)e(command)j(to)h(enable)f -(disabled)e(shell)g(builtins.)225 4188 y Fp(\017)60 b -Ft(Sp)s(ecifying)28 b(the)i(`)p Fs(-p)p Ft(')h(option)f(to)h(the)f +b Ft(Using)31 b(the)f Fs(enable)f Ft(builtin)h(command)g(to)h(enable)g +(disabled)f(shell)g(builtins.)225 4188 y Fp(\017)60 b +Ft(Sp)s(ecifying)30 b(the)g(`)p Fs(-p)p Ft(')h(option)g(to)g(the)f Fs(command)f Ft(builtin.)225 4323 y Fp(\017)60 b Ft(T)-8 -b(urning)28 b(o\013)j(restricted)f(mo)s(de)g(with)f(`)p -Fs(set)h(+r)p Ft(')g(or)g(`)p Fs(set)g(+o)g(restricted)p -Ft('.)275 4483 y(These)g(restrictions)f(are)i(enforced)f(after)h(an)m -(y)g(startup)f(\014les)f(are)i(read.)275 4618 y(When)j(a)i(command)e -(that)i(is)e(found)g(to)h(b)s(e)g(a)g(shell)e(script)h(is)g(executed)i -(\(see)g(Section)f(3.8)h([Shell)150 4727 y(Scripts],)24 -b(page)f(31\),)j Fs(rbash)c Ft(turns)g(o\013)i(an)m(y)f(restrictions)f -(in)g(the)h(shell)f(spa)m(wned)g(to)i(execute)g(the)g(script.)150 +b(urning)29 b(o\013)i(restricted)g(mo)s(de)f(with)g(`)p +Fs(set)g(+r)p Ft(')g(or)g(`)p Fs(set)g(+o)g(restricted)p +Ft('.)275 4483 y(These)g(restrictions)h(are)g(enforced)f(after)h(an)m +(y)g(startup)f(\014les)g(are)h(read.)275 4618 y(When)j(a)i(command)e +(that)i(is)f(found)f(to)h(b)s(e)g(a)g(shell)g(script)g(is)g(executed)h +(\(see)g(Section)g(3.8)g([Shell)150 4727 y(Scripts],)25 +b(page)e(31\),)j Fs(rbash)c Ft(turns)g(o\013)i(an)m(y)f(restrictions)h +(in)f(the)g(shell)h(spa)m(wned)e(to)i(execute)g(the)g(script.)150 4986 y Fr(6.11)68 b(Bash)45 b(POSIX)f(Mo)t(de)275 5230 -y Ft(Starting)20 b(Bash)h(with)e(the)i(`)p Fs(--posix)p -Ft(')e(command-line)h(option)g(or)h(executing)g(`)p Fs(set)30 -b(-o)f(posix)p Ft(')20 b(while)150 5340 y(Bash)33 b(is)e(running)f -(will)g(cause)j(Bash)f(to)i(conform)e(more)h(closely)f(to)h(the)g -Fl(posix)e Ft(1003.2)k(standard)d(b)m(y)p eop +y Ft(Starting)21 b(Bash)g(with)f(the)h(`)p Fs(--posix)p +Ft(')e(command-line)j(option)f(or)g(executing)h(`)p Fs(set)30 +b(-o)f(posix)p Ft(')20 b(while)150 5340 y(Bash)33 b(is)f(running)f +(will)i(cause)g(Bash)f(to)i(conform)e(more)h(closely)h(to)f(the)g +Fl(posix)e Ft(1003.2)k(standard)d(b)m(y)p eop end %%Page: 77 83 -77 82 bop 150 -116 a Ft(Chapter)30 b(6:)41 b(Bash)30 -b(F)-8 b(eatures)2484 b(77)150 299 y(c)m(hanging)37 b(the)g(b)s(eha)m -(vior)f(to)h(matc)m(h)h(that)f(sp)s(eci\014ed)f(b)m(y)g -Fl(posix)g Ft(in)g(areas)h(where)g(the)g(Bash)g(default)150 -408 y(di\013ers.)275 554 y(When)30 b(in)m(v)m(ok)m(ed)g(as)h +TeXDict begin 77 82 bop 150 -116 a Ft(Chapter)30 b(6:)41 +b(Bash)30 b(F)-8 b(eatures)2484 b(77)150 299 y(c)m(hanging)38 +b(the)f(b)s(eha)m(vior)g(to)g(matc)m(h)h(that)f(sp)s(eci\014ed)g(b)m(y) +f Fl(posix)g Ft(in)h(areas)g(where)g(the)g(Bash)g(default)150 +408 y(di\013ers.)275 554 y(When)30 b(in)m(v)m(ok)m(ed)h(as)g Fs(sh)p Ft(,)f(Bash)h(en)m(ters)g Fl(posix)e Ft(mo)s(de)h(after)h -(reading)f(the)g(startup)g(\014les.)275 700 y(The)f(follo)m(wing)g -(list)g(is)h(what's)g(c)m(hanged)h(when)e(`)p Fl(posix)h -Ft(mo)s(de')h(is)e(in)g(e\013ect:)199 846 y(1.)61 b(When)28 -b(a)i(command)e(in)f(the)i(hash)f(table)h(no)f(longer)g(exists,)h(Bash) -g(will)d(re-searc)m(h)k Fs($PATH)d Ft(to)i(\014nd)330 -955 y(the)i(new)e(lo)s(cation.)41 b(This)28 b(is)i(also)g(a)m(v)-5 -b(ailable)30 b(with)f(`)p Fs(shopt)g(-s)h(checkhash)p -Ft('.)199 1095 y(2.)61 b(The)42 b(message)h(prin)m(ted)d(b)m(y)i(the)g -(job)g(con)m(trol)h(co)s(de)f(and)f(builtins)e(when)i(a)h(job)g(exits)g -(with)f(a)330 1205 y(non-zero)31 b(status)g(is)e(`Done\(status\)'.)199 -1345 y(3.)61 b(The)40 b(message)h(prin)m(ted)e(b)m(y)h(the)h(job)f(con) -m(trol)g(co)s(de)h(and)f(builtins)c(when)k(a)g(job)g(is)g(stopp)s(ed)f -(is)330 1455 y(`Stopp)s(ed\()p Fq(signame)5 b Ft(\)',)30 -b(where)g Fq(signame)35 b Ft(is,)30 b(for)g(example,)g +(reading)g(the)f(startup)g(\014les.)275 700 y(The)f(follo)m(wing)j +(list)f(is)g(what's)f(c)m(hanged)h(when)e(`)p Fl(posix)h +Ft(mo)s(de')h(is)f(in)g(e\013ect:)199 846 y(1.)61 b(When)28 +b(a)i(command)e(in)g(the)h(hash)f(table)i(no)e(longer)h(exists,)h(Bash) +f(will)g(re-searc)m(h)h Fs($PATH)d Ft(to)i(\014nd)330 +955 y(the)i(new)e(lo)s(cation.)43 b(This)29 b(is)i(also)g(a)m(v)-5 +b(ailable)33 b(with)d(`)p Fs(shopt)f(-s)h(checkhash)p +Ft('.)199 1095 y(2.)61 b(The)42 b(message)h(prin)m(ted)e(b)m(y)h(the)g +(job)g(con)m(trol)i(co)s(de)e(and)f(builtins)h(when)f(a)h(job)g(exits)h +(with)f(a)330 1205 y(non-zero)31 b(status)g(is)f(`Done\(status\)'.)199 +1345 y(3.)61 b(The)40 b(message)h(prin)m(ted)f(b)m(y)g(the)h(job)f(con) +m(trol)h(co)s(de)g(and)f(builtins)f(when)h(a)g(job)g(is)h(stopp)s(ed)e +(is)330 1455 y(`Stopp)s(ed\()p Fq(signame)5 b Ft(\)',)31 +b(where)f Fq(signame)36 b Ft(is,)31 b(for)f(example,)h Fs(SIGTSTP)p Ft(.)199 1595 y(4.)61 b(Reserv)m(ed)31 b(w)m(ords)f(ma)m (y)h(not)f(b)s(e)g(aliased.)199 1735 y(5.)61 b(The)39 -b Fl(posix)f Ft(1003.2)k Fs(PS1)d Ft(and)f Fs(PS2)h Ft(expansions)f(of) -h(`)p Fs(!)p Ft(')h(to)g(the)f(history)f(n)m(um)m(b)s(er)g(and)h(`)p -Fs(!!)p Ft(')g(to)330 1844 y(`)p Fs(!)p Ft(')c(are)h(enabled,)g(and)f -(parameter)g(expansion)g(is)f(p)s(erformed)g(on)h(the)h(v)-5 -b(alues)34 b(of)i Fs(PS1)e Ft(and)h Fs(PS2)330 1954 y -Ft(regardless)30 b(of)g(the)h(setting)f(of)h(the)f Fs(promptvars)e +b Fl(posix)f Ft(1003.2)k Fs(PS1)d Ft(and)f Fs(PS2)h Ft(expansions)g(of) +g(`)p Fs(!)p Ft(')h(to)g(the)f(history)g(n)m(um)m(b)s(er)f(and)h(`)p +Fs(!!)p Ft(')g(to)330 1844 y(`)p Fs(!)p Ft(')c(are)h(enabled,)h(and)e +(parameter)g(expansion)h(is)f(p)s(erformed)f(on)h(the)h(v)-5 +b(alues)35 b(of)h Fs(PS1)e Ft(and)h Fs(PS2)330 1954 y +Ft(regardless)c(of)f(the)h(setting)g(of)g(the)f Fs(promptvars)e Ft(option.)199 2094 y(6.)61 b(The)30 b Fl(posix)g Ft(1003.2)i(startup)e -(\014les)g(are)g(executed)i(\()p Fs($ENV)p Ft(\))e(rather)g(than)g(the) -g(normal)g(Bash)g(\014les.)199 2234 y(7.)61 b(Tilde)28 -b(expansion)h(is)f(only)h(p)s(erformed)g(on)h(assignmen)m(ts)f -(preceding)g(a)h(command)g(name,)g(rather)330 2344 y(than)g(on)g(all)g -(assignmen)m(t)g(statemen)m(ts)i(on)e(the)h(line.)199 -2484 y(8.)61 b(The)30 b(default)f(history)h(\014le)f(is)h(`)p -Fs(~/.sh_history)p Ft(')d(\(this)j(is)f(the)h(default)g(v)-5 -b(alue)30 b(of)g Fs($HISTFILE)p Ft(\).)199 2624 y(9.)61 +(\014les)h(are)f(executed)i(\()p Fs($ENV)p Ft(\))e(rather)g(than)g(the) +g(normal)h(Bash)f(\014les.)199 2234 y(7.)61 b(Tilde)30 +b(expansion)g(is)f(only)h(p)s(erformed)f(on)h(assignmen)m(ts)g +(preceding)g(a)g(command)g(name,)g(rather)330 2344 y(than)g(on)g(all)i +(assignmen)m(t)f(statemen)m(ts)h(on)e(the)h(line.)199 +2484 y(8.)61 b(The)30 b(default)g(history)h(\014le)f(is)h(`)p +Fs(~/.sh_history)p Ft(')c(\(this)k(is)f(the)g(default)h(v)-5 +b(alue)31 b(of)f Fs($HISTFILE)p Ft(\).)199 2624 y(9.)61 b(The)23 b(output)f(of)i(`)p Fs(kill)29 b(-l)p Ft(')23 -b(prin)m(ts)e(all)h(the)i(signal)d(names)i(on)g(a)h(single)e(line,)h -(separated)g(b)m(y)g(spaces,)330 2733 y(without)29 b(the)i(`)p +b(prin)m(ts)f(all)i(the)g(signal)f(names)g(on)g(a)h(single)g(line,)h +(separated)e(b)m(y)g(spaces,)330 2733 y(without)30 b(the)h(`)p Fs(SIG)p Ft(')f(pre\014x.)154 2874 y(10.)61 b(The)30 -b Fs(kill)f Ft(builtin)e(do)s(es)j(not)h(accept)h(signal)d(names)h -(with)f(a)i(`)p Fs(SIG)p Ft(')f(pre\014x.)154 3014 y(11.)61 -b(Non-in)m(teractiv)m(e)32 b(shells)c(exit)i(if)g Fq(\014lename)k -Ft(in)29 b Fs(.)h Fq(\014lename)35 b Ft(is)30 b(not)g(found.)154 -3154 y(12.)61 b(Non-in)m(teractiv)m(e)39 b(shells)d(exit)i(if)f(a)h -(syn)m(tax)g(error)g(in)e(an)i(arithmetic)f(expansion)g(results)f(in)h -(an)330 3263 y(in)m(v)-5 b(alid)28 b(expression.)154 -3403 y(13.)61 b(Redirection)23 b(op)s(erators)h(do)g(not)g(p)s(erform)f -(\014lename)g(expansion)g(on)h(the)g(w)m(ord)f(in)g(the)h(redirection) -330 3513 y(unless)29 b(the)h(shell)f(is)g(in)m(teractiv)m(e.)154 -3653 y(14.)61 b(Redirection)29 b(op)s(erators)i(do)f(not)h(p)s(erform)e -(w)m(ord)h(splitting)e(on)i(the)h(w)m(ord)f(in)f(the)h(redirection.)154 -3793 y(15.)61 b(F)-8 b(unction)34 b(names)h(m)m(ust)f(b)s(e)g(v)-5 -b(alid)33 b(shell)f Fs(name)p Ft(s.)52 b(That)34 b(is,)h(they)g(ma)m(y) -g(not)g(con)m(tain)f(c)m(haracters)330 3903 y(other)f(than)g(letters,)g -(digits,)g(and)f(underscores,)h(and)f(ma)m(y)h(not)g(start)h(with)d(a)i -(digit.)47 b(Declaring)330 4012 y(a)31 b(function)e(with)g(an)h(in)m(v) --5 b(alid)28 b(name)j(causes)f(a)h(fatal)g(syn)m(tax)g(error)f(in)f -(non-in)m(teractiv)m(e)i(shells.)154 4153 y(16.)61 b -Fl(posix)23 b Ft(1003.2)j(`sp)s(ecial')c(builtins)e(are)k(found)e(b)s -(efore)h(shell)f(functions)g(during)f(command)i(lo)s(okup.)154 -4293 y(17.)61 b(If)33 b(a)h Fl(posix)f Ft(1003.2)j(sp)s(ecial)c -(builtin)f(returns)h(an)i(error)f(status,)i(a)f(non-in)m(teractiv)m(e)g -(shell)e(exits.)330 4402 y(The)43 b(fatal)i(errors)e(are)h(those)h -(listed)d(in)h(the)h(POSIX.2)g(standard,)j(and)c(include)f(things)h -(lik)m(e)330 4512 y(passing)24 b(incorrect)i(options,)g(redirection)e -(errors,)i(v)-5 b(ariable)24 b(assignmen)m(t)h(errors)g(for)g -(assignmen)m(ts)330 4621 y(preceding)k(the)i(command)f(name,)h(and)e -(so)i(on.)154 4762 y(18.)61 b(If)33 b(the)h Fs(cd)f Ft(builtin)e -(\014nds)h(a)i(directory)f(to)i(c)m(hange)g(to)f(using)f -Fs($CDPATH)p Ft(,)g(the)h(v)-5 b(alue)33 b(it)g(assigns)g(to)330 -4871 y(the)e Fs(PWD)e Ft(v)-5 b(ariable)29 b(do)s(es)h(not)h(con)m -(tain)g(an)m(y)f(sym)m(b)s(olic)f(links,)f(as)j(if)e(`)p -Fs(cd)h(-P)p Ft(')g(had)g(b)s(een)g(executed.)154 5011 -y(19.)61 b(If)34 b Fs(CDPATH)f Ft(is)g(set,)j(the)f Fs(cd)f -Ft(builtin)d(will)g(not)k(implicitly)c(app)s(end)h(the)j(curren)m(t)f -(directory)g(to)h(it.)330 5121 y(This)28 b(means)h(that)h -Fs(cd)f Ft(will)e(fail)h(if)h(no)g(v)-5 b(alid)28 b(directory)h(name)g +b Fs(kill)f Ft(builtin)h(do)s(es)g(not)h(accept)h(signal)f(names)f +(with)g(a)h(`)p Fs(SIG)p Ft(')f(pre\014x.)154 3014 y(11.)61 +b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g Fq(\014lename)k +Ft(in)30 b Fs(.)g Fq(\014lename)36 b Ft(is)31 b(not)f(found.)154 +3154 y(12.)61 b(Non-in)m(teractiv)m(e)41 b(shells)d(exit)h(if)f(a)g +(syn)m(tax)g(error)g(in)f(an)h(arithmetic)h(expansion)f(results)f(in)h +(an)330 3263 y(in)m(v)-5 b(alid)31 b(expression.)154 +3403 y(13.)61 b(Redirection)25 b(op)s(erators)f(do)g(not)g(p)s(erform)f +(\014lename)h(expansion)g(on)g(the)g(w)m(ord)f(in)h(the)g(redirection) +330 3513 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154 +3653 y(14.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s(erform)e +(w)m(ord)h(splitting)h(on)f(the)h(w)m(ord)f(in)g(the)g(redirection.)154 +3793 y(15.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f(b)s(e)g(v)-5 +b(alid)35 b(shell)f Fs(name)p Ft(s.)52 b(That)34 b(is,)i(they)f(ma)m(y) +g(not)g(con)m(tain)g(c)m(haracters)330 3903 y(other)e(than)g(letters,)h +(digits,)h(and)d(underscores,)h(and)f(ma)m(y)h(not)g(start)h(with)e(a)h +(digit.)49 b(Declaring)330 4012 y(a)31 b(function)f(with)g(an)g(in)m(v) +-5 b(alid)31 b(name)g(causes)f(a)h(fatal)h(syn)m(tax)f(error)f(in)g +(non-in)m(teractiv)m(e)j(shells.)154 4153 y(16.)61 b +Fl(posix)23 b Ft(1003.2)j(`sp)s(ecial')e(builtins)f(are)h(found)e(b)s +(efore)h(shell)h(functions)f(during)f(command)h(lo)s(okup.)154 +4293 y(17.)61 b(If)33 b(a)h Fl(posix)f Ft(1003.2)j(sp)s(ecial)e +(builtin)g(returns)e(an)i(error)f(status,)i(a)f(non-in)m(teractiv)m(e)i +(shell)e(exits.)330 4402 y(The)43 b(fatal)j(errors)d(are)h(those)h +(listed)f(in)g(the)g(POSIX.2)g(standard,)j(and)c(include)h(things)g +(lik)m(e)330 4512 y(passing)25 b(incorrect)i(options,)g(redirection)f +(errors,)g(v)-5 b(ariable)26 b(assignmen)m(t)g(errors)f(for)g +(assignmen)m(ts)330 4621 y(preceding)30 b(the)h(command)f(name,)h(and)e +(so)i(on.)154 4762 y(18.)61 b(If)33 b(the)h Fs(cd)f Ft(builtin)h +(\014nds)e(a)i(directory)g(to)h(c)m(hange)g(to)f(using)g +Fs($CDPATH)p Ft(,)f(the)h(v)-5 b(alue)34 b(it)g(assigns)g(to)330 +4871 y(the)d Fs(PWD)e Ft(v)-5 b(ariable)31 b(do)s(es)f(not)h(con)m +(tain)h(an)m(y)e(sym)m(b)s(olic)h(links,)f(as)h(if)f(`)p +Fs(cd)g(-P)p Ft(')g(had)g(b)s(een)g(executed.)154 5011 +y(19.)61 b(If)34 b Fs(CDPATH)f Ft(is)h(set,)i(the)f Fs(cd)f +Ft(builtin)g(will)g(not)h(implicitly)h(app)s(end)c(the)j(curren)m(t)f +(directory)h(to)g(it.)330 5121 y(This)29 b(means)g(that)h +Fs(cd)f Ft(will)h(fail)g(if)g(no)f(v)-5 b(alid)30 b(directory)g(name)f (can)h(b)s(e)f(constructed)h(from)f(an)m(y)h(of)330 5230 -y(the)i(en)m(tries)f(in)f Fs($CDPATH)p Ft(,)f(ev)m(en)j(if)f(the)g(a)h -(directory)f(with)f(the)h(same)h(name)f(as)h(the)g(name)f(giv)m(en)330 -5340 y(as)g(an)f(argumen)m(t)h(to)g Fs(cd)f Ft(exists)g(in)f(the)h -(curren)m(t)g(directory)-8 b(.)p eop +y(the)i(en)m(tries)g(in)f Fs($CDPATH)p Ft(,)e(ev)m(en)j(if)g(the)f(a)h +(directory)g(with)f(the)g(same)h(name)f(as)h(the)g(name)f(giv)m(en)330 +5340 y(as)g(an)f(argumen)m(t)h(to)g Fs(cd)f Ft(exists)h(in)f(the)g +(curren)m(t)g(directory)-8 b(.)p eop end %%Page: 78 84 -78 83 bop 150 -116 a Ft(78)2572 b(Bash)31 b(Reference)g(Man)m(ual)154 -299 y(20.)61 b(A)31 b(non-in)m(teractiv)m(e)h(shell)d(exits)i(with)e -(an)i(error)g(status)g(if)f(a)h(v)-5 b(ariable)30 b(assignmen)m(t)h -(error)f(o)s(ccurs)330 408 y(when)38 b(no)h(command)g(name)g(follo)m -(ws)g(the)g(assignmen)m(t)g(statemen)m(ts.)69 b(A)39 -b(v)-5 b(ariable)38 b(assignmen)m(t)330 518 y(error)30 -b(o)s(ccurs,)g(for)g(example,)h(when)e(trying)h(to)h(assign)e(a)i(v)-5 -b(alue)30 b(to)h(a)g(readonly)e(v)-5 b(ariable.)154 653 -y(21.)61 b(A)43 b(non-in)m(teractiv)m(e)g(shell)e(exits)i(with)f(an)g -(error)h(status)g(if)f(the)h(iteration)f(v)-5 b(ariable)42 -b(in)g(a)h Fs(for)330 762 y Ft(statemen)m(t)32 b(or)f(the)f(selection)g -(v)-5 b(ariable)30 b(in)f(a)h Fs(select)f Ft(statemen)m(t)j(is)e(a)g -(readonly)g(v)-5 b(ariable.)154 897 y(22.)61 b(Pro)s(cess)30 -b(substitution)e(is)i(not)g(a)m(v)-5 b(ailable.)154 1031 -y(23.)61 b(Assignmen)m(t)31 b(statemen)m(ts)h(preceding)e -Fl(posix)h Ft(1003.2)i(sp)s(ecial)d(builtins)d(p)s(ersist)j(in)f(the)j -(shell)d(en-)330 1141 y(vironmen)m(t)h(after)g(the)h(builtin)c -(completes.)154 1275 y(24.)61 b(Assignmen)m(t)34 b(statemen)m(ts)i -(preceding)e(shell)e(function)h(calls)h(p)s(ersist)f(in)g(the)i(shell)d -(en)m(vironmen)m(t)330 1385 y(after)f(the)f(function)g(returns,)f(as)i -(if)e(a)i Fl(posix)e Ft(sp)s(ecial)g(builtin)e(command)j(had)g(b)s(een) -g(executed.)154 1519 y(25.)61 b(The)38 b Fs(export)f -Ft(and)g Fs(readonly)f Ft(builtin)f(commands)j(displa)m(y)f(their)g -(output)h(in)f(the)i(format)g(re-)330 1629 y(quired)29 -b(b)m(y)h Fl(posix)f Ft(1003.2.)154 1763 y(26.)61 b(The)30 -b Fs(trap)f Ft(builtin)e(displa)m(ys)h(signal)i(names)g(without)f(the)i -(leading)e Fs(SIG)p Ft(.)154 1898 y(27.)61 b(The)24 b -Fs(trap)g Ft(builtin)d(do)s(esn't)k(c)m(hec)m(k)h(the)f(\014rst)f -(argumen)m(t)h(for)g(a)g(p)s(ossible)d(signal)i(sp)s(eci\014cation)g -(and)330 2007 y(rev)m(ert)32 b(the)f(signal)f(handling)f(to)j(the)g -(original)d(disp)s(osition)f(if)i(it)h(is.)43 b(If)30 -b(users)h(w)m(an)m(t)h(to)g(reset)g(the)330 2117 y(handler)j(for)h(a)i -(giv)m(en)e(signal)g(to)h(the)g(original)e(disp)s(osition,)h(they)h -(should)d(use)j(`)p Fs(-)p Ft(')g(as)g(the)g(\014rst)330 -2227 y(argumen)m(t.)154 2361 y(28.)61 b(The)21 b Fs(.)h -Ft(and)f Fs(source)f Ft(builtins)e(do)j(not)h(searc)m(h)h(the)f(curren) -m(t)f(directory)g(for)h(the)g(\014lename)e(argumen)m(t)330 -2471 y(if)29 b(it)h(is)g(not)g(found)f(b)m(y)i(searc)m(hing)f -Fs(PATH)p Ft(.)154 2605 y(29.)61 b(Subshells)18 b(spa)m(wned)j(to)h -(execute)g(command)g(substitutions)d(inherit)g(the)i(v)-5 -b(alue)21 b(of)h(the)f(`)p Fs(-e)p Ft(')g(option)330 -2715 y(from)34 b(the)h(paren)m(t)g(shell.)53 b(When)34 -b(not)i(in)d Fl(posix)h Ft(mo)s(de,)i(Bash)f(clears)g(the)g(`)p -Fs(-e)p Ft(')f(option)h(in)e(suc)m(h)330 2824 y(subshells.)154 -2959 y(30.)61 b(Alias)29 b(expansion)h(is)f(alw)m(a)m(ys)i(enabled,)e -(ev)m(en)j(in)d(non-in)m(teractiv)m(e)i(shells.)154 3093 -y(31.)61 b(When)43 b(the)g Fs(alias)f Ft(builtin)d(displa)m(ys)j(alias) -g(de\014nitions,)i(it)e(do)s(es)h(not)g(displa)m(y)f(them)h(with)f(a) -330 3203 y(leading)29 b(`)p Fs(alias)g Ft(')i(unless)e(the)h(`)p -Fs(-p)p Ft(')g(option)g(is)g(supplied.)154 3337 y(32.)61 -b(When)40 b(the)g Fs(set)f Ft(builtin)e(is)i(in)m(v)m(ok)m(ed)h -(without)f(options,)j(it)e(do)s(es)g(not)g(displa)m(y)e(shell)g +TeXDict begin 78 83 bop 150 -116 a Ft(78)2572 b(Bash)31 +b(Reference)g(Man)m(ual)154 299 y(20.)61 b(A)31 b(non-in)m(teractiv)m +(e)j(shell)d(exits)h(with)e(an)h(error)g(status)g(if)g(a)g(v)-5 +b(ariable)32 b(assignmen)m(t)g(error)e(o)s(ccurs)330 +408 y(when)38 b(no)h(command)g(name)g(follo)m(ws)i(the)e(assignmen)m(t) +h(statemen)m(ts.)69 b(A)39 b(v)-5 b(ariable)40 b(assignmen)m(t)330 +518 y(error)30 b(o)s(ccurs,)g(for)g(example,)i(when)d(trying)i(to)g +(assign)f(a)h(v)-5 b(alue)31 b(to)g(a)g(readonly)f(v)-5 +b(ariable.)154 653 y(21.)61 b(A)43 b(non-in)m(teractiv)m(e)i(shell)e +(exits)h(with)f(an)f(error)h(status)g(if)g(the)g(iteration)h(v)-5 +b(ariable)44 b(in)f(a)g Fs(for)330 762 y Ft(statemen)m(t)32 +b(or)f(the)f(selection)i(v)-5 b(ariable)32 b(in)e(a)g +Fs(select)f Ft(statemen)m(t)j(is)f(a)f(readonly)h(v)-5 +b(ariable.)154 897 y(22.)61 b(Pro)s(cess)30 b(substitution)g(is)h(not)f +(a)m(v)-5 b(ailable.)154 1031 y(23.)61 b(Assignmen)m(t)32 +b(statemen)m(ts)g(preceding)f Fl(posix)g Ft(1003.2)i(sp)s(ecial)f +(builtins)e(p)s(ersist)h(in)f(the)i(shell)f(en-)330 1141 +y(vironmen)m(t)g(after)f(the)h(builtin)f(completes.)154 +1275 y(24.)61 b(Assignmen)m(t)35 b(statemen)m(ts)h(preceding)f(shell)f +(function)g(calls)i(p)s(ersist)e(in)g(the)h(shell)f(en)m(vironmen)m(t) +330 1385 y(after)d(the)f(function)h(returns,)e(as)i(if)f(a)h +Fl(posix)e Ft(sp)s(ecial)i(builtin)f(command)g(had)g(b)s(een)g +(executed.)154 1519 y(25.)61 b(The)38 b Fs(export)f Ft(and)g +Fs(readonly)f Ft(builtin)i(commands)g(displa)m(y)h(their)f(output)g(in) +g(the)h(format)g(re-)330 1629 y(quired)30 b(b)m(y)g Fl(posix)f +Ft(1003.2.)154 1763 y(26.)61 b(The)30 b Fs(trap)f Ft(builtin)h(displa)m +(ys)g(signal)i(names)e(without)g(the)h(leading)g Fs(SIG)p +Ft(.)154 1898 y(27.)61 b(The)24 b Fs(trap)g Ft(builtin)g(do)s(esn't)h +(c)m(hec)m(k)h(the)f(\014rst)f(argumen)m(t)h(for)g(a)g(p)s(ossible)f +(signal)i(sp)s(eci\014cation)g(and)330 2007 y(rev)m(ert)32 +b(the)f(signal)h(handling)f(to)h(the)g(original)g(disp)s(osition)f(if)g +(it)h(is.)44 b(If)30 b(users)h(w)m(an)m(t)h(to)g(reset)g(the)330 +2117 y(handler)k(for)g(a)i(giv)m(en)f(signal)h(to)f(the)g(original)h +(disp)s(osition,)h(they)e(should)e(use)i(`)p Fs(-)p Ft(')g(as)g(the)g +(\014rst)330 2227 y(argumen)m(t.)154 2361 y(28.)61 b(The)21 +b Fs(.)h Ft(and)f Fs(source)f Ft(builtins)h(do)g(not)h(searc)m(h)h(the) +f(curren)m(t)f(directory)h(for)g(the)g(\014lename)f(argumen)m(t)330 +2471 y(if)30 b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g +Fs(PATH)p Ft(.)154 2605 y(29.)61 b(Subshells)20 b(spa)m(wned)h(to)h +(execute)g(command)g(substitutions)f(inherit)g(the)g(v)-5 +b(alue)22 b(of)g(the)f(`)p Fs(-e)p Ft(')g(option)330 +2715 y(from)34 b(the)h(paren)m(t)g(shell.)55 b(When)34 +b(not)i(in)e Fl(posix)g Ft(mo)s(de,)i(Bash)f(clears)h(the)f(`)p +Fs(-e)p Ft(')f(option)i(in)e(suc)m(h)330 2824 y(subshells.)154 +2959 y(30.)61 b(Alias)31 b(expansion)g(is)f(alw)m(a)m(ys)i(enabled,)e +(ev)m(en)i(in)e(non-in)m(teractiv)m(e)j(shells.)154 3093 +y(31.)61 b(When)43 b(the)g Fs(alias)f Ft(builtin)g(displa)m(ys)i(alias) +g(de\014nitions,)i(it)d(do)s(es)g(not)g(displa)m(y)h(them)f(with)g(a) +330 3203 y(leading)31 b(`)p Fs(alias)e Ft(')i(unless)f(the)g(`)p +Fs(-p)p Ft(')g(option)h(is)g(supplied.)154 3337 y(32.)61 +b(When)40 b(the)g Fs(set)f Ft(builtin)h(is)g(in)m(v)m(ok)m(ed)h +(without)f(options,)j(it)e(do)s(es)f(not)g(displa)m(y)g(shell)g (function)330 3447 y(names)30 b(and)g(de\014nitions.)154 -3582 y(33.)61 b(When)36 b(the)g Fs(set)g Ft(builtin)d(is)i(in)m(v)m(ok) -m(ed)i(without)e(options,)i(it)f(displa)m(ys)e(v)-5 b(ariable)35 -b(v)-5 b(alues)36 b(without)330 3691 y(quotes,)26 b(unless)c(they)j -(con)m(tain)f(shell)e(metac)m(haracters,)28 b(ev)m(en)d(if)e(the)h -(result)f(con)m(tains)i(nonprin)m(ting)330 3801 y(c)m(haracters.)154 -3935 y(34.)61 b(When)35 b(the)g Fs(cd)f Ft(builtin)e(is)i(in)m(v)m(ok)m -(ed)i(in)d Fq(logical)38 b Ft(mo)s(de,)e(and)f(the)g(pathname)g -(constructed)g(from)330 4045 y Fs($PWD)i Ft(and)h(the)h(directory)e -(name)i(supplied)c(as)k(an)f(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g -(an)f(existing)330 4154 y(directory)-8 b(,)31 b Fs(cd)e -Ft(will)f(fail)h(instead)h(of)g(falling)e(bac)m(k)k(to)f -Fq(ph)m(ysical)h Ft(mo)s(de.)275 4314 y(There)d(is)h(other)g -Fl(posix)g Ft(1003.2)j(b)s(eha)m(vior)c(that)i(Bash)g(do)s(es)f(not)h -(implemen)m(t.)39 b(Sp)s(eci\014cally:)199 4448 y(1.)61 -b(Assignmen)m(t)25 b(statemen)m(ts)j(a\013ect)f(the)f(execution)f(en)m -(vironmen)m(t)h(of)g(all)e(builtins,)f(not)j(just)f(sp)s(ecial)330 -4558 y(ones.)199 4692 y(2.)61 b(When)20 b(a)h(subshell)d(is)i(created)h -(to)h(execute)g(a)f(shell)d(script)i(with)f(execute)j(p)s(ermission,)e -(but)g(without)330 4802 y(a)35 b(leading)f(`)p Fs(#!)p -Ft(',)i(Bash)g(sets)f Fs($0)f Ft(to)i(the)f(full)e(pathname)i(of)g(the) -g(script)f(as)h(found)f(b)m(y)h(searc)m(hing)330 4912 +3582 y(33.)61 b(When)36 b(the)g Fs(set)g Ft(builtin)g(is)g(in)m(v)m(ok) +m(ed)i(without)e(options,)i(it)f(displa)m(ys)f(v)-5 b(ariable)37 +b(v)-5 b(alues)37 b(without)330 3691 y(quotes,)26 b(unless)d(they)i +(con)m(tain)g(shell)f(metac)m(haracters,)k(ev)m(en)d(if)f(the)g(result) +g(con)m(tains)i(nonprin)m(ting)330 3801 y(c)m(haracters.)154 +3935 y(34.)61 b(When)35 b(the)g Fs(cd)f Ft(builtin)h(is)g(in)m(v)m(ok)m +(ed)i(in)d Fq(logical)41 b Ft(mo)s(de,)36 b(and)f(the)g(pathname)g +(constructed)g(from)330 4045 y Fs($PWD)i Ft(and)h(the)h(directory)f +(name)h(supplied)e(as)i(an)f(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g +(an)f(existing)330 4154 y(directory)-8 b(,)32 b Fs(cd)d +Ft(will)i(fail)g(instead)g(of)f(falling)h(bac)m(k)h(to)f +Fq(ph)m(ysical)j Ft(mo)s(de.)275 4314 y(There)29 b(is)i(other)f +Fl(posix)g Ft(1003.2)j(b)s(eha)m(vior)d(that)h(Bash)g(do)s(es)f(not)h +(implemen)m(t.)41 b(Sp)s(eci\014cally:)199 4448 y(1.)61 +b(Assignmen)m(t)26 b(statemen)m(ts)i(a\013ect)f(the)f(execution)g(en)m +(vironmen)m(t)h(of)f(all)g(builtins,)g(not)g(just)f(sp)s(ecial)330 +4558 y(ones.)199 4692 y(2.)61 b(When)20 b(a)h(subshell)f(is)h(created)g +(to)h(execute)g(a)f(shell)f(script)h(with)f(execute)i(p)s(ermission,)g +(but)e(without)330 4802 y(a)35 b(leading)h(`)p Fs(#!)p +Ft(',)g(Bash)g(sets)f Fs($0)f Ft(to)i(the)f(full)g(pathname)g(of)g(the) +g(script)g(as)g(found)f(b)m(y)h(searc)m(hing)330 4912 y Fs($PATH)p Ft(,)29 b(rather)h(than)h(the)f(command)g(as)h(t)m(yp)s (ed)f(b)m(y)g(the)h(user.)199 5046 y(3.)61 b(When)28 -b(using)e(`)p Fs(.)p Ft(')i(to)g(source)g(a)h(shell)d(script)g(found)h -(in)f Fs($PATH)p Ft(,)i(bash)f(c)m(hec)m(ks)i(execute)g(p)s(ermission) -330 5156 y(bits)g(rather)i(than)f(read)g(p)s(ermission)d(bits,)j(just)g -(as)g(if)f(it)h(w)m(ere)h(searc)m(hing)f(for)h(a)f(command.)p -eop +b(using)f(`)p Fs(.)p Ft(')h(to)g(source)g(a)h(shell)f(script)f(found)g +(in)g Fs($PATH)p Ft(,)h(bash)f(c)m(hec)m(ks)i(execute)g(p)s(ermission) +330 5156 y(bits)h(rather)h(than)f(read)g(p)s(ermission)f(bits,)i(just)f +(as)g(if)g(it)h(w)m(ere)g(searc)m(hing)g(for)g(a)f(command.)p +eop end %%Page: 79 85 -79 84 bop 150 -116 a Ft(Chapter)30 b(7:)41 b(Job)30 b(Con)m(trol)2570 -b(79)150 299 y Fo(7)80 b(Job)54 b(Con)l(trol)275 544 -y Ft(This)33 b(c)m(hapter)j(discusses)e(what)h(job)g(con)m(trol)h(is,)g -(ho)m(w)f(it)g(w)m(orks,)i(and)e(ho)m(w)g(Bash)h(allo)m(ws)e(y)m(ou)i -(to)150 653 y(access)c(its)d(facilities.)150 919 y Fr(7.1)68 -b(Job)45 b(Con)l(trol)h(Basics)275 1167 y Ft(Job)30 b(con)m(trol)i -(refers)f(to)h(the)g(abilit)m(y)d(to)j(selectiv)m(ely)g(stop)f(\(susp)s -(end\))f(the)h(execution)h(of)f(pro)s(cesses)150 1277 -y(and)24 b(con)m(tin)m(ue)h(\(resume\))g(their)f(execution)h(at)g(a)h -(later)e(p)s(oin)m(t.)38 b(A)25 b(user)f(t)m(ypically)g(emplo)m(ys)g -(this)g(facilit)m(y)150 1386 y(via)30 b(an)g(in)m(teractiv)m(e)h(in)m -(terface)g(supplied)d(join)m(tly)h(b)m(y)h(the)h(system's)f(terminal)f -(driv)m(er)g(and)h(Bash.)275 1524 y(The)23 b(shell)g(asso)s(ciates)i(a) -g Fq(job)h Ft(with)d(eac)m(h)j(pip)s(eline.)35 b(It)25 -b(k)m(eeps)f(a)h(table)g(of)f(curren)m(tly)g(executing)g(jobs,)150 -1634 y(whic)m(h)32 b(ma)m(y)j(b)s(e)e(listed)f(with)g(the)i +TeXDict begin 79 84 bop 150 -116 a Ft(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2571 b(79)150 299 y Fo(7)80 b(Job)54 +b(Con)l(trol)275 544 y Ft(This)34 b(c)m(hapter)i(discusses)f(what)g +(job)g(con)m(trol)i(is,)g(ho)m(w)e(it)h(w)m(orks,)h(and)e(ho)m(w)g +(Bash)h(allo)m(ws)g(y)m(ou)g(to)150 653 y(access)c(its)e(facilities.) +150 919 y Fr(7.1)68 b(Job)45 b(Con)l(trol)h(Basics)275 +1167 y Ft(Job)30 b(con)m(trol)j(refers)e(to)h(the)g(abilit)m(y)g(to)g +(selectiv)m(ely)j(stop)c(\(susp)s(end\))f(the)h(execution)i(of)e(pro)s +(cesses)150 1277 y(and)24 b(con)m(tin)m(ue)i(\(resume\))f(their)g +(execution)h(at)f(a)h(later)f(p)s(oin)m(t.)39 b(A)25 +b(user)f(t)m(ypically)j(emplo)m(ys)e(this)g(facilit)m(y)150 +1386 y(via)31 b(an)f(in)m(teractiv)m(e)j(in)m(terface)f(supplied)e +(join)m(tly)h(b)m(y)f(the)h(system's)f(terminal)h(driv)m(er)f(and)g +(Bash.)275 1524 y(The)23 b(shell)i(asso)s(ciates)h(a)f +Fq(job)h Ft(with)e(eac)m(h)i(pip)s(eline.)38 b(It)25 +b(k)m(eeps)f(a)h(table)h(of)e(curren)m(tly)h(executing)g(jobs,)150 +1634 y(whic)m(h)33 b(ma)m(y)i(b)s(e)e(listed)h(with)f(the)h Fs(jobs)f Ft(command.)50 b(When)33 b(Bash)h(starts)g(a)g(job)g(async)m -(hronously)-8 b(,)33 b(it)150 1744 y(prin)m(ts)c(a)i(line)d(that)j(lo)s -(oks)f(lik)m(e:)390 1882 y Fs([1])47 b(25647)150 2020 -y Ft(indicating)31 b(that)j(this)e(job)h(is)f(job)h(n)m(um)m(b)s(er)f -(1)i(and)f(that)g(the)h(pro)s(cess)f Fl(id)g Ft(of)g(the)h(last)f(pro)s -(cess)g(in)f(the)150 2129 y(pip)s(eline)39 b(asso)s(ciated)k(with)e -(this)g(job)h(is)g(25647.)78 b(All)41 b(of)i(the)g(pro)s(cesses)f(in)f -(a)i(single)e(pip)s(eline)e(are)150 2239 y(mem)m(b)s(ers)30 +(hronously)-8 b(,)34 b(it)150 1744 y(prin)m(ts)c(a)h(line)f(that)h(lo)s +(oks)g(lik)m(e:)390 1882 y Fs([1])47 b(25647)150 2020 +y Ft(indicating)34 b(that)g(this)f(job)g(is)g(job)g(n)m(um)m(b)s(er)f +(1)i(and)f(that)g(the)h(pro)s(cess)f Fl(id)g Ft(of)g(the)h(last)g(pro)s +(cess)f(in)g(the)150 2129 y(pip)s(eline)42 b(asso)s(ciated)i(with)e +(this)g(job)g(is)h(25647.)78 b(All)43 b(of)g(the)g(pro)s(cesses)f(in)g +(a)h(single)g(pip)s(eline)f(are)150 2239 y(mem)m(b)s(ers)30 b(of)g(the)h(same)f(job.)41 b(Bash)30 b(uses)g(the)h -Fq(job)h Ft(abstraction)e(as)h(the)g(basis)e(for)h(job)g(con)m(trol.) -275 2377 y(T)-8 b(o)23 b(facilitate)g(the)g(implemen)m(tation)f(of)i -(the)f(user)f(in)m(terface)i(to)g(job)f(con)m(trol,)i(the)e(op)s -(erating)g(system)150 2486 y(main)m(tains)i(the)h(notion)g(of)g(a)g -(curren)m(t)g(terminal)e(pro)s(cess)i(group)g Fl(id)p -Ft(.)39 b(Mem)m(b)s(ers)26 b(of)g(this)f(pro)s(cess)g(group)150 +Fq(job)h Ft(abstraction)f(as)g(the)g(basis)f(for)g(job)g(con)m(trol.) +275 2377 y(T)-8 b(o)23 b(facilitate)j(the)d(implemen)m(tation)i(of)f +(the)f(user)f(in)m(terface)j(to)f(job)f(con)m(trol,)j(the)d(op)s +(erating)h(system)150 2486 y(main)m(tains)j(the)f(notion)h(of)f(a)g +(curren)m(t)g(terminal)g(pro)s(cess)g(group)g Fl(id)p +Ft(.)39 b(Mem)m(b)s(ers)26 b(of)g(this)g(pro)s(cess)f(group)150 2596 y(\(pro)s(cesses)h(whose)g(pro)s(cess)g(group)g -Fl(id)g Ft(is)g(equal)g(to)h(the)f(curren)m(t)g(terminal)f(pro)s(cess)h +Fl(id)g Ft(is)h(equal)g(to)g(the)f(curren)m(t)g(terminal)h(pro)s(cess)f (group)f Fl(id)p Ft(\))i(receiv)m(e)150 2706 y(k)m(eyb)s -(oard-generated)22 b(signals)e(suc)m(h)g(as)h Fs(SIGINT)p -Ft(.)36 b(These)21 b(pro)s(cesses)g(are)g(said)f(to)h(b)s(e)g(in)e(the) -i(foreground.)150 2815 y(Bac)m(kground)38 b(pro)s(cesses)f(are)h(those) -g(whose)f(pro)s(cess)g(group)g Fl(id)h Ft(di\013ers)e(from)h(the)g -(terminal's;)j(suc)m(h)150 2925 y(pro)s(cesses)24 b(are)g(imm)m(une)f -(to)h(k)m(eyb)s(oard-generated)h(signals.)38 b(Only)22 -b(foreground)h(pro)s(cesses)h(are)g(allo)m(w)m(ed)150 -3034 y(to)35 b(read)f(from)f(or)h(write)f(to)i(the)f(terminal.)50 -b(Bac)m(kground)34 b(pro)s(cesses)g(whic)m(h)f(attempt)i(to)g(read)e -(from)150 3144 y(\(write)d(to\))h(the)g(terminal)e(are)i(sen)m(t)g(a)f -Fs(SIGTTIN)f Ft(\()p Fs(SIGTTOU)p Ft(\))g(signal)g(b)m(y)h(the)h -(terminal)e(driv)m(er,)g(whic)m(h,)150 3254 y(unless)g(caugh)m(t,)i -(susp)s(ends)d(the)j(pro)s(cess.)275 3392 y(If)j(the)i(op)s(erating)f -(system)g(on)h(whic)m(h)e(Bash)h(is)g(running)d(supp)s(orts)i(job)h -(con)m(trol,)i(Bash)f(con)m(tains)150 3501 y(facilities)26 -b(to)j(use)f(it.)39 b(T)m(yping)27 b(the)h Fq(susp)s(end)h -Ft(c)m(haracter)h(\(t)m(ypically)d(`)p Fs(^Z)p Ft(',)i(Con)m(trol-Z\))f -(while)e(a)i(pro)s(cess)150 3611 y(is)41 b(running)f(causes)j(that)g -(pro)s(cess)f(to)h(b)s(e)f(stopp)s(ed)f(and)h(returns)f(con)m(trol)i -(to)g(Bash.)77 b(T)m(yping)41 b(the)150 3720 y Fq(dela)m(y)m(ed)k(susp) -s(end)g Ft(c)m(haracter)h(\(t)m(ypically)d(`)p Fs(^Y)p -Ft(',)48 b(Con)m(trol-Y\))d(causes)f(the)h(pro)s(cess)e(to)i(b)s(e)f -(stopp)s(ed)150 3830 y(when)26 b(it)h(attempts)i(to)f(read)f(input)f -(from)g(the)i(terminal,)f(and)g(con)m(trol)g(to)h(b)s(e)f(returned)f -(to)j(Bash.)39 b(The)150 3940 y(user)e(then)g(manipulates)f(the)i -(state)h(of)f(this)e(job,)k(using)c(the)i Fs(bg)f Ft(command)g(to)h -(con)m(tin)m(ue)g(it)f(in)g(the)150 4049 y(bac)m(kground,)h(the)f -Fs(fg)g Ft(command)f(to)i(con)m(tin)m(ue)f(it)f(in)f(the)i(foreground,) -h(or)f(the)g Fs(kill)f Ft(command)g(to)150 4159 y(kill)24 -b(it.)39 b(A)27 b(`)p Fs(^Z)p Ft(')g(tak)m(es)h(e\013ect)g(immediately) --8 b(,)26 b(and)g(has)h(the)f(additional)f(side)g(e\013ect)k(of)d -(causing)g(p)s(ending)150 4268 y(output)k(and)g(t)m(yp)s(eahead)h(to)g +(oard-generated)22 b(signals)g(suc)m(h)e(as)h Fs(SIGINT)p +Ft(.)36 b(These)21 b(pro)s(cesses)g(are)g(said)g(to)g(b)s(e)g(in)f(the) +h(foreground.)150 2815 y(Bac)m(kground)38 b(pro)s(cesses)f(are)h(those) +g(whose)f(pro)s(cess)g(group)g Fl(id)h Ft(di\013ers)f(from)g(the)g +(terminal's;)42 b(suc)m(h)150 2925 y(pro)s(cesses)24 +b(are)g(imm)m(une)g(to)g(k)m(eyb)s(oard-generated)h(signals.)40 +b(Only)23 b(foreground)g(pro)s(cesses)h(are)g(allo)m(w)m(ed)150 +3034 y(to)35 b(read)f(from)f(or)h(write)g(to)h(the)f(terminal.)52 +b(Bac)m(kground)34 b(pro)s(cesses)g(whic)m(h)g(attempt)h(to)g(read)e +(from)150 3144 y(\(write)e(to\))g(the)g(terminal)g(are)g(sen)m(t)g(a)f +Fs(SIGTTIN)f Ft(\()p Fs(SIGTTOU)p Ft(\))g(signal)i(b)m(y)f(the)h +(terminal)g(driv)m(er,)f(whic)m(h,)150 3254 y(unless)g(caugh)m(t,)h +(susp)s(ends)d(the)j(pro)s(cess.)275 3392 y(If)j(the)i(op)s(erating)g +(system)f(on)h(whic)m(h)f(Bash)g(is)h(running)d(supp)s(orts)h(job)h +(con)m(trol,)j(Bash)e(con)m(tains)150 3501 y(facilities)30 +b(to)f(use)f(it.)40 b(T)m(yping)28 b(the)g Fq(susp)s(end)h +Ft(c)m(haracter)h(\(t)m(ypically)g(`)p Fs(^Z)p Ft(',)f(Con)m(trol-Z\))g +(while)f(a)g(pro)s(cess)150 3611 y(is)42 b(running)f(causes)i(that)g +(pro)s(cess)f(to)h(b)s(e)f(stopp)s(ed)f(and)h(returns)f(con)m(trol)j +(to)f(Bash.)77 b(T)m(yping)42 b(the)150 3720 y Fq(dela)m(y)m(ed)k(susp) +s(end)f Ft(c)m(haracter)h(\(t)m(ypically)g(`)p Fs(^Y)p +Ft(',)i(Con)m(trol-Y\))e(causes)e(the)h(pro)s(cess)e(to)i(b)s(e)f +(stopp)s(ed)150 3830 y(when)26 b(it)i(attempts)h(to)f(read)f(input)g +(from)f(the)i(terminal,)h(and)e(con)m(trol)h(to)g(b)s(e)f(returned)f +(to)j(Bash.)39 b(The)150 3940 y(user)e(then)g(manipulates)h(the)g +(state)h(of)f(this)f(job,)j(using)d(the)h Fs(bg)f Ft(command)g(to)h +(con)m(tin)m(ue)h(it)f(in)g(the)150 4049 y(bac)m(kground,)g(the)f +Fs(fg)g Ft(command)f(to)i(con)m(tin)m(ue)g(it)f(in)f(the)h(foreground,) +h(or)f(the)g Fs(kill)f Ft(command)g(to)150 4159 y(kill)27 +b(it.)40 b(A)27 b(`)p Fs(^Z)p Ft(')g(tak)m(es)h(e\013ect)g(immediately) +-8 b(,)29 b(and)d(has)h(the)f(additional)i(side)e(e\013ect)j(of)d +(causing)h(p)s(ending)150 4268 y(output)j(and)g(t)m(yp)s(eahead)h(to)g (b)s(e)e(discarded.)275 4406 y(There)j(are)g(a)h(n)m(um)m(b)s(er)e(of)i -(w)m(a)m(ys)g(to)h(refer)e(to)h(a)g(job)f(in)f(the)i(shell.)45 +(w)m(a)m(ys)g(to)h(refer)e(to)h(a)g(job)f(in)g(the)h(shell.)47 b(The)32 b(c)m(haracter)i(`)p Fs(\045)p Ft(')f(in)m(tro)s(duces)150 4516 y(a)e(job)f(name.)275 4654 y(Job)h(n)m(um)m(b)s(er)f Fs(n)h Ft(ma)m(y)h(b)s(e)f(referred)g(to)h(as)g(`)p Fs(\045n)p -Ft('.)44 b(The)31 b(sym)m(b)s(ols)f(`)p Fs(\045\045)p -Ft(')i(and)f(`)p Fs(\045+)p Ft(')g(refer)h(to)g(the)g(shell's)150 -4764 y(notion)42 b(of)g(the)h(curren)m(t)f(job,)j(whic)m(h)c(is)g(the)h -(last)h(job)e(stopp)s(ed)h(while)e(it)i(w)m(as)g(in)f(the)i(foreground) -150 4873 y(or)36 b(started)h(in)e(the)h(bac)m(kground.)58 -b(The)36 b(previous)f(job)g(ma)m(y)i(b)s(e)f(referenced)g(using)f(`)p -Fs(\045-)p Ft('.)58 b(In)35 b(output)150 4983 y(p)s(ertaining)24 -b(to)j(jobs)e(\(e.g.,)k(the)d(output)g(of)g(the)g Fs(jobs)f -Ft(command\),)j(the)e(curren)m(t)g(job)g(is)f(alw)m(a)m(ys)h(\015agged) -150 5092 y(with)j(a)i(`)p Fs(+)p Ft(',)g(and)e(the)i(previous)e(job)h -(with)f(a)i(`)p Fs(-)p Ft('.)275 5230 y(A)38 b(job)g(ma)m(y)h(also)f(b) -s(e)g(referred)f(to)j(using)c(a)j(pre\014x)e(of)i(the)f(name)h(used)e -(to)i(start)g(it,)h(or)f(using)e(a)150 5340 y(substring)28 -b(that)j(app)s(ears)f(in)f(its)h(command)g(line.)39 b(F)-8 -b(or)31 b(example,)f(`)p Fs(\045ce)p Ft(')g(refers)g(to)h(a)g(stopp)s -(ed)e Fs(ce)h Ft(job.)p eop +Ft('.)44 b(The)31 b(sym)m(b)s(ols)g(`)p Fs(\045\045)p +Ft(')h(and)f(`)p Fs(\045+)p Ft(')g(refer)h(to)g(the)g(shell's)150 +4764 y(notion)43 b(of)f(the)h(curren)m(t)f(job,)j(whic)m(h)d(is)g(the)g +(last)i(job)d(stopp)s(ed)h(while)g(it)h(w)m(as)f(in)g(the)h(foreground) +150 4873 y(or)36 b(started)h(in)f(the)g(bac)m(kground.)58 +b(The)36 b(previous)g(job)f(ma)m(y)i(b)s(e)f(referenced)g(using)g(`)p +Fs(\045-)p Ft('.)58 b(In)35 b(output)150 4983 y(p)s(ertaining)26 +b(to)h(jobs)e(\(e.g.,)k(the)d(output)g(of)g(the)g Fs(jobs)f +Ft(command\),)j(the)e(curren)m(t)g(job)g(is)g(alw)m(a)m(ys)h(\015agged) +150 5092 y(with)j(a)h(`)p Fs(+)p Ft(',)g(and)e(the)i(previous)f(job)g +(with)g(a)h(`)p Fs(-)p Ft('.)275 5230 y(A)38 b(job)g(ma)m(y)h(also)g(b) +s(e)f(referred)f(to)j(using)d(a)i(pre\014x)e(of)i(the)f(name)h(used)e +(to)i(start)g(it,)i(or)e(using)f(a)150 5340 y(substring)29 +b(that)i(app)s(ears)f(in)g(its)h(command)f(line.)41 b(F)-8 +b(or)31 b(example,)g(`)p Fs(\045ce)p Ft(')f(refers)g(to)h(a)g(stopp)s +(ed)e Fs(ce)h Ft(job.)p eop end %%Page: 80 86 -80 85 bop 150 -116 a Ft(80)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y(Using)26 b(`)p Fs(\045?ce)p Ft(',)h(on)f(the)h(other)g(hand,)g -(refers)f(to)h(an)m(y)g(job)g(con)m(taining)f(the)h(string)e(`)p -Fs(ce)p Ft(')i(in)e(its)h(command)150 408 y(line.)39 -b(If)30 b(the)h(pre\014x)e(or)h(substring)e(matc)m(hes)k(more)e(than)h -(one)f(job,)h(Bash)f(rep)s(orts)g(an)g(error.)275 544 -y(Simply)e(naming)i(a)h(job)g(can)g(b)s(e)f(used)h(to)g(bring)e(it)i -(in)m(to)g(the)g(foreground:)41 b(`)p Fs(\0451)p Ft(')31 -b(is)f(a)i(synon)m(ym)e(for)150 654 y(`)p Fs(fg)g(\0451)p -Ft(',)i(bringing)d(job)i(1)g(from)g(the)h(bac)m(kground)f(in)m(to)h -(the)f(foreground.)44 b(Similarly)-8 b(,)28 b(`)p Fs(\0451)i(&)p -Ft(')i(resumes)150 763 y(job)e(1)h(in)e(the)h(bac)m(kground,)h(equiv)-5 -b(alen)m(t)30 b(to)h(`)p Fs(bg)f(\0451)p Ft(')275 899 -y(The)g(shell)g(learns)g(immediately)g(whenev)m(er)h(a)h(job)f(c)m -(hanges)h(state.)45 b(Normally)-8 b(,)31 b(Bash)g(w)m(aits)h(un)m(til) -150 1009 y(it)24 b(is)g(ab)s(out)g(to)i(prin)m(t)d(a)i(prompt)f(b)s -(efore)g(rep)s(orting)g(c)m(hanges)h(in)f(a)h(job's)f(status)h(so)g(as) +TeXDict begin 80 85 bop 150 -116 a Ft(80)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y(Using)c(`)p Fs(\045?ce)p +Ft(',)g(on)f(the)h(other)g(hand,)g(refers)f(to)h(an)m(y)g(job)g(con)m +(taining)h(the)f(string)f(`)p Fs(ce)p Ft(')h(in)f(its)h(command)150 +408 y(line.)41 b(If)30 b(the)h(pre\014x)e(or)h(substring)f(matc)m(hes)j +(more)e(than)h(one)f(job,)h(Bash)f(rep)s(orts)g(an)g(error.)275 +544 y(Simply)g(naming)h(a)g(job)g(can)g(b)s(e)f(used)h(to)g(bring)f(it) +i(in)m(to)g(the)f(foreground:)41 b(`)p Fs(\0451)p Ft(')31 +b(is)g(a)h(synon)m(ym)e(for)150 654 y(`)p Fs(fg)g(\0451)p +Ft(',)i(bringing)f(job)g(1)g(from)g(the)h(bac)m(kground)f(in)m(to)i +(the)e(foreground.)44 b(Similarly)-8 b(,)32 b(`)p Fs(\0451)e(&)p +Ft(')i(resumes)150 763 y(job)e(1)h(in)f(the)g(bac)m(kground,)h(equiv)-5 +b(alen)m(t)32 b(to)f(`)p Fs(bg)f(\0451)p Ft(')275 899 +y(The)g(shell)i(learns)f(immediately)i(whenev)m(er)e(a)h(job)f(c)m +(hanges)h(state.)45 b(Normally)-8 b(,)33 b(Bash)e(w)m(aits)i(un)m(til) +150 1009 y(it)25 b(is)g(ab)s(out)f(to)i(prin)m(t)e(a)h(prompt)f(b)s +(efore)g(rep)s(orting)h(c)m(hanges)g(in)g(a)g(job's)f(status)h(so)g(as) g(to)g(not)g(in)m(terrupt)150 1119 y(an)m(y)g(other)g(output.)39 -b(If)24 b(the)i(`)p Fs(-b)p Ft(')e(option)h(to)g(the)g -Fs(set)f Ft(builtin)e(is)i(enabled,)h(Bash)g(rep)s(orts)f(suc)m(h)h(c)m -(hanges)150 1228 y(immediately)j(\(see)i(Section)f(4.3)h([The)f(Set)h -(Builtin],)d(page)j(50\).)42 b(An)m(y)29 b(trap)g(on)g -Fs(SIGCHLD)f Ft(is)g(executed)150 1338 y(for)i(eac)m(h)i(c)m(hild)c -(pro)s(cess)i(that)h(exits.)275 1474 y(If)k(an)h(attempt)h(to)g(exit)f -(Bash)h(is)e(made)h(while)e(jobs)i(are)g(stopp)s(ed,)h(the)f(shell)f -(prin)m(ts)f(a)j(message)150 1583 y(w)m(arning)25 b(that)i(there)f(are) +b(If)24 b(the)i(`)p Fs(-b)p Ft(')e(option)i(to)f(the)g +Fs(set)f Ft(builtin)h(is)g(enabled,)h(Bash)f(rep)s(orts)f(suc)m(h)h(c)m +(hanges)150 1228 y(immediately)31 b(\(see)f(Section)g(4.3)g([The)f(Set) +h(Builtin],)g(page)g(50\).)42 b(An)m(y)29 b(trap)g(on)g +Fs(SIGCHLD)f Ft(is)h(executed)150 1338 y(for)h(eac)m(h)i(c)m(hild)e +(pro)s(cess)g(that)h(exits.)275 1474 y(If)k(an)h(attempt)h(to)g(exit)g +(Bash)g(is)f(made)g(while)g(jobs)g(are)g(stopp)s(ed,)h(the)f(shell)h +(prin)m(ts)e(a)i(message)150 1583 y(w)m(arning)26 b(that)h(there)f(are) g(stopp)s(ed)g(jobs.)38 b(The)26 b Fs(jobs)f Ft(command)h(ma)m(y)h -(then)e(b)s(e)h(used)f(to)i(insp)s(ect)e(their)150 1693 -y(status.)57 b(If)35 b(a)h(second)g(attempt)g(to)h(exit)e(is)g(made)h -(without)e(an)i(in)m(terv)m(ening)f(command,)h(Bash)g(do)s(es)150 -1802 y(not)31 b(prin)m(t)e(another)h(w)m(arning,)g(and)f(the)i(stopp)s +(then)e(b)s(e)h(used)f(to)i(insp)s(ect)f(their)150 1693 +y(status.)57 b(If)35 b(a)h(second)g(attempt)g(to)h(exit)f(is)g(made)g +(without)f(an)h(in)m(terv)m(ening)h(command,)f(Bash)g(do)s(es)150 +1802 y(not)31 b(prin)m(t)f(another)g(w)m(arning,)h(and)e(the)i(stopp)s (ed)e(jobs)h(are)h(terminated.)150 2063 y Fr(7.2)68 b(Job)45 b(Con)l(trol)h(Builtins)150 2308 y Fs(bg)870 2443 y(bg)h([)p Fj(jobspec)11 b Fs(])630 2578 y Ft(Resume)28 b(the)g(susp)s(ended)d -(job)j Fq(jobsp)s(ec)k Ft(in)27 b(the)h(bac)m(kground,)h(as)f(if)f(it)g -(had)g(b)s(een)g(started)630 2688 y(with)k(`)p Fs(&)p -Ft('.)45 b(If)31 b Fq(jobsp)s(ec)37 b Ft(is)31 b(not)h(supplied,)d(the) -j(curren)m(t)g(job)f(is)g(used.)45 b(The)31 b(return)g(status)630 -2797 y(is)h(zero)h(unless)e(it)h(is)g(run)f(when)h(job)g(con)m(trol)h -(is)f(not)h(enabled,)g(or,)g(when)f(run)f(with)g(job)630 -2907 y(con)m(trol)37 b(enabled,)h(if)e Fq(jobsp)s(ec)42 +(job)j Fq(jobsp)s(ec)k Ft(in)c(the)g(bac)m(kground,)h(as)f(if)g(it)g +(had)f(b)s(een)g(started)630 2688 y(with)32 b(`)p Fs(&)p +Ft('.)45 b(If)31 b Fq(jobsp)s(ec)37 b Ft(is)32 b(not)g(supplied,)f(the) +h(curren)m(t)g(job)f(is)h(used.)45 b(The)31 b(return)g(status)630 +2797 y(is)i(zero)g(unless)f(it)h(is)g(run)e(when)h(job)g(con)m(trol)i +(is)f(not)g(enabled,)h(or,)f(when)f(run)f(with)h(job)630 +2907 y(con)m(trol)38 b(enabled,)h(if)e Fq(jobsp)s(ec)42 b Ft(w)m(as)37 b(not)h(found)d(or)i Fq(jobsp)s(ec)42 -b Ft(sp)s(eci\014es)36 b(a)h(job)g(that)h(w)m(as)630 -3017 y(started)31 b(without)e(job)h(con)m(trol.)150 3177 +b Ft(sp)s(eci\014es)37 b(a)g(job)g(that)h(w)m(as)630 +3017 y(started)31 b(without)f(job)g(con)m(trol.)150 3177 y Fs(fg)870 3312 y(fg)47 b([)p Fj(jobspec)11 b Fs(])630 3448 y Ft(Resume)43 b(the)g(job)g Fq(jobsp)s(ec)48 b -Ft(in)42 b(the)h(foreground)g(and)f(mak)m(e)j(it)d(the)i(curren)m(t)f -(job.)78 b(If)630 3557 y Fq(jobsp)s(ec)41 b Ft(is)36 -b(not)g(supplied,)f(the)h(curren)m(t)h(job)f(is)f(used.)58 -b(The)36 b(return)f(status)h(is)g(that)h(of)630 3667 -y(the)d(command)g(placed)g(in)m(to)g(the)g(foreground,)g(or)g(non-zero) -h(if)e(run)g(when)g(job)g(con)m(trol)630 3776 y(is)h(disabled)f(or,)k -(when)d(run)g(with)g(job)h(con)m(trol)g(enabled,)h Fq(jobsp)s(ec)k -Ft(do)s(es)35 b(not)h(sp)s(ecify)e(a)630 3886 y(v)-5 -b(alid)29 b(job)h(or)g Fq(jobsp)s(ec)35 b Ft(sp)s(eci\014es)29 -b(a)i(job)f(that)h(w)m(as)g(started)g(without)e(job)h(con)m(trol.)150 -4047 y Fs(jobs)870 4182 y(jobs)47 b([-lnprs])e([)p Fj(jobspec)11 -b Fs(])870 4291 y(jobs)47 b(-x)g Fj(command)56 b Fs([)p -Fj(arguments)11 b Fs(])630 4427 y Ft(The)30 b(\014rst)f(form)h(lists)f -(the)i(activ)m(e)g(jobs.)41 b(The)30 b(options)f(ha)m(v)m(e)j(the)e -(follo)m(wing)f(meanings:)630 4587 y Fs(-l)384 b Ft(List)30 -b(pro)s(cess)g Fl(id)p Ft(s)g(in)f(addition)g(to)i(the)f(normal)g -(information.)630 4748 y Fs(-n)384 b Ft(Displa)m(y)24 -b(information)f(only)i(ab)s(out)f(jobs)h(that)g(ha)m(v)m(e)i(c)m -(hanged)e(status)h(since)1110 4858 y(the)31 b(user)e(w)m(as)i(last)f -(noti\014ed)f(of)i(their)e(status.)630 5018 y Fs(-p)384 -b Ft(List)30 b(only)f(the)i(pro)s(cess)f Fl(id)g Ft(of)h(the)f(job's)g -(pro)s(cess)g(group)g(leader.)630 5179 y Fs(-r)384 b -Ft(Restrict)30 b(output)g(to)i(running)27 b(jobs.)630 -5340 y Fs(-s)384 b Ft(Restrict)30 b(output)g(to)i(stopp)s(ed)d(jobs.)p -eop +Ft(in)43 b(the)g(foreground)g(and)f(mak)m(e)j(it)e(the)h(curren)m(t)f +(job.)78 b(If)630 3557 y Fq(jobsp)s(ec)41 b Ft(is)c(not)f(supplied,)h +(the)f(curren)m(t)h(job)f(is)g(used.)58 b(The)36 b(return)f(status)h +(is)h(that)g(of)630 3667 y(the)d(command)g(placed)h(in)m(to)g(the)f +(foreground,)g(or)g(non-zero)h(if)f(run)f(when)g(job)g(con)m(trol)630 +3776 y(is)i(disabled)g(or,)i(when)d(run)g(with)h(job)g(con)m(trol)h +(enabled,)h Fq(jobsp)s(ec)j Ft(do)s(es)35 b(not)h(sp)s(ecify)f(a)630 +3886 y(v)-5 b(alid)31 b(job)f(or)g Fq(jobsp)s(ec)35 b +Ft(sp)s(eci\014es)30 b(a)h(job)f(that)h(w)m(as)g(started)g(without)f +(job)g(con)m(trol.)150 4047 y Fs(jobs)870 4182 y(jobs)47 +b([-lnprs])e([)p Fj(jobspec)11 b Fs(])870 4291 y(jobs)47 +b(-x)g Fj(command)56 b Fs([)p Fj(arguments)11 b Fs(])630 +4427 y Ft(The)30 b(\014rst)f(form)h(lists)h(the)g(activ)m(e)h(jobs.)41 +b(The)30 b(options)g(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)630 +4587 y Fs(-l)384 b Ft(List)31 b(pro)s(cess)f Fl(id)p +Ft(s)g(in)g(addition)h(to)g(the)f(normal)h(information.)630 +4748 y Fs(-n)384 b Ft(Displa)m(y)26 b(information)f(only)h(ab)s(out)e +(jobs)h(that)g(ha)m(v)m(e)i(c)m(hanged)e(status)h(since)1110 +4858 y(the)31 b(user)e(w)m(as)i(last)g(noti\014ed)f(of)h(their)f +(status.)630 5018 y Fs(-p)384 b Ft(List)31 b(only)f(the)h(pro)s(cess)f +Fl(id)g Ft(of)h(the)f(job's)g(pro)s(cess)g(group)g(leader.)630 +5179 y Fs(-r)384 b Ft(Restrict)31 b(output)f(to)i(running)c(jobs.)630 +5340 y Fs(-s)384 b Ft(Restrict)31 b(output)f(to)i(stopp)s(ed)d(jobs.)p +eop end %%Page: 81 87 -81 86 bop 150 -116 a Ft(Chapter)30 b(7:)41 b(Job)30 b(Con)m(trol)2570 -b(81)630 299 y(If)23 b Fq(jobsp)s(ec)28 b Ft(is)23 b(giv)m(en,)i -(output)e(is)g(restricted)g(to)h(information)e(ab)s(out)h(that)h(job.) -39 b(If)23 b Fq(jobsp)s(ec)630 408 y Ft(is)29 b(not)i(supplied,)c(the)k -(status)g(of)f(all)f(jobs)h(is)g(listed.)630 552 y(If)h(the)g(`)p -Fs(-x)p Ft(')g(option)g(is)f(supplied,)f Fs(jobs)h Ft(replaces)h(an)m -(y)g Fq(jobsp)s(ec)37 b Ft(found)29 b(in)h Fq(command)35 -b Ft(or)630 662 y Fq(argumen)m(ts)41 b Ft(with)36 b(the)i(corresp)s -(onding)d(pro)s(cess)i(group)f Fl(id)p Ft(,)k(and)c(executes)j -Fq(command)p Ft(,)630 771 y(passing)29 b(it)h Fq(argumen)m(t)r -Ft(s,)h(returning)e(its)g(exit)i(status.)150 949 y Fs(kill)870 -1093 y(kill)47 b([-s)g Fj(sigspec)11 b Fs(])45 b([-n)i -Fj(signum)11 b Fs(])45 b([-)p Fj(sigspec)11 b Fs(])44 -b Fj(jobspec)57 b Fs(or)47 b Fj(pid)870 1202 y Fs(kill)g(-l)g([)p -Fj(exit_status)11 b Fs(])630 1346 y Ft(Send)22 b(a)i(signal)e(sp)s -(eci\014ed)g(b)m(y)h Fq(sigsp)s(ec)28 b Ft(or)c Fq(sign)m(um)e -Ft(to)i(the)g(pro)s(cess)f(named)g(b)m(y)g(job)g(sp)s(eci\014-)630 -1456 y(cation)j Fq(jobsp)s(ec)k Ft(or)25 b(pro)s(cess)g -Fl(id)h Fq(pid)p Ft(.)37 b Fq(sigsp)s(ec)30 b Ft(is)24 -b(either)h(a)h(case-insensitiv)m(e)f(signal)f(name)630 -1565 y(suc)m(h)30 b(as)h Fs(SIGINT)d Ft(\(with)i(or)g(without)g(the)g -Fs(SIG)g Ft(pre\014x\))f(or)i(a)f(signal)f(n)m(um)m(b)s(er;)h -Fq(sign)m(um)f Ft(is)630 1675 y(a)j(signal)e(n)m(um)m(b)s(er.)43 -b(If)31 b Fq(sigsp)s(ec)36 b Ft(and)31 b Fq(sign)m(um)f -Ft(are)i(not)f(presen)m(t,)h Fs(SIGTERM)e Ft(is)g(used.)43 -b(The)630 1785 y(`)p Fs(-l)p Ft(')34 b(option)f(lists)g(the)h(signal)f -(names.)51 b(If)33 b(an)m(y)i(argumen)m(ts)f(are)g(supplied)d(when)i(`) -p Fs(-l)p Ft(')h(is)630 1894 y(giv)m(en,)d(the)h(names)e(of)i(the)f -(signals)e(corresp)s(onding)g(to)j(the)f(argumen)m(ts)g(are)h(listed,)e -(and)630 2004 y(the)e(return)f(status)h(is)f(zero.)41 -b Fq(exit)p 1797 2004 28 4 v 40 w(status)32 b Ft(is)27 -b(a)h(n)m(um)m(b)s(er)f(sp)s(ecifying)e(a)k(signal)d(n)m(um)m(b)s(er)h -(or)630 2113 y(the)35 b(exit)g(status)g(of)g(a)g(pro)s(cess)g -(terminated)f(b)m(y)h(a)g(signal.)53 b(The)34 b(return)g(status)h(is)f -(zero)630 2223 y(if)c(at)i(least)f(one)h(signal)d(w)m(as)j -(successfully)d(sen)m(t,)j(or)f(non-zero)h(if)e(an)h(error)f(o)s(ccurs) -h(or)g(an)630 2333 y(in)m(v)-5 b(alid)28 b(option)i(is)f(encoun)m -(tered.)150 2510 y Fs(wait)870 2654 y(wait)47 b([)p Fj(jobspec)56 -b Fs(or)47 b Fj(pid)11 b Fs(])630 2798 y Ft(W)-8 b(ait)44 -b(un)m(til)d(the)i(c)m(hild)f(pro)s(cess)g(sp)s(eci\014ed)g(b)m(y)h -(pro)s(cess)f Fl(id)i Fq(pid)g Ft(or)f(job)g(sp)s(eci\014cation)630 -2907 y Fq(jobsp)s(ec)d Ft(exits)34 b(and)g(return)g(the)g(exit)h -(status)g(of)g(the)g(last)f(command)g(w)m(aited)h(for.)53 -b(If)35 b(a)630 3017 y(job)g(sp)s(ec)f(is)g(giv)m(en,)i(all)e(pro)s -(cesses)h(in)e(the)i(job)g(are)g(w)m(aited)g(for.)54 -b(If)35 b(no)f(argumen)m(ts)i(are)630 3127 y(giv)m(en,)c(all)e(curren)m -(tly)g(activ)m(e)i(c)m(hild)e(pro)s(cesses)h(are)g(w)m(aited)g(for,)h -(and)e(the)i(return)e(status)630 3236 y(is)g(zero.)44 -b(If)30 b(neither)g Fq(jobsp)s(ec)36 b Ft(nor)31 b Fq(pid)h -Ft(sp)s(eci\014es)e(an)h(activ)m(e)h(c)m(hild)e(pro)s(cess)g(of)h(the)g -(shell,)630 3346 y(the)g(return)e(status)i(is)e(127.)150 +TeXDict begin 81 86 bop 150 -116 a Ft(Chapter)30 b(7:)41 +b(Job)30 b(Con)m(trol)2571 b(81)630 299 y(If)23 b Fq(jobsp)s(ec)28 +b Ft(is)c(giv)m(en,)i(output)d(is)h(restricted)g(to)g(information)g(ab) +s(out)f(that)h(job.)39 b(If)23 b Fq(jobsp)s(ec)630 408 +y Ft(is)30 b(not)h(supplied,)e(the)i(status)g(of)f(all)h(jobs)f(is)h +(listed.)630 552 y(If)g(the)g(`)p Fs(-x)p Ft(')g(option)h(is)f +(supplied,)g Fs(jobs)f Ft(replaces)i(an)m(y)f Fq(jobsp)s(ec)37 +b Ft(found)29 b(in)i Fq(command)k Ft(or)630 662 y Fq(argumen)m(ts)41 +b Ft(with)c(the)h(corresp)s(onding)e(pro)s(cess)h(group)f +Fl(id)p Ft(,)k(and)c(executes)j Fq(command)p Ft(,)630 +771 y(passing)30 b(it)h Fq(argumen)m(t)r Ft(s,)g(returning)f(its)g +(exit)i(status.)150 949 y Fs(kill)870 1093 y(kill)47 +b([-s)g Fj(sigspec)11 b Fs(])45 b([-n)i Fj(signum)11 +b Fs(])45 b([-)p Fj(sigspec)11 b Fs(])44 b Fj(jobspec)57 +b Fs(or)47 b Fj(pid)870 1202 y Fs(kill)g(-l)g([)p Fj(exit_status)11 +b Fs(])630 1346 y Ft(Send)22 b(a)i(signal)g(sp)s(eci\014ed)f(b)m(y)g +Fq(sigsp)s(ec)29 b Ft(or)24 b Fq(sign)m(um)f Ft(to)h(the)g(pro)s(cess)f +(named)g(b)m(y)g(job)g(sp)s(eci\014-)630 1456 y(cation)k +Fq(jobsp)s(ec)j Ft(or)25 b(pro)s(cess)g Fl(id)h Fq(pid)p +Ft(.)38 b Fq(sigsp)s(ec)31 b Ft(is)25 b(either)h(a)g(case-insensitiv)m +(e)i(signal)e(name)630 1565 y(suc)m(h)k(as)h Fs(SIGINT)d +Ft(\(with)j(or)f(without)h(the)f Fs(SIG)g Ft(pre\014x\))f(or)i(a)f +(signal)h(n)m(um)m(b)s(er;)f Fq(sign)m(um)g Ft(is)630 +1675 y(a)i(signal)g(n)m(um)m(b)s(er.)43 b(If)31 b Fq(sigsp)s(ec)37 +b Ft(and)31 b Fq(sign)m(um)g Ft(are)h(not)f(presen)m(t,)h +Fs(SIGTERM)e Ft(is)h(used.)43 b(The)630 1785 y(`)p Fs(-l)p +Ft(')34 b(option)g(lists)h(the)f(signal)h(names.)51 b(If)33 +b(an)m(y)i(argumen)m(ts)f(are)g(supplied)f(when)g(`)p +Fs(-l)p Ft(')h(is)630 1894 y(giv)m(en,)e(the)g(names)e(of)i(the)f +(signals)g(corresp)s(onding)f(to)i(the)f(argumen)m(ts)g(are)h(listed,)g +(and)630 2004 y(the)c(return)f(status)h(is)g(zero.)41 +b Fq(exit)p 1796 2004 28 4 v 41 w(status)32 b Ft(is)c(a)g(n)m(um)m(b)s +(er)f(sp)s(ecifying)g(a)i(signal)f(n)m(um)m(b)s(er)f(or)630 +2113 y(the)35 b(exit)h(status)f(of)g(a)g(pro)s(cess)g(terminated)g(b)m +(y)g(a)g(signal.)55 b(The)34 b(return)g(status)h(is)g(zero)630 +2223 y(if)c(at)h(least)g(one)g(signal)f(w)m(as)h(successfully)f(sen)m +(t,)h(or)f(non-zero)h(if)f(an)g(error)f(o)s(ccurs)h(or)g(an)630 +2333 y(in)m(v)-5 b(alid)31 b(option)g(is)f(encoun)m(tered.)150 +2510 y Fs(wait)870 2654 y(wait)47 b([)p Fj(jobspec)56 +b Fs(or)47 b Fj(pid)11 b Fs(])630 2798 y Ft(W)-8 b(ait)45 +b(un)m(til)e(the)g(c)m(hild)h(pro)s(cess)e(sp)s(eci\014ed)h(b)m(y)g +(pro)s(cess)f Fl(id)i Fq(pid)h Ft(or)e(job)g(sp)s(eci\014cation)630 +2907 y Fq(jobsp)s(ec)d Ft(exits)35 b(and)f(return)g(the)g(exit)i +(status)f(of)g(the)g(last)g(command)f(w)m(aited)i(for.)53 +b(If)35 b(a)630 3017 y(job)g(sp)s(ec)f(is)h(giv)m(en,)i(all)f(pro)s +(cesses)f(in)f(the)h(job)g(are)g(w)m(aited)h(for.)54 +b(If)35 b(no)f(argumen)m(ts)i(are)630 3127 y(giv)m(en,)d(all)f(curren)m +(tly)f(activ)m(e)i(c)m(hild)f(pro)s(cesses)f(are)g(w)m(aited)h(for,)g +(and)e(the)i(return)e(status)630 3236 y(is)h(zero.)44 +b(If)30 b(neither)h Fq(jobsp)s(ec)36 b Ft(nor)31 b Fq(pid)i +Ft(sp)s(eci\014es)e(an)g(activ)m(e)i(c)m(hild)f(pro)s(cess)e(of)h(the)g +(shell,)630 3346 y(the)g(return)e(status)i(is)f(127.)150 3524 y Fs(disown)870 3667 y(disown)46 b([-ar])g([-h])h([)p -Fj(jobspec)56 b Fs(...)o(])630 3811 y Ft(Without)31 b(options,)g(eac)m -(h)i Fq(jobsp)s(ec)j Ft(is)31 b(remo)m(v)m(ed)h(from)f(the)h(table)f -(of)h(activ)m(e)g(jobs.)44 b(If)31 b(the)630 3921 y(`)p -Fs(-h)p Ft(')36 b(option)g(is)g(giv)m(en,)i(the)f(job)f(is)g(not)g -(remo)m(v)m(ed)i(from)e(the)h(table,)h(but)e(is)f(mark)m(ed)i(so)630 -4030 y(that)d Fs(SIGHUP)d Ft(is)i(not)g(sen)m(t)h(to)g(the)f(job)g(if)f -(the)i(shell)d(receiv)m(es)j(a)g Fs(SIGHUP)p Ft(.)47 +Fj(jobspec)56 b Fs(...)o(])630 3811 y Ft(Without)32 b(options,)g(eac)m +(h)h Fq(jobsp)s(ec)j Ft(is)c(remo)m(v)m(ed)g(from)f(the)h(table)g(of)g +(activ)m(e)h(jobs.)44 b(If)31 b(the)630 3921 y(`)p Fs(-h)p +Ft(')36 b(option)h(is)g(giv)m(en,)i(the)e(job)f(is)h(not)f(remo)m(v)m +(ed)i(from)e(the)h(table,)i(but)d(is)g(mark)m(ed)h(so)630 +4030 y(that)d Fs(SIGHUP)d Ft(is)j(not)f(sen)m(t)h(to)g(the)f(job)g(if)g +(the)h(shell)f(receiv)m(es)i(a)f Fs(SIGHUP)p Ft(.)47 b(If)33 b Fq(jobsp)s(ec)38 b Ft(is)630 4140 y(not)32 -b(presen)m(t,)f(and)g(neither)g(the)g(`)p Fs(-a)p Ft(')g(nor)g(`)p -Fs(-r)p Ft(')g(option)g(is)g(supplied,)d(the)k(curren)m(t)f(job)g(is) +b(presen)m(t,)f(and)g(neither)h(the)f(`)p Fs(-a)p Ft(')g(nor)g(`)p +Fs(-r)p Ft(')g(option)h(is)g(supplied,)e(the)i(curren)m(t)f(job)g(is) 630 4249 y(used.)58 b(If)36 b(no)g Fq(jobsp)s(ec)41 b -Ft(is)35 b(supplied,)g(the)i(`)p Fs(-a)p Ft(')f(option)g(means)g(to)h +Ft(is)36 b(supplied,)h(the)g(`)p Fs(-a)p Ft(')f(option)h(means)f(to)h (remo)m(v)m(e)h(or)e(mark)g(all)630 4359 y(jobs;)28 b(the)f(`)p -Fs(-r)p Ft(')g(option)f(without)g(a)h Fq(jobsp)s(ec)32 -b Ft(argumen)m(t)27 b(restricts)g(op)s(eration)f(to)i(running)630 +Fs(-r)p Ft(')g(option)g(without)g(a)g Fq(jobsp)s(ec)32 +b Ft(argumen)m(t)27 b(restricts)h(op)s(eration)f(to)h(running)630 4468 y(jobs.)150 4646 y Fs(suspend)870 4790 y(suspend)46 -b([-f])630 4934 y Ft(Susp)s(end)28 b(the)i(execution)h(of)g(this)e -(shell)f(un)m(til)h(it)h(receiv)m(es)h(a)g Fs(SIGCONT)e -Ft(signal.)39 b(The)30 b(`)p Fs(-f)p Ft(')630 5043 y(option)g(means)g -(to)h(susp)s(end)d(ev)m(en)j(if)f(the)g(shell)f(is)g(a)i(login)e -(shell.)275 5230 y(When)h(job)f(con)m(trol)i(is)e(not)i(activ)m(e,)h -(the)e Fs(kill)f Ft(and)h Fs(wait)f Ft(builtins)d(do)k(not)h(accept)h +b([-f])630 4934 y Ft(Susp)s(end)28 b(the)i(execution)i(of)f(this)f +(shell)g(un)m(til)h(it)g(receiv)m(es)h(a)f Fs(SIGCONT)e +Ft(signal.)41 b(The)30 b(`)p Fs(-f)p Ft(')630 5043 y(option)h(means)f +(to)h(susp)s(end)d(ev)m(en)j(if)g(the)f(shell)h(is)f(a)h(login)g +(shell.)275 5230 y(When)f(job)f(con)m(trol)j(is)e(not)h(activ)m(e,)i +(the)d Fs(kill)f Ft(and)h Fs(wait)f Ft(builtins)g(do)h(not)h(accept)h Fq(jobsp)s(ec)j Ft(argu-)150 5340 y(men)m(ts.)41 b(They)30 -b(m)m(ust)g(b)s(e)g(supplied)d(pro)s(cess)j Fl(id)p Ft(s.)p -eop +b(m)m(ust)g(b)s(e)g(supplied)f(pro)s(cess)h Fl(id)p Ft(s.)p +eop end %%Page: 82 88 -82 87 bop 150 -116 a Ft(82)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fr(7.3)68 b(Job)45 b(Con)l(trol)h(V)-11 b(ariables)150 -543 y Fs(auto_resume)630 653 y Ft(This)30 b(v)-5 b(ariable)30 -b(con)m(trols)h(ho)m(w)h(the)f(shell)f(in)m(teracts)i(with)e(the)i -(user)e(and)h(job)g(con)m(trol.)44 b(If)630 762 y(this)27 -b(v)-5 b(ariable)28 b(exists)g(then)g(single)f(w)m(ord)h(simple)f -(commands)h(without)f(redirections)h(are)630 872 y(treated)j(as)g -(candidates)e(for)h(resumption)f(of)h(an)g(existing)f(job.)41 -b(There)29 b(is)g(no)i(am)m(biguit)m(y)630 981 y(allo)m(w)m(ed;)d(if)e -(there)h(is)f(more)h(than)f(one)h(job)g(b)s(eginning)d(with)h(the)i -(string)f(t)m(yp)s(ed,)h(then)g(the)630 1091 y(most)j(recen)m(tly)g -(accessed)g(job)f(will)e(b)s(e)i(selected.)41 b(The)29 -b(name)g(of)h(a)g(stopp)s(ed)e(job,)i(in)e(this)630 1200 -y(con)m(text,)i(is)d(the)h(command)g(line)e(used)h(to)h(start)g(it.)40 -b(If)27 b(this)g(v)-5 b(ariable)26 b(is)h(set)h(to)h(the)e(v)-5 -b(alue)630 1310 y(`)p Fs(exact)p Ft(',)33 b(the)g(string)f(supplied)e -(m)m(ust)j(matc)m(h)g(the)h(name)f(of)g(a)g(stopp)s(ed)f(job)h -(exactly;)i(if)630 1420 y(set)29 b(to)h(`)p Fs(substring)p -Ft(',)d(the)i(string)f(supplied)d(needs)k(to)g(matc)m(h)h(a)f -(substring)e(of)i(the)g(name)630 1529 y(of)38 b(a)f(stopp)s(ed)g(job.) -62 b(The)37 b(`)p Fs(substring)p Ft(')e(v)-5 b(alue)37 -b(pro)m(vides)f(functionalit)m(y)g(analogous)i(to)630 -1639 y(the)g(`)p Fs(\045?)p Ft(')f(job)h Fl(id)f Ft(\(see)i(Section)e -(7.1)i([Job)f(Con)m(trol)f(Basics],)j(page)e(79\).)64 +TeXDict begin 82 87 bop 150 -116 a Ft(82)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(7.3)68 b(Job)45 +b(Con)l(trol)h(V)-11 b(ariables)150 543 y Fs(auto_resume)630 +653 y Ft(This)31 b(v)-5 b(ariable)32 b(con)m(trols)g(ho)m(w)g(the)f +(shell)h(in)m(teracts)h(with)e(the)h(user)e(and)h(job)g(con)m(trol.)45 +b(If)630 762 y(this)28 b(v)-5 b(ariable)30 b(exists)f(then)f(single)h +(w)m(ord)f(simple)h(commands)f(without)g(redirections)i(are)630 +872 y(treated)h(as)g(candidates)f(for)g(resumption)g(of)g(an)g +(existing)h(job.)41 b(There)29 b(is)h(no)h(am)m(biguit)m(y)630 +981 y(allo)m(w)m(ed;)f(if)d(there)g(is)g(more)g(than)f(one)h(job)g(b)s +(eginning)f(with)g(the)h(string)g(t)m(yp)s(ed,)g(then)g(the)630 +1091 y(most)j(recen)m(tly)h(accessed)f(job)f(will)h(b)s(e)f(selected.) +42 b(The)29 b(name)g(of)h(a)g(stopp)s(ed)e(job,)i(in)f(this)630 +1200 y(con)m(text,)h(is)e(the)g(command)g(line)g(used)f(to)h(start)g +(it.)41 b(If)27 b(this)h(v)-5 b(ariable)28 b(is)g(set)g(to)h(the)e(v)-5 +b(alue)630 1310 y(`)p Fs(exact)p Ft(',)33 b(the)g(string)g(supplied)f +(m)m(ust)h(matc)m(h)g(the)h(name)f(of)g(a)g(stopp)s(ed)f(job)h +(exactly;)j(if)630 1420 y(set)29 b(to)h(`)p Fs(substring)p +Ft(',)d(the)i(string)g(supplied)e(needs)i(to)g(matc)m(h)h(a)f +(substring)f(of)h(the)g(name)630 1529 y(of)38 b(a)f(stopp)s(ed)g(job.) +62 b(The)37 b(`)p Fs(substring)p Ft(')e(v)-5 b(alue)38 +b(pro)m(vides)f(functionalit)m(y)i(analogous)g(to)630 +1639 y(the)f(`)p Fs(\045?)p Ft(')f(job)h Fl(id)f Ft(\(see)i(Section)f +(7.1)h([Job)f(Con)m(trol)g(Basics],)j(page)d(79\).)64 b(If)37 b(set)h(to)h(an)m(y)630 1748 y(other)32 b(v)-5 -b(alue,)31 b(the)h(supplied)c(string)j(m)m(ust)g(b)s(e)g(a)h(pre\014x)f +b(alue,)32 b(the)g(supplied)e(string)i(m)m(ust)f(b)s(e)g(a)h(pre\014x)f (of)h(a)g(stopp)s(ed)e(job's)i(name;)g(this)630 1858 -y(pro)m(vides)d(functionalit)m(y)g(analogous)i(to)g(the)g(`)p -Fs(\045)p Ft(')f(job)g Fl(id)p Ft(.)p eop +y(pro)m(vides)e(functionalit)m(y)i(analogous)g(to)f(the)g(`)p +Fs(\045)p Ft(')f(job)g Fl(id)p Ft(.)p eop end %%Page: 83 89 -83 88 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(83)150 299 y Fo(8)80 b(Command)52 -b(Line)i(Editing)275 539 y Ft(This)38 b(c)m(hapter)i(describ)s(es)f -(the)h(basic)f(features)h(of)h(the)f Fl(gnu)f Ft(command)h(line)e -(editing)h(in)m(terface.)150 648 y(Command)25 b(line)f(editing)g(is)h -(pro)m(vided)f(b)m(y)i(the)g(Readline)e(library)-8 b(,)25 -b(whic)m(h)g(is)g(used)g(b)m(y)g(sev)m(eral)h(di\013eren)m(t)150 -758 y(programs,)k(including)d(Bash.)150 1020 y Fr(8.1)68 +TeXDict begin 83 88 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(83)150 299 y Fo(8)80 +b(Command)54 b(Line)f(Editing)275 539 y Ft(This)39 b(c)m(hapter)h +(describ)s(es)g(the)g(basic)g(features)g(of)h(the)f Fl(gnu)f +Ft(command)h(line)g(editing)h(in)m(terface.)150 648 y(Command)25 +b(line)h(editing)g(is)g(pro)m(vided)f(b)m(y)h(the)g(Readline)g(library) +-8 b(,)27 b(whic)m(h)f(is)g(used)f(b)m(y)g(sev)m(eral)i(di\013eren)m(t) +150 758 y(programs,)j(including)g(Bash.)150 1020 y Fr(8.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)275 1266 -y Ft(The)29 b(follo)m(wing)g(paragraphs)h(describ)s(e)f(the)h(notation) -h(used)e(to)j(represen)m(t)e(k)m(eystrok)m(es.)275 1402 -y(The)i(text)j Fj(C-k)d Ft(is)h(read)g(as)h(`Con)m(trol-K')f(and)g -(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)3663 +y Ft(The)29 b(follo)m(wing)j(paragraphs)e(describ)s(e)g(the)g(notation) +i(used)d(to)j(represen)m(t)e(k)m(eystrok)m(es.)275 1402 +y(The)i(text)j Fj(C-k)d Ft(is)i(read)f(as)h(`Con)m(trol-K')g(and)f +(describ)s(es)g(the)g(c)m(haracter)i(pro)s(duced)d(when)g(the)3663 1399 y Fg(h)p 3687 1346 38 4 v 3687 1402 a Ff(k)p 3687 -1417 V 3720 1399 a Fg(i)150 1512 y Ft(k)m(ey)f(is)f(pressed)f(while)f -(the)j(Con)m(trol)f(k)m(ey)h(is)f(depressed.)275 1648 -y(The)h(text)i Fj(M-k)e Ft(is)g(read)g(as)i(`Meta-K')g(and)f(describ)s -(es)e(the)i(c)m(haracter)h(pro)s(duced)e(when)f(the)i(Meta)150 -1757 y(k)m(ey)d(\(if)f(y)m(ou)h(ha)m(v)m(e)g(one\))g(is)f(depressed,)g +1417 V 3720 1399 a Fg(i)150 1512 y Ft(k)m(ey)f(is)g(pressed)e(while)h +(the)h(Con)m(trol)g(k)m(ey)g(is)g(depressed.)275 1648 +y(The)g(text)i Fj(M-k)e Ft(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s +(es)f(the)h(c)m(haracter)h(pro)s(duced)e(when)f(the)i(Meta)150 +1757 y(k)m(ey)d(\(if)g(y)m(ou)g(ha)m(v)m(e)g(one\))g(is)g(depressed,)f (and)f(the)1859 1754 y Fg(h)p 1883 1701 V 1883 1757 a -Ff(k)p 1883 1773 V 1916 1754 a Fg(i)1974 1757 y Ft(k)m(ey)j(is)d -(pressed.)39 b(The)28 b(Meta)i(k)m(ey)f(is)f(lab)s(eled)3558 +Ff(k)p 1883 1773 V 1916 1754 a Fg(i)1974 1757 y Ft(k)m(ey)j(is)e +(pressed.)39 b(The)28 b(Meta)i(k)m(ey)f(is)g(lab)s(eled)3558 1754 y Fg(h)p 3582 1701 143 4 v 3582 1757 a Ff(AL)-6 b(T)p 3582 1773 V 3720 1754 a Fg(i)150 1867 y Ft(on)26 -b(man)m(y)g(k)m(eyb)s(oards.)39 b(On)26 b(k)m(eyb)s(oards)g(with)f(t)m -(w)m(o)i(k)m(eys)g(lab)s(eled)2425 1864 y Fg(h)p 2450 +b(man)m(y)g(k)m(eyb)s(oards.)39 b(On)26 b(k)m(eyb)s(oards)g(with)g(t)m +(w)m(o)h(k)m(eys)g(lab)s(eled)2425 1864 y Fg(h)p 2450 1811 V 2450 1867 a Ff(AL)-6 b(T)p 2450 1882 V 2587 1864 -a Fg(i)2643 1867 y Ft(\(usually)25 b(to)i(either)e(side)g(of)i(the)150 +a Fg(i)2643 1867 y Ft(\(usually)27 b(to)g(either)f(side)g(of)h(the)150 1977 y(space)32 b(bar\),)g(the)775 1974 y Fg(h)p 799 1921 V 799 1977 a Ff(AL)-6 b(T)p 799 1992 V 937 1974 -a Fg(i)998 1977 y Ft(on)32 b(the)f(left)g(side)g(is)f(generally)h(set)g +a Fg(i)998 1977 y Ft(on)32 b(the)f(left)h(side)g(is)f(generally)i(set)e (to)i(w)m(ork)e(as)h(a)f(Meta)i(k)m(ey)-8 b(.)45 b(The)3393 1974 y Fg(h)p 3417 1921 V 3417 1977 a Ff(AL)-6 b(T)p 3417 1992 V 3555 1974 a Fg(i)3616 1977 y Ft(k)m(ey)150 -2086 y(on)33 b(the)h(righ)m(t)f(ma)m(y)h(also)f(b)s(e)g(con\014gured)f +2086 y(on)33 b(the)h(righ)m(t)g(ma)m(y)g(also)g(b)s(e)f(con\014gured)f (to)i(w)m(ork)g(as)g(a)f(Meta)i(k)m(ey)f(or)g(ma)m(y)g(b)s(e)e -(con\014gured)h(as)h(some)150 2196 y(other)d(mo)s(di\014er,)d(suc)m(h)i -(as)h(a)g(Comp)s(ose)f(k)m(ey)h(for)f(t)m(yping)g(accen)m(ted)i(c)m +(con\014gured)h(as)h(some)150 2196 y(other)d(mo)s(di\014er,)e(suc)m(h)h +(as)h(a)g(Comp)s(ose)f(k)m(ey)h(for)f(t)m(yping)h(accen)m(ted)h(c)m (haracters.)275 2332 y(If)21 b(y)m(ou)h(do)g(not)g(ha)m(v)m(e)h(a)f (Meta)h(or)1388 2329 y Fg(h)p 1412 2276 V 1412 2332 a Ff(AL)-6 b(T)p 1412 2348 V 1550 2329 a Fg(i)1601 2332 -y Ft(k)m(ey)e(,)25 b(or)d(another)g(k)m(ey)h(w)m(orking)e(as)h(a)g +y Ft(k)m(ey)e(,)25 b(or)d(another)g(k)m(ey)h(w)m(orking)f(as)g(a)g (Meta)h(k)m(ey)-8 b(,)25 b(the)d(iden)m(tical)150 2442 y(k)m(eystrok)m(e)i(can)f(b)s(e)f(generated)i(b)m(y)e(t)m(yping)1619 2439 y Fg(h)p 1643 2386 139 4 v 1643 2442 a Ff(ESC)p 1643 2457 V 1777 2439 a Fg(i)1829 2442 y Fm(\014rst)p Ft(,)j(and)d(then)g(t)m(yping)2678 2439 y Fg(h)p 2703 2386 38 4 v 2703 2442 a Ff(k)p 2703 2457 V 2736 2439 -a Fg(i)2765 2442 y Ft(.)38 b(Either)22 b(pro)s(cess)g(is)f(kno)m(wn)150 -2551 y(as)31 b Fq(metafying)38 b Ft(the)850 2548 y Fg(h)p +a Fg(i)2765 2442 y Ft(.)38 b(Either)23 b(pro)s(cess)f(is)g(kno)m(wn)150 +2551 y(as)31 b Fq(metafying)39 b Ft(the)850 2548 y Fg(h)p 874 2495 V 874 2551 a Ff(k)p 874 2567 V 907 2548 a Fg(i)968 2551 y Ft(k)m(ey)-8 b(.)275 2688 y(The)39 b(text)j Fj(M-C-k)d -Ft(is)g(read)h(as)h(`Meta-Con)m(trol-k')i(and)c(describ)s(es)g(the)h(c) -m(haracter)i(pro)s(duced)d(b)m(y)150 2797 y Fq(metafying)f -Fj(C-k)p Ft(.)275 2934 y(In)e(addition,)h(sev)m(eral)g(k)m(eys)g(ha)m -(v)m(e)h(their)e(o)m(wn)h(names.)60 b(Sp)s(eci\014cally)-8 +Ft(is)h(read)g(as)h(`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g +(c)m(haracter)i(pro)s(duced)d(b)m(y)150 2797 y Fq(metafying)g +Fj(C-k)p Ft(.)275 2934 y(In)d(addition,)j(sev)m(eral)f(k)m(eys)f(ha)m +(v)m(e)h(their)f(o)m(wn)g(names.)60 b(Sp)s(eci\014cally)-8 b(,)2768 2931 y Fg(h)p 2792 2878 146 4 v 2792 2934 a Ff(DEL)p 2792 2949 V 2934 2931 a Fg(i)2964 2934 y Ft(,)3028 2931 y Fg(h)p 3052 2878 139 4 v 3052 2934 a Ff(ESC)p @@ -8755,15 +10460,15 @@ V 3695 2931 a Fg(i)3725 2934 y Ft(,)150 3040 y Fg(h)p 174 2987 151 4 v 174 3043 a Ff(RET)p 174 3059 V 321 3040 a Fg(i)351 3043 y Ft(,)47 b(and)612 3040 y Fg(h)p 637 2987 148 4 v 637 3043 a Ff(T)-6 b(AB)p 637 3059 V 780 -3040 a Fg(i)853 3043 y Ft(all)43 b(stand)g(for)g(themselv)m(es)h(when)e -(seen)i(in)e(this)g(text,)48 b(or)43 b(in)f(an)i(init)d(\014le)i(\(see) -150 3153 y(Section)36 b(8.3)h([Readline)e(Init)g(File],)i(page)g(86\).) -59 b(If)36 b(y)m(our)g(k)m(eyb)s(oard)g(lac)m(ks)g(a)2897 +3040 a Fg(i)853 3043 y Ft(all)45 b(stand)e(for)g(themselv)m(es)i(when)d +(seen)i(in)f(this)g(text,)48 b(or)43 b(in)g(an)h(init)f(\014le)h(\(see) +150 3153 y(Section)37 b(8.3)g([Readline)g(Init)f(File],)j(page)e(86\).) +59 b(If)36 b(y)m(our)g(k)m(eyb)s(oard)g(lac)m(ks)h(a)2897 3150 y Fg(h)p 2921 3097 144 4 v 2921 3153 a Ff(LFD)p 2921 3168 V 3061 3150 a Fg(i)3127 3153 y Ft(k)m(ey)-8 b(,)39 b(t)m(yping)3604 3150 y Fg(h)p 3628 3097 97 4 v 3628 3153 a Ff(C-j)p 3628 3168 V 3720 3150 a Fg(i)150 -3262 y Ft(will)27 b(pro)s(duce)h(the)i(desired)e(c)m(haracter.)42 +3262 y Ft(will)30 b(pro)s(duce)e(the)i(desired)f(c)m(haracter.)42 b(The)1748 3259 y Fg(h)p 1772 3206 151 4 v 1772 3262 a Ff(RET)p 1772 3278 V 1919 3259 a Fg(i)1978 3262 y Ft(k)m(ey)30 b(ma)m(y)g(b)s(e)f(lab)s(eled)2770 3259 y Fg(h)p 2794 @@ -8772,642 +10477,650 @@ b(ma)m(y)g(b)s(e)f(lab)s(eled)2770 3259 y Fg(h)p 2794 3206 172 4 v 3201 3262 a Ff(En)n(ter)p 3201 3278 V 3368 3259 a Fg(i)3427 3262 y Ft(on)h(some)150 3372 y(k)m(eyb)s(oards.)150 3634 y Fr(8.2)68 b(Readline)47 b(In)l(teraction)275 3880 -y Ft(Often)24 b(during)f(an)i(in)m(teractiv)m(e)h(session)f(y)m(ou)g(t) -m(yp)s(e)h(in)e(a)h(long)g(line)e(of)j(text,)h(only)e(to)g(notice)h -(that)g(the)150 3989 y(\014rst)32 b(w)m(ord)g(on)g(the)g(line)f(is)h -(missp)s(elled.)43 b(The)32 b(Readline)f(library)f(giv)m(es)i(y)m(ou)h -(a)g(set)g(of)f(commands)g(for)150 4099 y(manipulating)27 -b(the)j(text)h(as)f(y)m(ou)g(t)m(yp)s(e)g(it)f(in,)g(allo)m(wing)f(y)m -(ou)i(to)h(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing) -150 4209 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)28 -b(of)g(the)h(line.)38 b(Using)27 b(these)i(editing)e(commands,)h(y)m -(ou)h(mo)m(v)m(e)g(the)g(cursor)150 4318 y(to)35 b(the)f(place)h(that)f -(needs)g(correction,)i(and)e(delete)g(or)g(insert)g(the)g(text)h(of)g -(the)f(corrections.)53 b(Then,)150 4428 y(when)30 b(y)m(ou)i(are)f -(satis\014ed)f(with)g(the)h(line,)f(y)m(ou)i(simply)c(press)2320 +y Ft(Often)24 b(during)g(an)h(in)m(teractiv)m(e)j(session)e(y)m(ou)f(t) +m(yp)s(e)h(in)f(a)g(long)h(line)f(of)h(text,)h(only)f(to)f(notice)i +(that)f(the)150 3989 y(\014rst)32 b(w)m(ord)g(on)g(the)g(line)h(is)g +(missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g +(a)g(set)g(of)f(commands)g(for)150 4099 y(manipulating)e(the)g(text)h +(as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h +(just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 +4209 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 +b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m +(ou)h(mo)m(v)m(e)g(the)g(cursor)150 4318 y(to)35 b(the)f(place)i(that)e +(needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g +(the)f(corrections.)54 b(Then,)150 4428 y(when)30 b(y)m(ou)i(are)f +(satis\014ed)g(with)g(the)g(line,)h(y)m(ou)g(simply)e(press)2320 4425 y Fg(h)p 2344 4372 151 4 v 2344 4428 a Ff(RET)p 2344 4443 V 2491 4425 a Fg(i)2520 4428 y Ft(.)43 b(Y)-8 b(ou)32 b(do)f(not)g(ha)m(v)m(e)i(to)e(b)s(e)g(at)h(the)150 -4537 y(end)j(of)h(the)g(line)e(to)j(press)1126 4534 y +4537 y(end)j(of)h(the)g(line)g(to)h(press)1126 4534 y Fg(h)p 1150 4481 V 1150 4537 a Ff(RET)p 1150 4553 V 1297 -4534 a Fg(i)1327 4537 y Ft(;)h(the)e(en)m(tire)g(line)e(is)h(accepted)i -(regardless)e(of)h(the)g(lo)s(cation)g(of)g(the)150 4647 -y(cursor)30 b(within)e(the)i(line.)150 4875 y Fk(8.2.1)63 +4534 a Fg(i)1327 4537 y Ft(;)h(the)e(en)m(tire)h(line)f(is)g(accepted)h +(regardless)f(of)g(the)g(lo)s(cation)i(of)e(the)150 4647 +y(cursor)30 b(within)g(the)g(line.)150 4875 y Fk(8.2.1)63 b(Readline)40 b(Bare)h(Essen)m(tials)275 5121 y Ft(In)22 -b(order)g(to)i(en)m(ter)g(c)m(haracters)g(in)m(to)f(the)h(line,)f -(simply)d(t)m(yp)s(e)k(them.)38 b(The)22 b(t)m(yp)s(ed)h(c)m(haracter)i +b(order)g(to)i(en)m(ter)g(c)m(haracters)g(in)m(to)g(the)g(line,)h +(simply)d(t)m(yp)s(e)i(them.)38 b(The)22 b(t)m(yp)s(ed)h(c)m(haracter)i (app)s(ears)150 5230 y(where)32 b(the)h(cursor)e(w)m(as,)j(and)e(then)g -(the)h(cursor)e(mo)m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)46 -b(If)32 b(y)m(ou)h(mist)m(yp)s(e)f(a)150 5340 y(c)m(haracter,)g(y)m(ou) +(the)h(cursor)e(mo)m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 +b(If)32 b(y)m(ou)h(mist)m(yp)s(e)g(a)150 5340 y(c)m(haracter,)f(y)m(ou) f(can)g(use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and) -f(delete)i(the)g(mist)m(yp)s(ed)d(c)m(haracter.)p eop +f(delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)p eop +end %%Page: 84 90 -84 89 bop 150 -116 a Ft(84)2572 b(Bash)31 b(Reference)g(Man)m(ual)275 -299 y(Sometimes)f(y)m(ou)h(ma)m(y)h(mist)m(yp)s(e)d(a)j(c)m(haracter,)g -(and)e(not)i(notice)f(the)g(error)f(un)m(til)f(y)m(ou)i(ha)m(v)m(e)h(t) -m(yp)s(ed)150 408 y(sev)m(eral)d(other)g(c)m(haracters.)42 -b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h -Fj(C-b)d Ft(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)h(and)150 -518 y(then)g(correct)i(y)m(our)e(mistak)m(e.)41 b(Afterw)m(ards,)31 -b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)f -(with)f Fj(C-f)p Ft(.)275 679 y(When)j(y)m(ou)h(add)f(text)h(in)e(the)i -(middle)d(of)j(a)g(line,)f(y)m(ou)g(will)e(notice)j(that)g(c)m +TeXDict begin 84 89 bop 150 -116 a Ft(84)2572 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(Sometimes)g(y)m(ou)g(ma)m(y)h(mist)m +(yp)s(e)e(a)i(c)m(haracter,)g(and)e(not)i(notice)g(the)f(error)f(un)m +(til)h(y)m(ou)g(ha)m(v)m(e)h(t)m(yp)s(ed)150 408 y(sev)m(eral)e(other)f +(c)m(haracters.)42 b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h +Fj(C-b)d Ft(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 +518 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 +b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g +(with)f Fj(C-f)p Ft(.)275 679 y(When)i(y)m(ou)h(add)f(text)h(in)f(the)h +(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m (haracters)h(to)g(the)e(righ)m(t)150 789 y(of)d(the)g(cursor)f(are)h (`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h -(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)39 b(Lik)m(ewise,)150 -898 y(when)e(y)m(ou)g(delete)h(text)h(b)s(ehind)34 b(the)k(cursor,)h(c) -m(haracters)g(to)f(the)g(righ)m(t)f(of)h(the)g(cursor)e(are)i(`pulled) -150 1008 y(bac)m(k')24 b(to)f(\014ll)e(in)g(the)i(blank)e(space)j -(created)f(b)m(y)g(the)g(remo)m(v)-5 b(al)23 b(of)g(the)g(text.)39 -b(A)23 b(list)e(of)i(the)g(bare)f(essen)m(tials)150 1117 -y(for)30 b(editing)f(the)i(text)g(of)g(an)f(input)e(line)h(follo)m(ws.) +(that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 +898 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m +(haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled) +150 1008 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i +(created)f(b)m(y)g(the)g(remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 +b(A)23 b(list)g(of)g(the)g(bare)f(essen)m(tials)150 1117 +y(for)30 b(editing)h(the)g(text)g(of)g(an)f(input)f(line)i(follo)m(ws.) 150 1317 y Fj(C-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m (haracter.)150 1502 y Fj(C-f)336 b Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(one) h(c)m(haracter.)150 1685 y Fg(h)p 174 1632 146 4 v 174 1688 a Ff(DEL)p 174 1704 V 316 1685 a Fg(i)376 1688 y Ft(or)487 1685 y Fg(h)p 512 1632 317 4 v 512 1688 a Ff(Bac)n(kspace)p -512 1704 V 824 1685 a Fg(i)630 1798 y Ft(Delete)h(the)e(c)m(haracter)i -(to)f(the)g(left)f(of)g(the)h(cursor.)150 1984 y Fj(C-d)336 -b Ft(Delete)32 b(the)e(c)m(haracter)i(underneath)d(the)i(cursor.)150 -2170 y(Prin)m(ting)e(c)m(haracters)630 2279 y(Insert)h(the)g(c)m -(haracter)i(in)m(to)f(the)f(line)f(at)i(the)g(cursor.)150 -2465 y Fj(C-_)e Ft(or)i Fj(C-x)e(C-u)630 2575 y Ft(Undo)k(the)h(last)f -(editing)f(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)f(the)h(w)m(a) +512 1704 V 824 1685 a Fg(i)630 1798 y Ft(Delete)i(the)d(c)m(haracter)i +(to)f(the)g(left)g(of)f(the)h(cursor.)150 1984 y Fj(C-d)336 +b Ft(Delete)33 b(the)d(c)m(haracter)i(underneath)d(the)i(cursor.)150 +2170 y(Prin)m(ting)g(c)m(haracters)630 2279 y(Insert)f(the)g(c)m +(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g(cursor.)150 +2465 y Fj(C-_)e Ft(or)i Fj(C-x)e(C-u)630 2575 y Ft(Undo)k(the)h(last)g +(editing)g(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a) m(y)i(bac)m(k)f(to)g(an)g(empt)m(y)630 2684 y(line.)150 -2883 y(\(Dep)s(ending)f(on)h(y)m(our)g(con\014guration,)g(the)1726 +2883 y(\(Dep)s(ending)g(on)g(y)m(our)g(con\014guration,)h(the)1726 2880 y Fg(h)p 1750 2827 V 1750 2883 a Ff(Bac)n(kspace)p -1750 2899 V 2063 2880 a Fg(i)2127 2883 y Ft(k)m(ey)h(b)s(e)e(set)h(to)h -(delete)f(the)g(c)m(haracter)i(to)f(the)150 2993 y(left)e(of)g(the)g +1750 2899 V 2063 2880 a Fg(i)2127 2883 y Ft(k)m(ey)g(b)s(e)e(set)h(to)h +(delete)g(the)f(c)m(haracter)i(to)f(the)150 2993 y(left)f(of)f(the)g (cursor)f(and)h(the)1192 2990 y Fg(h)p 1216 2937 146 4 v 1216 2993 a Ff(DEL)p 1216 3008 V 1358 2990 a Fg(i)1421 -2993 y Ft(k)m(ey)g(set)h(to)g(delete)f(the)g(c)m(haracter)i(underneath) +2993 y Ft(k)m(ey)g(set)h(to)g(delete)g(the)f(c)m(haracter)i(underneath) c(the)i(cursor,)h(lik)m(e)150 3103 y Fj(C-d)p Ft(,)c(rather)g(than)g -(the)h(c)m(haracter)h(to)f(the)f(left)g(of)h(the)f(cursor.\))150 -3380 y Fk(8.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)g(Commands)275 -3650 y Ft(The)25 b(ab)s(o)m(v)m(e)i(table)f(describ)s(es)f(the)h(most)h -(basic)e(k)m(eystrok)m(es)j(that)f(y)m(ou)f(need)g(in)f(order)g(to)i -(do)f(editing)150 3760 y(of)g(the)f(input)f(line.)37 -b(F)-8 b(or)27 b(y)m(our)e(con)m(v)m(enience,)j(man)m(y)d(other)h -(commands)f(ha)m(v)m(e)i(b)s(een)e(added)g(in)f(addition)150 +(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g(the)f(cursor.\))150 +3380 y Fk(8.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)h(Commands)275 +3650 y Ft(The)25 b(ab)s(o)m(v)m(e)i(table)g(describ)s(es)f(the)g(most)h +(basic)f(k)m(eystrok)m(es)i(that)f(y)m(ou)f(need)g(in)g(order)f(to)i +(do)f(editing)150 3760 y(of)g(the)f(input)g(line.)39 +b(F)-8 b(or)27 b(y)m(our)e(con)m(v)m(enience,)k(man)m(y)c(other)h +(commands)f(ha)m(v)m(e)i(b)s(een)e(added)g(in)g(addition)150 3869 y(to)33 b Fj(C-b)p Ft(,)e Fj(C-f)p Ft(,)h Fj(C-d)p Ft(,)g(and)1043 3866 y Fg(h)p 1067 3813 V 1067 3869 a Ff(DEL)p 1067 3885 V 1209 3866 a Fg(i)1239 3869 y Ft(.)45 -b(Here)33 b(are)f(some)g(commands)g(for)g(mo)m(ving)g(more)g(rapidly)d -(ab)s(out)j(the)150 3979 y(line.)150 4178 y Fj(C-a)336 +b(Here)33 b(are)f(some)g(commands)g(for)g(mo)m(ving)h(more)f(rapidly)f +(ab)s(out)h(the)150 3979 y(line.)150 4178 y Fj(C-a)336 b Ft(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(line.)150 4364 y Fj(C-e)336 b Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h (line.)150 4550 y Fj(M-f)336 b Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m -(ord,)f(where)g(a)h(w)m(ord)f(is)f(comp)s(osed)h(of)h(letters)g(and)e +(ord,)f(where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d (digits.)150 4736 y Fj(M-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a) -g(w)m(ord.)150 4922 y Fj(C-l)336 b Ft(Clear)30 b(the)g(screen,)h -(reprin)m(ting)d(the)j(curren)m(t)f(line)f(at)i(the)f(top.)275 -5121 y(Notice)25 b(ho)m(w)g Fj(C-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h -(c)m(haracter,)j(while)23 b Fj(M-f)g Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h -(w)m(ord.)39 b(It)24 b(is)g(a)h(lo)s(ose)150 5230 y(con)m(v)m(en)m -(tion)31 b(that)g(con)m(trol)f(k)m(eystrok)m(es)i(op)s(erate)e(on)g(c)m -(haracters)h(while)d(meta)j(k)m(eystrok)m(es)h(op)s(erate)e(on)150 -5340 y(w)m(ords.)p eop +g(w)m(ord.)150 4922 y Fj(C-l)336 b Ft(Clear)31 b(the)f(screen,)h +(reprin)m(ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275 +5121 y(Notice)c(ho)m(w)f Fj(C-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m +(haracter,)j(while)d Fj(M-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m +(ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 5230 y(con)m(v)m(en)m(tion)32 +b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m +(haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 +5340 y(w)m(ords.)p eop end %%Page: 85 91 -85 90 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(85)150 299 y Fk(8.2.3)63 b(Readline)40 -b(Killing)i(Commands)275 566 y Fq(Killing)f Ft(text)e(means)e(to)h -(delete)f(the)h(text)g(from)f(the)g(line,)h(but)f(to)h(sa)m(v)m(e)h(it) -d(a)m(w)m(a)m(y)k(for)d(later)g(use,)150 675 y(usually)32 -b(b)m(y)i Fq(y)m(anking)41 b Ft(\(re-inserting\))33 b(it)h(bac)m(k)h -(in)m(to)f(the)g(line.)50 b(\(`Cut')35 b(and)e(`paste')i(are)g(more)f -(recen)m(t)150 785 y(jargon)d(for)f(`kill')e(and)i(`y)m(ank'.\))275 -942 y(If)f(the)i(description)d(for)i(a)h(command)f(sa)m(ys)g(that)h(it) -f(`kills')e(text,)k(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou) -150 1052 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)e(a)i(di\013eren)m(t)f -(\(or)h(the)f(same\))h(place)g(later.)275 1209 y(When)23 -b(y)m(ou)g(use)g(a)h(kill)d(command,)j(the)g(text)g(is)e(sa)m(v)m(ed)j -(in)d(a)h Fq(kill-ring)p Ft(.)35 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h -(consecutiv)m(e)150 1318 y(kills)28 b(sa)m(v)m(e)33 b(all)d(of)h(the)g -(killed)e(text)j(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)e -(bac)m(k,)i(y)m(ou)g(get)g(it)e(all.)41 b(The)150 1428 -y(kill)30 b(ring)h(is)g(not)i(line)e(sp)s(eci\014c;)h(the)h(text)g -(that)g(y)m(ou)g(killed)c(on)k(a)f(previously)e(t)m(yp)s(ed)j(line)d -(is)i(a)m(v)-5 b(ailable)150 1537 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac) -m(k)g(later,)g(when)e(y)m(ou)i(are)g(t)m(yping)e(another)i(line.)275 -1695 y(Here)f(is)g(the)g(list)f(of)i(commands)f(for)g(killing)d(text.) -150 1888 y Fj(C-k)336 b Ft(Kill)28 b(the)i(text)i(from)e(the)g(curren)m -(t)g(cursor)g(p)s(osition)f(to)i(the)f(end)g(of)g(the)h(line.)150 -2070 y Fj(M-d)336 b Ft(Kill)24 b(from)i(the)g(cursor)g(to)h(the)f(end)g -(of)h(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)d(b)s(et)m(w)m(een)i(w)m -(ords,)g(to)g(the)630 2180 y(end)j(of)g(the)h(next)f(w)m(ord.)41 -b(W)-8 b(ord)30 b(b)s(oundaries)e(are)j(the)g(same)f(as)h(those)g(used) +TeXDict begin 85 90 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(85)150 299 y Fk(8.2.3)63 +b(Readline)40 b(Killing)i(Commands)275 566 y Fq(Killing)j +Ft(text)39 b(means)e(to)h(delete)g(the)g(text)g(from)f(the)g(line,)j +(but)d(to)h(sa)m(v)m(e)h(it)e(a)m(w)m(a)m(y)j(for)d(later)h(use,)150 +675 y(usually)c(b)m(y)g Fq(y)m(anking)42 b Ft(\(re-inserting\))35 +b(it)g(bac)m(k)g(in)m(to)g(the)f(line.)52 b(\(`Cut')35 +b(and)e(`paste')i(are)g(more)f(recen)m(t)150 785 y(jargon)d(for)f +(`kill')h(and)f(`y)m(ank'.\))275 942 y(If)f(the)i(description)f(for)g +(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g(text,)h(then)e(y)m(ou)g +(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 1052 y(can)g(get)g(the)g(text)g +(bac)m(k)g(in)f(a)h(di\013eren)m(t)g(\(or)g(the)f(same\))h(place)h +(later.)275 1209 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g +(text)g(is)f(sa)m(v)m(ed)i(in)e(a)g Fq(kill-ring)p Ft(.)39 +b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h(consecutiv)m(e)150 +1318 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g(killed)h(text)g +(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f(bac)m(k,)h(y)m +(ou)g(get)g(it)f(all.)43 b(The)150 1428 y(kill)33 b(ring)f(is)g(not)h +(line)g(sp)s(eci\014c;)g(the)g(text)g(that)g(y)m(ou)g(killed)f(on)h(a)f +(previously)g(t)m(yp)s(ed)h(line)f(is)h(a)m(v)-5 b(ailable)150 +1537 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac)m(k)g(later,)h(when)d(y)m(ou) +i(are)g(t)m(yping)f(another)h(line.)275 1695 y(Here)f(is)h(the)f(list)h +(of)g(commands)f(for)g(killing)h(text.)150 1888 y Fj(C-k)336 +b Ft(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g(cursor)g(p)s +(osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 2070 +y Fj(M-d)336 b Ft(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h +(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,) +g(to)g(the)630 2180 y(end)j(of)g(the)h(next)f(w)m(ord.)41 +b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) f(b)m(y)g Fj(M-f)p Ft(.)150 2362 y Fj(M-)246 2359 y Fg(h)p 270 2306 146 4 v 270 2362 a Ff(DEL)p 270 2377 V 411 2359 -a Fg(i)630 2362 y Ft(Kill)e(from)i(the)h(cursor)f(the)g(start)h(of)g -(the)g(curren)m(t)f(w)m(ord,)h(or,)f(if)g(b)s(et)m(w)m(een)h(w)m(ords,) -f(to)i(the)630 2471 y(start)39 b(of)f(the)h(previous)e(w)m(ord.)64 -b(W)-8 b(ord)39 b(b)s(oundaries)d(are)j(the)f(same)h(as)g(those)f(used) +a Fg(i)630 2362 y Ft(Kill)h(from)f(the)h(cursor)f(the)g(start)h(of)g +(the)g(curren)m(t)f(w)m(ord,)h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,) +f(to)i(the)630 2471 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 +b(W)-8 b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used) g(b)m(y)630 2581 y Fj(M-b)p Ft(.)150 2763 y Fj(C-w)336 -b Ft(Kill)29 b(from)h(the)i(cursor)e(to)i(the)g(previous)d(whitespace.) -43 b(This)30 b(is)g(di\013eren)m(t)h(than)g Fj(M-)3555 +b Ft(Kill)32 b(from)e(the)i(cursor)e(to)i(the)g(previous)e(whitespace.) +44 b(This)31 b(is)g(di\013eren)m(t)h(than)f Fj(M-)3555 2760 y Fg(h)p 3578 2707 V 3578 2763 a Ff(DEL)p 3578 2778 V 3720 2760 a Fg(i)630 2872 y Ft(b)s(ecause)f(the)h(w)m(ord)f(b)s -(oundaries)e(di\013er.)275 3066 y(Here)42 b(is)e(ho)m(w)i(to)g -Fq(y)m(ank)47 b Ft(the)42 b(text)g(bac)m(k)h(in)m(to)e(the)h(line.)72 -b(Y)-8 b(anking)42 b(means)f(to)h(cop)m(y)h(the)e(most-)150 -3175 y(recen)m(tly-killed)29 b(text)i(from)f(the)g(kill)f(bu\013er.)150 -3369 y Fj(C-y)336 b Ft(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)g -(killed)d(text)j(bac)m(k)g(in)m(to)g(the)f(bu\013er)g(at)h(the)f -(cursor.)150 3551 y Fj(M-y)336 b Ft(Rotate)36 b(the)f(kill-ring,)e(and) -h(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)e(do)i -(this)e(if)h(the)h(prior)630 3660 y(command)30 b(is)g -Fj(C-y)f Ft(or)h Fj(M-y)p Ft(.)150 3930 y Fk(8.2.4)63 +(oundaries)f(di\013er.)275 3066 y(Here)42 b(is)f(ho)m(w)h(to)g +Fq(y)m(ank)47 b Ft(the)42 b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 +b(Y)-8 b(anking)43 b(means)e(to)h(cop)m(y)h(the)e(most-)150 +3175 y(recen)m(tly-killed)33 b(text)e(from)f(the)g(kill)i(bu\013er.)150 +3369 y Fj(C-y)336 b Ft(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h +(killed)f(text)g(bac)m(k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f +(cursor.)150 3551 y Fj(M-y)336 b Ft(Rotate)36 b(the)f(kill-ring,)i(and) +d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h +(this)f(if)h(the)g(prior)630 3660 y(command)30 b(is)h +Fj(C-y)e Ft(or)h Fj(M-y)p Ft(.)150 3930 y Fk(8.2.4)63 b(Readline)40 b(Argumen)m(ts)275 4197 y Ft(Y)-8 b(ou)29 -b(can)h(pass)f(n)m(umeric)f(argumen)m(ts)h(to)h(Readline)e(commands.)40 -b(Sometimes)29 b(the)g(argumen)m(t)h(acts)150 4306 y(as)40 -b(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)e(it)h(is)f(the)h -Fm(sign)47 b Ft(of)41 b(the)f(argumen)m(t)g(that)h(is)e(signi\014can)m -(t.)69 b(If)40 b(y)m(ou)150 4416 y(pass)33 b(a)h(negativ)m(e)h(argumen) -m(t)f(to)g(a)g(command)f(whic)m(h)f(normally)g(acts)i(in)e(a)i(forw)m -(ard)f(direction,)g(that)150 4525 y(command)i(will)e(act)j(in)e(a)i -(bac)m(kw)m(ard)f(direction.)55 b(F)-8 b(or)36 b(example,)g(to)g(kill)d -(text)j(bac)m(k)g(to)g(the)g(start)g(of)150 4635 y(the)31 -b(line,)e(y)m(ou)h(migh)m(t)g(t)m(yp)s(e)h(`)p Fs(M--)f(C-k)p -Ft('.)275 4792 y(The)d(general)h(w)m(a)m(y)i(to)e(pass)g(n)m(umeric)f -(argumen)m(ts)i(to)g(a)f(command)g(is)f(to)i(t)m(yp)s(e)f(meta)i -(digits)c(b)s(efore)150 4902 y(the)31 b(command.)42 b(If)30 -b(the)h(\014rst)f(`digit')g(t)m(yp)s(ed)h(is)f(a)h(min)m(us)e(sign)h -(\(`)p Fs(-)p Ft('\),)i(then)f(the)g(sign)e(of)i(the)g(argumen)m(t)150 -5011 y(will)36 b(b)s(e)h(negativ)m(e.)65 b(Once)38 b(y)m(ou)h(ha)m(v)m -(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)e(to)h(get)i(the)e(argumen)m(t)h -(started,)i(y)m(ou)150 5121 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)e -(of)i(the)g(digits,)f(and)h(then)f(the)h(command.)40 -b(F)-8 b(or)30 b(example,)f(to)g(giv)m(e)h(the)f Fj(C-d)150 -5230 y Ft(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)e -(t)m(yp)s(e)i(`)p Fs(M-1)29 b(0)h(C-d)p Ft(',)39 b(whic)m(h)d(will)f -(delete)j(the)f(next)h(ten)150 5340 y(c)m(haracters)32 -b(on)e(the)h(input)d(line.)p eop +b(can)h(pass)f(n)m(umeric)g(argumen)m(ts)g(to)h(Readline)g(commands.)40 +b(Sometimes)30 b(the)f(argumen)m(t)h(acts)150 4306 y(as)40 +b(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g +Fm(sign)47 b Ft(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m +(t.)71 b(If)40 b(y)m(ou)150 4416 y(pass)33 b(a)h(negativ)m(e)i(argumen) +m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m +(ard)f(direction,)i(that)150 4525 y(command)g(will)h(act)g(in)f(a)h +(bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g +(text)g(bac)m(k)g(to)g(the)g(start)g(of)150 4635 y(the)31 +b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fs(M--)f(C-k)p +Ft('.)275 4792 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g +(argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i +(digits)e(b)s(efore)150 4902 y(the)j(command.)42 b(If)30 +b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h +(\(`)p Fs(-)p Ft('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 +5011 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m +(e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h +(started,)i(y)m(ou)150 5121 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f +(of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 +b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fj(C-d)150 +5230 y Ft(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f +(t)m(yp)s(e)h(`)p Fs(M-1)29 b(0)h(C-d)p Ft(',)39 b(whic)m(h)e(will)h +(delete)h(the)e(next)h(ten)150 5340 y(c)m(haracters)32 +b(on)e(the)h(input)e(line.)p eop end %%Page: 86 92 -86 91 bop 150 -116 a Ft(86)2572 b(Bash)31 b(Reference)g(Man)m(ual)150 -299 y Fk(8.2.5)63 b(Searc)m(hing)40 b(for)h(Commands)f(in)h(the)g -(History)275 548 y Ft(Readline)21 b(pro)m(vides)h(commands)g(for)h -(searc)m(hing)g(through)f(the)h(command)g(history)e(\(see)j(Section)f -(9.1)150 657 y([Bash)37 b(History)g(F)-8 b(acilities],)38 -b(page)f(109\))i(for)d(lines)f(con)m(taining)i(a)g(sp)s(eci\014ed)e -(string.)59 b(There)36 b(are)i(t)m(w)m(o)150 767 y(searc)m(h)31 -b(mo)s(des:)40 b Fq(incremen)m(tal)33 b Ft(and)d Fq(non-incremen)m(tal) -p Ft(.)275 906 y(Incremen)m(tal)25 b(searc)m(hes)i(b)s(egin)d(b)s -(efore)h(the)h(user)f(has)h(\014nished)d(t)m(yping)i(the)h(searc)m(h)g -(string.)38 b(As)26 b(eac)m(h)150 1015 y(c)m(haracter)37 -b(of)e(the)h(searc)m(h)g(string)e(is)h(t)m(yp)s(ed,)h(Readline)e -(displa)m(ys)g(the)h(next)h(en)m(try)g(from)e(the)i(history)150 -1125 y(matc)m(hing)24 b(the)g(string)f(t)m(yp)s(ed)h(so)g(far.)39 -b(An)23 b(incremen)m(tal)h(searc)m(h)g(requires)f(only)g(as)h(man)m(y)g -(c)m(haracters)i(as)150 1235 y(needed)i(to)i(\014nd)d(the)i(desired)e -(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m -(ard)f(in)e(the)i(history)f(for)g(a)i(particular)150 -1344 y(string,)f(t)m(yp)s(e)g Fj(C-r)p Ft(.)40 b(T)m(yping)28 -b Fj(C-s)h Ft(searc)m(hes)h(forw)m(ard)f(through)g(the)g(history)-8 -b(.)40 b(The)29 b(c)m(haracters)i(presen)m(t)150 1454 -y(in)37 b(the)h(v)-5 b(alue)37 b(of)h(the)g Fs(isearch-terminators)33 -b Ft(v)-5 b(ariable)37 b(are)h(used)f(to)i(terminate)f(an)g(incremen)m -(tal)150 1563 y(searc)m(h.)63 b(If)38 b(that)g(v)-5 b(ariable)36 -b(has)i(not)g(b)s(een)f(assigned)g(a)h(v)-5 b(alue,)39 -b(the)2578 1560 y Fg(h)p 2602 1507 139 4 v 2602 1563 -a Ff(ESC)p 2602 1579 V 2736 1560 a Fg(i)2804 1563 y Ft(and)e -Fj(C-J)f Ft(c)m(haracters)k(will)150 1673 y(terminate)i(an)h(incremen)m -(tal)e(searc)m(h.)78 b Fj(C-g)41 b Ft(will)f(ab)s(ort)i(an)g(incremen)m -(tal)g(searc)m(h)h(and)f(restore)h(the)150 1782 y(original)27 -b(line.)39 b(When)28 b(the)h(searc)m(h)h(is)e(terminated,)h(the)g -(history)f(en)m(try)h(con)m(taining)f(the)h(searc)m(h)h(string)150 -1892 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 2031 -y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)f(en)m(tries)g(in)e(the)i -(history)f(list,)g(t)m(yp)s(e)i Fj(C-r)e Ft(or)h Fj(C-s)f -Ft(as)h(appropriate.)42 b(This)150 2141 y(will)23 b(searc)m(h)k(bac)m -(kw)m(ard)g(or)f(forw)m(ard)g(in)e(the)j(history)e(for)h(the)g(next)g -(en)m(try)h(matc)m(hing)f(the)g(searc)m(h)h(string)150 +TeXDict begin 86 91 bop 150 -116 a Ft(86)2572 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fk(8.2.5)63 b(Searc)m(hing)40 +b(for)i(Commands)g(in)f(the)g(History)275 548 y Ft(Readline)23 +b(pro)m(vides)g(commands)f(for)h(searc)m(hing)h(through)e(the)h +(command)g(history)f(\(see)i(Section)g(9.1)150 657 y([Bash)37 +b(History)h(F)-8 b(acilities],)42 b(page)37 b(109\))i(for)d(lines)h +(con)m(taining)i(a)e(sp)s(eci\014ed)f(string.)60 b(There)36 +b(are)i(t)m(w)m(o)150 767 y(searc)m(h)31 b(mo)s(des:)40 +b Fq(incremen)m(tal)35 b Ft(and)30 b Fq(non-incremen)m(tal)p +Ft(.)275 906 y(Incremen)m(tal)c(searc)m(hes)h(b)s(egin)e(b)s(efore)g +(the)h(user)f(has)h(\014nished)e(t)m(yping)i(the)g(searc)m(h)g(string.) +39 b(As)26 b(eac)m(h)150 1015 y(c)m(haracter)37 b(of)e(the)h(searc)m(h) +g(string)f(is)h(t)m(yp)s(ed,)g(Readline)g(displa)m(ys)g(the)f(next)h +(en)m(try)g(from)e(the)i(history)150 1125 y(matc)m(hing)25 +b(the)f(string)g(t)m(yp)s(ed)g(so)g(far.)39 b(An)23 b(incremen)m(tal)j +(searc)m(h)e(requires)g(only)g(as)g(man)m(y)g(c)m(haracters)i(as)150 +1235 y(needed)i(to)i(\014nd)d(the)i(desired)f(history)h(en)m(try)-8 +b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history) +g(for)f(a)i(particular)150 1344 y(string,)g(t)m(yp)s(e)f +Fj(C-r)p Ft(.)40 b(T)m(yping)29 b Fj(C-s)g Ft(searc)m(hes)h(forw)m(ard) +f(through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m +(t)150 1454 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g +Fs(isearch-terminators)33 b Ft(v)-5 b(ariable)39 b(are)f(used)f(to)i +(terminate)g(an)f(incremen)m(tal)150 1563 y(searc)m(h.)63 +b(If)38 b(that)g(v)-5 b(ariable)38 b(has)g(not)g(b)s(een)f(assigned)h +(a)g(v)-5 b(alue,)40 b(the)2578 1560 y Fg(h)p 2602 1507 +139 4 v 2602 1563 a Ff(ESC)p 2602 1579 V 2736 1560 a +Fg(i)2804 1563 y Ft(and)d Fj(C-J)f Ft(c)m(haracters)k(will)150 +1673 y(terminate)j(an)g(incremen)m(tal)g(searc)m(h.)78 +b Fj(C-g)41 b Ft(will)i(ab)s(ort)f(an)g(incremen)m(tal)i(searc)m(h)f +(and)f(restore)h(the)150 1782 y(original)30 b(line.)41 +b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f(history)g(en)m +(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 1892 +y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 2031 y(T)-8 +b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h +(history)g(list,)h(t)m(yp)s(e)g Fj(C-r)e Ft(or)h Fj(C-s)f +Ft(as)h(appropriate.)43 b(This)150 2141 y(will)26 b(searc)m(h)h(bac)m +(kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g +(en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)150 2250 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i -(sequence)f(b)s(ound)e(to)i(a)g(Readline)f(command)g(will)e(terminate)j +(sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h (the)150 2360 y(searc)m(h)22 b(and)e(execute)j(that)e(command.)38 -b(F)-8 b(or)22 b(instance,)g(a)2127 2357 y Fg(h)p 2151 +b(F)-8 b(or)22 b(instance,)h(a)2127 2357 y Fg(h)p 2151 2304 151 4 v 2151 2360 a Ff(RET)p 2151 2375 V 2298 2357 -a Fg(i)2349 2360 y Ft(will)c(terminate)j(the)g(searc)m(h)h(and)e -(accept)150 2469 y(the)30 b(line,)e(thereb)m(y)h(executing)h(the)f -(command)g(from)g(the)h(history)e(list.)39 b(A)29 b(mo)m(v)m(emen)m(t)j -(command)d(will)150 2579 y(terminate)h(the)h(searc)m(h,)g(mak)m(e)h -(the)e(last)g(line)f(found)g(the)i(curren)m(t)f(line,)f(and)h(b)s(egin) -f(editing.)275 2718 y(Readline)k(remem)m(b)s(ers)h(the)h(last)g -(incremen)m(tal)f(searc)m(h)h(string.)53 b(If)34 b(t)m(w)m(o)j +a Fg(i)2349 2360 y Ft(will)e(terminate)h(the)f(searc)m(h)h(and)e +(accept)150 2469 y(the)30 b(line,)g(thereb)m(y)f(executing)i(the)e +(command)g(from)g(the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j +(command)d(will)150 2579 y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h +(the)e(last)h(line)g(found)e(the)i(curren)m(t)f(line,)h(and)f(b)s(egin) +g(editing.)275 2718 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h +(incremen)m(tal)g(searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j Fj(C-r)p Ft(s)c(are)i(t)m(yp)s(ed)g(without)150 2828 -y(an)m(y)i(in)m(terv)m(ening)e(c)m(haracters)j(de\014ning)d(a)i(new)f -(searc)m(h)h(string,)g(an)m(y)g(remem)m(b)s(ered)e(searc)m(h)i(string)f -(is)150 2937 y(used.)275 3076 y(Non-incremen)m(tal)46 -b(searc)m(hes)i(read)e(the)h(en)m(tire)g(searc)m(h)g(string)f(b)s -(efore)g(starting)g(to)i(searc)m(h)f(for)150 3186 y(matc)m(hing)c -(history)e(lines.)76 b(The)42 b(searc)m(h)h(string)f(ma)m(y)h(b)s(e)f +y(an)m(y)i(in)m(terv)m(ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f +(searc)m(h)h(string,)h(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g +(is)150 2937 y(used.)275 3076 y(Non-incremen)m(tal)48 +b(searc)m(hes)g(read)e(the)h(en)m(tire)h(searc)m(h)f(string)g(b)s +(efore)f(starting)h(to)h(searc)m(h)f(for)150 3186 y(matc)m(hing)d +(history)e(lines.)78 b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f (t)m(yp)s(ed)g(b)m(y)g(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 3295 y(con)m(ten)m(ts)32 b(of)f(the)f(curren)m(t)g(line.)150 3564 y Fr(8.3)68 b(Readline)47 b(Init)e(File)275 3813 -y Ft(Although)f(the)h(Readline)f(library)e(comes)k(with)e(a)i(set)f(of) -g(Emacs-lik)m(e)g(k)m(eybindings)e(installed)150 3922 -y(b)m(y)f(default,)h(it)f(is)e(p)s(ossible)f(to)k(use)e(a)h(di\013eren) -m(t)f(set)h(of)g(k)m(eybindings.)72 b(An)m(y)42 b(user)f(can)h -(customize)150 4032 y(programs)32 b(that)h(use)f(Readline)f(b)m(y)i -(putting)e(commands)h(in)f(an)h Fq(inputrc)k Ft(\014le,)d(con)m(v)m(en) -m(tionally)f(in)f(his)150 4142 y(home)e(directory)-8 -b(.)40 b(The)28 b(name)g(of)h(this)f(\014le)f(is)h(tak)m(en)i(from)e -(the)h(v)-5 b(alue)28 b(of)h(the)f(shell)f(v)-5 b(ariable)28 -b Fs(INPUTRC)p Ft(.)150 4251 y(If)i(that)h(v)-5 b(ariable)29 -b(is)g(unset,)i(the)f(default)g(is)f(`)p Fs(~/.inputrc)p -Ft('.)275 4390 y(When)g(a)h(program)f(whic)m(h)g(uses)g(the)h(Readline) -e(library)f(starts)j(up,)f(the)h(init)e(\014le)g(is)h(read,)h(and)f -(the)150 4500 y(k)m(ey)i(bindings)c(are)k(set.)275 4639 -y(In)26 b(addition,)g(the)h Fs(C-x)i(C-r)d Ft(command)h(re-reads)g -(this)e(init)g(\014le,)i(th)m(us)g(incorp)s(orating)e(an)m(y)i(c)m -(hanges)150 4748 y(that)k(y)m(ou)g(migh)m(t)f(ha)m(v)m(e)h(made)g(to)g +y Ft(Although)g(the)g(Readline)h(library)e(comes)i(with)f(a)h(set)f(of) +g(Emacs-lik)m(e)i(k)m(eybindings)e(installed)150 3922 +y(b)m(y)d(default,)i(it)f(is)e(p)s(ossible)g(to)i(use)e(a)h(di\013eren) +m(t)g(set)g(of)g(k)m(eybindings.)74 b(An)m(y)42 b(user)f(can)h +(customize)150 4032 y(programs)32 b(that)h(use)f(Readline)h(b)m(y)g +(putting)f(commands)g(in)g(an)g Fq(inputrc)37 b Ft(\014le,)d(con)m(v)m +(en)m(tionally)h(in)d(his)150 4142 y(home)d(directory)-8 +b(.)41 b(The)28 b(name)g(of)h(this)g(\014le)f(is)h(tak)m(en)h(from)e +(the)h(v)-5 b(alue)29 b(of)g(the)f(shell)h(v)-5 b(ariable)30 +b Fs(INPUTRC)p Ft(.)150 4251 y(If)g(that)h(v)-5 b(ariable)31 +b(is)f(unset,)h(the)f(default)h(is)f(`)p Fs(~/.inputrc)p +Ft('.)275 4390 y(When)f(a)h(program)f(whic)m(h)h(uses)f(the)h(Readline) +g(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h(read,)g(and)f +(the)150 4500 y(k)m(ey)i(bindings)e(are)i(set.)275 4639 +y(In)26 b(addition,)i(the)f Fs(C-x)i(C-r)d Ft(command)h(re-reads)g +(this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m +(hanges)150 4748 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g (it.)150 4982 y Fk(8.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)275 -5230 y Ft(There)33 b(are)h(only)f(a)h(few)f(basic)g(constructs)h(allo)m -(w)m(ed)f(in)g(the)h(Readline)e(init)g(\014le.)50 b(Blank)33 -b(lines)f(are)150 5340 y(ignored.)71 b(Lines)40 b(b)s(eginning)e(with)i -(a)h(`)p Fs(#)p Ft(')g(are)h(commen)m(ts.)73 b(Lines)40 -b(b)s(eginning)e(with)h(a)j(`)p Fs($)p Ft(')f(indicate)p -eop +5230 y Ft(There)33 b(are)h(only)g(a)g(few)f(basic)h(constructs)g(allo)m +(w)m(ed)h(in)f(the)g(Readline)g(init)g(\014le.)51 b(Blank)34 +b(lines)g(are)150 5340 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h +(a)g(`)p Fs(#)p Ft(')g(are)h(commen)m(ts.)73 b(Lines)41 +b(b)s(eginning)f(with)g(a)i(`)p Fs($)p Ft(')f(indicate)p +eop end %%Page: 87 93 -87 92 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(87)150 299 y(conditional)40 b(constructs)h -(\(see)i(Section)e(8.3.2)i([Conditional)c(Init)h(Constructs],)k(page)f -(91\).)74 b(Other)150 408 y(lines)29 b(denote)i(v)-5 -b(ariable)29 b(settings)h(and)g(k)m(ey)h(bindings.)150 -562 y(V)-8 b(ariable)30 b(Settings)630 671 y(Y)-8 b(ou)41 -b(can)g(mo)s(dify)d(the)j(run-time)e(b)s(eha)m(vior)g(of)i(Readline)e -(b)m(y)h(altering)f(the)i(v)-5 b(alues)40 b(of)630 781 -y(v)-5 b(ariables)32 b(in)g(Readline)h(using)f(the)h -Fs(set)g Ft(command)g(within)e(the)j(init)e(\014le.)49 -b(The)33 b(syn)m(tax)630 891 y(is)c(simple:)870 1022 +TeXDict begin 87 92 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(87)150 299 y(conditional)43 +b(constructs)e(\(see)i(Section)f(8.3.2)h([Conditional)f(Init)f +(Constructs],)j(page)f(91\).)74 b(Other)150 408 y(lines)31 +b(denote)g(v)-5 b(ariable)31 b(settings)g(and)f(k)m(ey)h(bindings.)150 +562 y(V)-8 b(ariable)32 b(Settings)630 671 y(Y)-8 b(ou)41 +b(can)g(mo)s(dify)e(the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g +(b)m(y)f(altering)h(the)g(v)-5 b(alues)41 b(of)630 781 +y(v)-5 b(ariables)34 b(in)f(Readline)i(using)e(the)g +Fs(set)g Ft(command)g(within)g(the)h(init)g(\014le.)50 +b(The)33 b(syn)m(tax)630 891 y(is)d(simple:)870 1022 y Fs(set)47 b Fj(variable)56 b(value)630 1154 y Ft(Here,)29 -b(for)e(example,)g(is)g(ho)m(w)g(to)h(c)m(hange)g(from)f(the)g(default) -g(Emacs-lik)m(e)g(k)m(ey)h(binding)c(to)630 1263 y(use)30 -b Fs(vi)g Ft(line)f(editing)g(commands:)870 1395 y Fs(set)47 -b(editing-mode)d(vi)630 1526 y Ft(V)-8 b(ariable)34 b(names)h(and)g(v) --5 b(alues,)35 b(where)g(appropriate,)g(are)h(recognized)f(without)f -(regard)630 1636 y(to)d(case.)630 1767 y(The)37 b Fs(bind)30 -b(-V)37 b Ft(command)g(lists)g(the)h(curren)m(t)f(Readline)g(v)-5 -b(ariable)36 b(names)i(and)f(v)-5 b(alues.)630 1877 y(See)31 -b(Section)f(4.2)h([Bash)g(Builtins],)d(page)j(39.)630 -2008 y(A)f(great)i(deal)e(of)h(run-time)e(b)s(eha)m(vior)g(is)g(c)m -(hangeable)j(with)d(the)h(follo)m(wing)f(v)-5 b(ariables.)630 -2162 y Fs(bell-style)1110 2271 y Ft(Con)m(trols)43 b(what)h(happ)s(ens) -e(when)h(Readline)g(w)m(an)m(ts)h(to)h(ring)d(the)i(termi-)1110 -2381 y(nal)36 b(b)s(ell.)59 b(If)37 b(set)h(to)g(`)p -Fs(none)p Ft(',)g(Readline)e(nev)m(er)i(rings)d(the)j(b)s(ell.)59 +b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f(the)g(default) +h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 1263 y(use)k +Fs(vi)g Ft(line)h(editing)g(commands:)870 1395 y Fs(set)47 +b(editing-mode)d(vi)630 1526 y Ft(V)-8 b(ariable)36 b(names)f(and)g(v) +-5 b(alues,)36 b(where)f(appropriate,)h(are)g(recognized)g(without)f +(regard)630 1636 y(to)c(case.)630 1767 y(The)37 b Fs(bind)30 +b(-V)37 b Ft(command)g(lists)i(the)f(curren)m(t)f(Readline)i(v)-5 +b(ariable)38 b(names)g(and)f(v)-5 b(alues.)630 1877 y(See)31 +b(Section)g(4.2)g([Bash)g(Builtins],)g(page)g(39.)630 +2008 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g(is)g(c)m +(hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)630 +2162 y Fs(bell-style)1110 2271 y Ft(Con)m(trols)44 b(what)g(happ)s(ens) +e(when)h(Readline)i(w)m(an)m(ts)f(to)h(ring)e(the)h(termi-)1110 +2381 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p +Fs(none)p Ft(',)g(Readline)g(nev)m(er)g(rings)e(the)i(b)s(ell.)61 b(If)36 b(set)i(to)1110 2491 y(`)p Fs(visible)p Ft(',)32 -b(Readline)g(uses)h(a)g(visible)d(b)s(ell)h(if)h(one)h(is)f(a)m(v)-5 -b(ailable.)48 b(If)33 b(set)g(to)1110 2600 y(`)p Fs(audible)p -Ft(')j(\(the)i(default\),)h(Readline)d(attempts)i(to)h(ring)d(the)h +b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g(one)g(is)g(a)m(v)-5 +b(ailable.)51 b(If)33 b(set)g(to)1110 2600 y(`)p Fs(audible)p +Ft(')j(\(the)i(default\),)i(Readline)e(attempts)g(to)h(ring)e(the)g (terminal's)1110 2710 y(b)s(ell.)630 2863 y Fs(comment-begin)1110 -2973 y Ft(The)29 b(string)f(to)i(insert)e(at)i(the)f(b)s(eginning)e(of) -i(the)h(line)d(when)h(the)i Fs(insert-)1110 3082 y(comment)e -Ft(command)j(is)e(executed.)42 b(The)29 b(default)h(v)-5 -b(alue)30 b(is)f Fs("#")p Ft(.)630 3236 y Fs(completion-ignore-case) -1110 3345 y Ft(If)e(set)h(to)g(`)p Fs(on)p Ft(',)g(Readline)e(p)s -(erforms)g(\014lename)g(matc)m(hing)i(and)f(completion)1110 -3455 y(in)i(a)i(case-insensitiv)m(e)f(fashion.)39 b(The)30 -b(default)g(v)-5 b(alue)29 b(is)h(`)p Fs(off)p Ft('.)630 -3608 y Fs(completion-query-items)1110 3718 y Ft(The)c(n)m(um)m(b)s(er)f -(of)h(p)s(ossible)e(completions)h(that)i(determines)e(when)g(the)i -(user)1110 3828 y(is)h(ask)m(ed)i(whether)f(the)h(list)e(of)h(p)s -(ossibilities)c(should)i(b)s(e)i(displa)m(y)m(ed.)39 -b(If)29 b(the)1110 3937 y(n)m(um)m(b)s(er)d(of)h(p)s(ossible)d -(completions)i(is)g(greater)i(than)e(this)g(v)-5 b(alue,)27 -b(Readline)1110 4047 y(will)d(ask)j(the)f(user)g(whether)g(or)g(not)h -(he)f(wishes)f(to)j(view)d(them;)j(otherwise,)1110 4156 -y(they)d(are)f(simply)e(listed.)38 b(This)22 b(v)-5 b(ariable)23 -b(m)m(ust)i(b)s(e)e(set)i(to)g(an)g(in)m(teger)f(v)-5 -b(alue)1110 4266 y(greater)32 b(than)e(or)g(equal)g(to)h(0.)41 -b(The)30 b(default)g(limit)e(is)h Fs(100)p Ft(.)630 4419 +2973 y Ft(The)29 b(string)g(to)h(insert)f(at)h(the)f(b)s(eginning)g(of) +g(the)h(line)f(when)f(the)i Fs(insert-)1110 3082 y(comment)e +Ft(command)j(is)f(executed.)42 b(The)29 b(default)i(v)-5 +b(alue)31 b(is)f Fs("#")p Ft(.)630 3236 y Fs(completion-ignore-case) +1110 3345 y Ft(If)d(set)h(to)g(`)p Fs(on)p Ft(',)g(Readline)g(p)s +(erforms)e(\014lename)h(matc)m(hing)i(and)e(completion)1110 +3455 y(in)j(a)h(case-insensitiv)m(e)i(fashion.)40 b(The)30 +b(default)h(v)-5 b(alue)30 b(is)h(`)p Fs(off)p Ft('.)630 +3608 y Fs(completion-query-items)1110 3718 y Ft(The)26 +b(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h(that)g(determines) +f(when)f(the)i(user)1110 3828 y(is)i(ask)m(ed)h(whether)f(the)h(list)g +(of)f(p)s(ossibilities)h(should)e(b)s(e)h(displa)m(y)m(ed.)41 +b(If)29 b(the)1110 3937 y(n)m(um)m(b)s(er)d(of)h(p)s(ossible)f +(completions)i(is)f(greater)h(than)e(this)h(v)-5 b(alue,)28 +b(Readline)1110 4047 y(will)f(ask)g(the)f(user)g(whether)g(or)g(not)h +(he)f(wishes)g(to)i(view)e(them;)i(otherwise,)1110 4156 +y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 b(ariable)25 +b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m(teger)g(v)-5 +b(alue)1110 4266 y(greater)32 b(than)e(or)g(equal)h(to)g(0.)41 +b(The)30 b(default)h(limit)g(is)f Fs(100)p Ft(.)630 4419 y Fs(convert-meta)1110 4529 y Ft(If)22 b(set)g(to)h(`)p -Fs(on)p Ft(',)h(Readline)d(will)e(con)m(v)m(ert)24 b(c)m(haracters)f -(with)e(the)h(eigh)m(th)g(bit)f(set)1110 4639 y(to)h(an)f -Fl(asci)r(i)g Ft(k)m(ey)h(sequence)g(b)m(y)f(stripping)d(the)k(eigh)m -(th)f(bit)f(and)h(pre\014xing)e(an)1110 4745 y Fg(h)p -1134 4692 139 4 v 1134 4748 a Ff(ESC)p 1134 4764 V 1268 -4745 a Fg(i)1332 4748 y Ft(c)m(haracter,)36 b(con)m(v)m(erting)f(them)f -(to)g(a)h(meta-pre\014xed)f(k)m(ey)g(sequence.)1110 4858 -y(The)c(default)f(v)-5 b(alue)30 b(is)g(`)p Fs(on)p Ft('.)630 -5011 y Fs(disable-completion)1110 5121 y Ft(If)36 b(set)h(to)h(`)p -Fs(On)p Ft(',)g(Readline)d(will)f(inhibit)f(w)m(ord)k(completion.)58 -b(Completion)1110 5230 y(c)m(haracters)28 b(will)23 b(b)s(e)i(inserted) -g(in)m(to)h(the)h(line)d(as)i(if)f(they)i(had)e(b)s(een)g(mapp)s(ed) -1110 5340 y(to)31 b Fs(self-insert)p Ft(.)38 b(The)30 -b(default)f(is)h(`)p Fs(off)p Ft('.)p eop +Fs(on)p Ft(',)h(Readline)f(will)f(con)m(v)m(ert)i(c)m(haracters)f(with) +f(the)g(eigh)m(th)h(bit)f(set)1110 4639 y(to)g(an)f Fl(asci)r(i)g +Ft(k)m(ey)h(sequence)g(b)m(y)f(stripping)f(the)i(eigh)m(th)g(bit)f(and) +g(pre\014xing)f(an)1110 4745 y Fg(h)p 1134 4692 139 4 +v 1134 4748 a Ff(ESC)p 1134 4764 V 1268 4745 a Fg(i)1332 +4748 y Ft(c)m(haracter,)36 b(con)m(v)m(erting)g(them)e(to)g(a)h +(meta-pre\014xed)f(k)m(ey)g(sequence.)1110 4858 y(The)c(default)g(v)-5 +b(alue)31 b(is)g(`)p Fs(on)p Ft('.)630 5011 y Fs(disable-completion) +1110 5121 y Ft(If)36 b(set)h(to)h(`)p Fs(On)p Ft(',)g(Readline)f(will)g +(inhibit)f(w)m(ord)h(completion.)60 b(Completion)1110 +5230 y(c)m(haracters)28 b(will)e(b)s(e)f(inserted)h(in)m(to)h(the)g +(line)f(as)g(if)g(they)h(had)e(b)s(een)g(mapp)s(ed)1110 +5340 y(to)31 b Fs(self-insert)p Ft(.)38 b(The)30 b(default)g(is)h(`)p +Fs(off)p Ft('.)p eop end %%Page: 88 94 -88 93 bop 150 -116 a Ft(88)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y Fs(editing-mode)1110 408 y Ft(The)d Fs(editing-mode)e -Ft(v)-5 b(ariable)27 b(con)m(trols)i(whic)m(h)e(default)h(set)i(of)e(k) -m(ey)i(bind-)1110 518 y(ings)24 b(is)g(used.)38 b(By)26 -b(default,)f(Readline)f(starts)h(up)f(in)g(Emacs)h(editing)f(mo)s(de,) -1110 628 y(where)29 b(the)g(k)m(eystrok)m(es)i(are)e(most)h(similar)c -(to)k(Emacs.)40 b(This)28 b(v)-5 b(ariable)28 b(can)1110 -737 y(b)s(e)i(set)h(to)g(either)f(`)p Fs(emacs)p Ft(')f(or)h(`)p -Fs(vi)p Ft('.)630 934 y Fs(enable-keypad)1110 1044 y -Ft(When)23 b(set)h(to)g(`)p Fs(on)p Ft(',)h(Readline)d(will)f(try)i(to) -h(enable)f(the)g(application)f(k)m(eypad)1110 1154 y(when)k(it)g(is)f -(called.)39 b(Some)27 b(systems)f(need)h(this)e(to)i(enable)f(the)h -(arro)m(w)g(k)m(eys.)1110 1263 y(The)j(default)f(is)h(`)p -Fs(off)p Ft('.)630 1461 y Fs(expand-tilde)1110 1570 y -Ft(If)d(set)h(to)h(`)p Fs(on)p Ft(',)f(tilde)e(expansion)h(is)f(p)s -(erformed)g(when)h(Readline)f(attempts)1110 1680 y(w)m(ord)k -(completion.)40 b(The)30 b(default)f(is)h(`)p Fs(off)p -Ft('.)1110 1833 y(If)f(set)i(to)f(`)p Fs(on)p Ft(',)g(the)g(history)f -(co)s(de)h(attempts)g(to)h(place)e(p)s(oin)m(t)g(at)i(the)f(same)1110 -1943 y(lo)s(cation)j(on)g(eac)m(h)i(history)d(line)g(retriev)m(ed)h -(with)f Fs(previous-history)d Ft(or)1110 2052 y Fs(next-history)p +TeXDict begin 88 93 bop 150 -116 a Ft(88)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(editing-mode)1110 +408 y Ft(The)d Fs(editing-mode)e Ft(v)-5 b(ariable)29 +b(con)m(trols)h(whic)m(h)e(default)h(set)h(of)e(k)m(ey)i(bind-)1110 +518 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f +(up)f(in)h(Emacs)g(editing)h(mo)s(de,)1110 628 y(where)j(the)g(k)m +(eystrok)m(es)i(are)e(most)h(similar)f(to)h(Emacs.)40 +b(This)29 b(v)-5 b(ariable)30 b(can)1110 737 y(b)s(e)g(set)h(to)g +(either)g(`)p Fs(emacs)p Ft(')e(or)h(`)p Fs(vi)p Ft('.)630 +934 y Fs(enable-keypad)1110 1044 y Ft(When)23 b(set)h(to)g(`)p +Fs(on)p Ft(',)h(Readline)f(will)g(try)f(to)h(enable)g(the)f +(application)i(k)m(eypad)1110 1154 y(when)h(it)h(is)f(called.)41 +b(Some)27 b(systems)f(need)h(this)f(to)h(enable)g(the)g(arro)m(w)g(k)m +(eys.)1110 1263 y(The)j(default)g(is)h(`)p Fs(off)p Ft('.)630 +1461 y Fs(expand-tilde)1110 1570 y Ft(If)c(set)h(to)h(`)p +Fs(on)p Ft(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h +(Readline)h(attempts)1110 1680 y(w)m(ord)i(completion.)42 +b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)1110 1833 +y(If)e(set)i(to)f(`)p Fs(on)p Ft(',)g(the)g(history)g(co)s(de)g +(attempts)g(to)h(place)f(p)s(oin)m(t)g(at)h(the)f(same)1110 +1943 y(lo)s(cation)35 b(on)e(eac)m(h)i(history)e(line)h(retriev)m(ed)g +(with)f Fs(previous-history)c Ft(or)1110 2052 y Fs(next-history)p Ft(.)630 2250 y Fs(horizontal-scroll-mode)1110 2359 y -Ft(This)34 b(v)-5 b(ariable)35 b(can)h(b)s(e)f(set)h(to)h(either)e(`)p -Fs(on)p Ft(')h(or)g(`)p Fs(off)p Ft('.)57 b(Setting)35 -b(it)g(to)i(`)p Fs(on)p Ft(')1110 2469 y(means)26 b(that)h(the)f(text)h -(of)g(the)f(lines)e(b)s(eing)h(edited)h(will)d(scroll)i(horizon)m -(tally)1110 2578 y(on)32 b(a)g(single)e(screen)i(line)e(when)g(they)i -(are)g(longer)g(than)f(the)h(width)e(of)i(the)1110 2688 -y(screen,)27 b(instead)f(of)g(wrapping)e(on)m(to)j(a)f(new)g(screen)g -(line.)37 b(By)27 b(default,)f(this)1110 2798 y(v)-5 -b(ariable)29 b(is)h(set)g(to)i(`)p Fs(off)p Ft('.)630 +Ft(This)35 b(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f(`)p +Fs(on)p Ft(')g(or)g(`)p Fs(off)p Ft('.)57 b(Setting)36 +b(it)g(to)h(`)p Fs(on)p Ft(')1110 2469 y(means)26 b(that)h(the)f(text)h +(of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m +(tally)1110 2578 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i +(are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 2688 +y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g +(line.)39 b(By)27 b(default,)g(this)1110 2798 y(v)-5 +b(ariable)31 b(is)g(set)f(to)i(`)p Fs(off)p Ft('.)630 2995 y Fs(input-meta)1110 3104 y Ft(If)f(set)g(to)h(`)p -Fs(on)p Ft(',)g(Readline)e(will)e(enable)j(eigh)m(t-bit)g(input)e(\(it) -i(will)d(not)k(clear)1110 3214 y(the)40 b(eigh)m(th)f(bit)g(in)f(the)i -(c)m(haracters)h(it)e(reads\),)k(regardless)38 b(of)i(what)g(the)1110 -3324 y(terminal)e(claims)h(it)h(can)g(supp)s(ort.)68 -b(The)39 b(default)g(v)-5 b(alue)39 b(is)g(`)p Fs(off)p -Ft('.)69 b(The)1110 3433 y(name)30 b Fs(meta-flag)e Ft(is)i(a)g(synon)m -(ym)g(for)g(this)g(v)-5 b(ariable.)630 3630 y Fs(isearch-terminators) -1110 3740 y Ft(The)51 b(string)g(of)h(c)m(haracters)h(that)f(should)d -(terminate)j(an)g(incremen)m(tal)1110 3850 y(searc)m(h)25 -b(without)f(subsequen)m(tly)g(executing)h(the)g(c)m(haracter)h(as)f(a)g -(command)1110 3959 y(\(see)42 b(Section)e(8.2.5)j([Searc)m(hing],)h -(page)d(86\).)73 b(If)41 b(this)f(v)-5 b(ariable)39 b(has)i(not)1110 -4069 y(b)s(een)31 b(giv)m(en)g(a)h(v)-5 b(alue,)31 b(the)h(c)m +Fs(on)p Ft(',)g(Readline)g(will)f(enable)h(eigh)m(t-bit)h(input)d(\(it) +i(will)f(not)h(clear)1110 3214 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h +(c)m(haracters)h(it)f(reads\),)j(regardless)c(of)h(what)g(the)1110 +3324 y(terminal)g(claims)h(it)g(can)f(supp)s(ort.)68 +b(The)39 b(default)h(v)-5 b(alue)40 b(is)g(`)p Fs(off)p +Ft('.)69 b(The)1110 3433 y(name)30 b Fs(meta-flag)e Ft(is)j(a)f(synon)m +(ym)g(for)g(this)h(v)-5 b(ariable.)630 3630 y Fs(isearch-terminators) +1110 3740 y Ft(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e +(terminate)j(an)f(incremen)m(tal)1110 3850 y(searc)m(h)25 +b(without)g(subsequen)m(tly)g(executing)h(the)f(c)m(haracter)h(as)f(a)g +(command)1110 3959 y(\(see)42 b(Section)f(8.2.5)i([Searc)m(hing],)i +(page)c(86\).)73 b(If)41 b(this)g(v)-5 b(ariable)41 b(has)g(not)1110 +4069 y(b)s(een)31 b(giv)m(en)h(a)g(v)-5 b(alue,)32 b(the)g(c)m (haracters)2494 4066 y Fg(h)p 2518 4013 139 4 v 2518 4069 a Ff(ESC)p 2518 4084 V 2652 4066 a Fg(i)2713 4069 -y Ft(and)f Fj(C-J)g Ft(will)e(terminate)i(an)1110 4178 -y(incremen)m(tal)f(searc)m(h.)630 4376 y Fs(keymap)192 -b Ft(Sets)39 b(Readline's)e(idea)i(of)g(the)g(curren)m(t)f(k)m(eymap)h -(for)g(k)m(ey)g(binding)d(com-)1110 4485 y(mands.)81 -b(Acceptable)46 b Fs(keymap)c Ft(names)i(are)h Fs(emacs)p +y Ft(and)f Fj(C-J)g Ft(will)h(terminate)g(an)1110 4178 +y(incremen)m(tal)g(searc)m(h.)630 4376 y Fs(keymap)192 +b Ft(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h +(for)g(k)m(ey)g(binding)f(com-)1110 4485 y(mands.)81 +b(Acceptable)47 b Fs(keymap)42 b Ft(names)i(are)h Fs(emacs)p Ft(,)i Fs(emacs-standard)p Ft(,)1110 4595 y Fs(emacs-meta)p Ft(,)99 b Fs(emacs-ctlx)p Ft(,)f Fs(vi)p Ft(,)j Fs(vi-move)p Ft(,)f Fs(vi-command)p Ft(,)f(and)1110 4704 y Fs(vi-insert)p -Ft(.)64 b Fs(vi)38 b Ft(is)g(equiv)-5 b(alen)m(t)39 b(to)g -Fs(vi-command)p Ft(;)i Fs(emacs)c Ft(is)h(equiv)-5 b(alen)m(t)1110 -4814 y(to)33 b Fs(emacs-standard)p Ft(.)41 b(The)31 b(default)g(v)-5 -b(alue)31 b(is)g Fs(emacs)p Ft(.)44 b(The)31 b(v)-5 b(alue)32 -b(of)g(the)1110 4924 y Fs(editing-mode)27 b Ft(v)-5 b(ariable)29 -b(also)i(a\013ects)g(the)g(default)e(k)m(eymap.)630 5121 +Ft(.)64 b Fs(vi)38 b Ft(is)h(equiv)-5 b(alen)m(t)41 b(to)e +Fs(vi-command)p Ft(;)i Fs(emacs)c Ft(is)i(equiv)-5 b(alen)m(t)1110 +4814 y(to)33 b Fs(emacs-standard)p Ft(.)41 b(The)31 b(default)h(v)-5 +b(alue)32 b(is)g Fs(emacs)p Ft(.)44 b(The)31 b(v)-5 b(alue)33 +b(of)f(the)1110 4924 y Fs(editing-mode)27 b Ft(v)-5 b(ariable)31 +b(also)h(a\013ects)f(the)g(default)f(k)m(eymap.)630 5121 y Fs(mark-directories)1110 5230 y Ft(If)38 b(set)g(to)h(`)p -Fs(on)p Ft(',)i(completed)d(directory)f(names)h(ha)m(v)m(e)i(a)e(slash) -f(app)s(ended.)1110 5340 y(The)30 b(default)f(is)h(`)p -Fs(on)p Ft('.)p eop +Fs(on)p Ft(',)i(completed)e(directory)f(names)g(ha)m(v)m(e)i(a)e(slash) +g(app)s(ended.)1110 5340 y(The)30 b(default)g(is)h(`)p +Fs(on)p Ft('.)p eop end %%Page: 89 95 -89 94 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(89)630 299 y Fs(mark-modified-lines)1110 -408 y Ft(This)34 b(v)-5 b(ariable,)36 b(when)f(set)h(to)h(`)p -Fs(on)p Ft(',)g(causes)g(Readline)d(to)j(displa)m(y)d(an)h(as-)1110 -518 y(terisk)e(\(`)p Fs(*)p Ft('\))i(at)f(the)g(start)g(of)g(history)f -(lines)f(whic)m(h)g(ha)m(v)m(e)j(b)s(een)e(mo)s(di\014ed.)1110 -628 y(This)c(v)-5 b(ariable)29 b(is)g(`)p Fs(off)p Ft(')h(b)m(y)g -(default.)630 786 y Fs(mark-symlinked-directori)o(es)1110 -896 y Ft(If)44 b(set)h(to)h(`)p Fs(on)p Ft(',)i(completed)d(names)g -(whic)m(h)e(are)i(sym)m(b)s(olic)e(links)g(to)i(di-)1110 -1005 y(rectories)i(ha)m(v)m(e)g(a)g(slash)e(app)s(ended)f(\(sub)5 -b(ject)47 b(to)g(the)f(v)-5 b(alue)46 b(of)g Fs(mark-)1110 -1115 y(directories)p Ft(\).)38 b(The)30 b(default)f(is)h(`)p -Fs(off)p Ft('.)630 1273 y Fs(match-hidden-files)1110 -1383 y Ft(This)20 b(v)-5 b(ariable,)23 b(when)f(set)g(to)h(`)p -Fs(on)p Ft(',)h(causes)f(Readline)e(to)i(matc)m(h)g(\014les)e(whose) -1110 1492 y(names)44 b(b)s(egin)f(with)g(a)h(`)p Fs(.)p -Ft(')g(\(hidden)e(\014les\))i(when)f(p)s(erforming)f(\014lename)1110 -1602 y(completion,)i(unless)c(the)h(leading)f(`)p Fs(.)p -Ft(')i(is)f(supplied)d(b)m(y)j(the)h(user)f(in)f(the)1110 -1711 y(\014lename)30 b(to)h(b)s(e)e(completed.)41 b(This)29 -b(v)-5 b(ariable)29 b(is)g(`)p Fs(on)p Ft(')i(b)m(y)f(default.)630 +TeXDict begin 89 94 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(89)630 299 y Fs +(mark-modified-lines)1110 408 y Ft(This)35 b(v)-5 b(ariable,)38 +b(when)d(set)h(to)h(`)p Fs(on)p Ft(',)g(causes)g(Readline)f(to)h +(displa)m(y)f(an)f(as-)1110 518 y(terisk)f(\(`)p Fs(*)p +Ft('\))h(at)f(the)g(start)g(of)g(history)g(lines)g(whic)m(h)f(ha)m(v)m +(e)i(b)s(een)e(mo)s(di\014ed.)1110 628 y(This)d(v)-5 +b(ariable)31 b(is)f(`)p Fs(off)p Ft(')g(b)m(y)g(default.)630 +786 y Fs(mark-symlinked-directori)o(es)1110 896 y Ft(If)44 +b(set)h(to)h(`)p Fs(on)p Ft(',)i(completed)e(names)f(whic)m(h)f(are)h +(sym)m(b)s(olic)g(links)g(to)g(di-)1110 1005 y(rectories)j(ha)m(v)m(e)f +(a)g(slash)f(app)s(ended)e(\(sub)5 b(ject)47 b(to)g(the)f(v)-5 +b(alue)47 b(of)f Fs(mark-)1110 1115 y(directories)p Ft(\).)38 +b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)630 1273 +y Fs(match-hidden-files)1110 1383 y Ft(This)21 b(v)-5 +b(ariable,)25 b(when)d(set)g(to)h(`)p Fs(on)p Ft(',)h(causes)f +(Readline)g(to)g(matc)m(h)g(\014les)f(whose)1110 1492 +y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fs(.)p Ft(')g(\(hidden)f +(\014les\))i(when)e(p)s(erforming)g(\014lename)1110 1602 +y(completion,)j(unless)41 b(the)g(leading)h(`)p Fs(.)p +Ft(')g(is)g(supplied)e(b)m(y)h(the)h(user)f(in)g(the)1110 +1711 y(\014lename)31 b(to)g(b)s(e)e(completed.)42 b(This)30 +b(v)-5 b(ariable)31 b(is)f(`)p Fs(on)p Ft(')h(b)m(y)f(default.)630 1870 y Fs(output-meta)1110 1979 y Ft(If)35 b(set)h(to)g(`)p -Fs(on)p Ft(',)h(Readline)d(will)f(displa)m(y)g(c)m(haracters)k(with)d -(the)i(eigh)m(th)f(bit)1110 2089 y(set)i(directly)e(rather)h(than)g(as) +Fs(on)p Ft(',)h(Readline)f(will)g(displa)m(y)f(c)m(haracters)i(with)e +(the)h(eigh)m(th)g(bit)1110 2089 y(set)h(directly)g(rather)f(than)g(as) h(a)g(meta-pre\014xed)f(escap)s(e)h(sequence.)59 b(The)1110 -2198 y(default)30 b(is)f(`)p Fs(off)p Ft('.)630 2357 -y Fs(page-completions)1110 2466 y Ft(If)k(set)i(to)f(`)p -Fs(on)p Ft(',)h(Readline)e(uses)g(an)h(in)m(ternal)f -Fs(more)p Ft(-lik)m(e)f(pager)i(to)h(displa)m(y)1110 -2576 y(a)e(screenful)e(of)h(p)s(ossible)e(completions)i(at)h(a)g(time.) -46 b(This)30 b(v)-5 b(ariable)32 b(is)f(`)p Fs(on)p Ft(')1110 -2685 y(b)m(y)f(default.)630 2844 y Fs(print-completions-horizo)o(ntal)o -(ly)1110 2953 y Ft(If)23 b(set)i(to)g(`)p Fs(on)p Ft(',)g(Readline)e -(will)e(displa)m(y)h(completions)h(with)g(matc)m(hes)i(sorted)1110 -3063 y(horizon)m(tally)42 b(in)g(alphab)s(etical)g(order,)47 -b(rather)c(than)g(do)m(wn)g(the)h(screen.)1110 3173 y(The)30 -b(default)f(is)h(`)p Fs(off)p Ft('.)630 3331 y Fs -(show-all-if-ambiguous)1110 3440 y Ft(This)e(alters)i(the)g(default)f -(b)s(eha)m(vior)g(of)h(the)h(completion)e(functions.)39 -b(If)29 b(set)1110 3550 y(to)f(`)p Fs(on)p Ft(',)g(w)m(ords)f(whic)m(h) -f(ha)m(v)m(e)j(more)f(than)f(one)h(p)s(ossible)d(completion)h(cause) -1110 3660 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)f(immediately)h -(instead)g(of)h(ringing)e(the)i(b)s(ell.)1110 3769 y(The)30 -b(default)f(v)-5 b(alue)30 b(is)g(`)p Fs(off)p Ft('.)630 -3927 y Fs(show-all-if-unmodified)1110 4037 y Ft(This)37 -b(alters)h(the)h(default)f(b)s(eha)m(vior)g(of)g(the)h(completion)f -(functions)f(in)h(a)1110 4147 y(fashion)24 b(similar)f(to)j -Fq(sho)m(w-all-if-am)m(biguous)p Ft(.)37 b(If)25 b(set)h(to)h(`)p -Fs(on)p Ft(',)f(w)m(ords)f(whic)m(h)1110 4256 y(ha)m(v)m(e)32 -b(more)f(than)f(one)i(p)s(ossible)c(completion)i(without)g(an)m(y)h(p)s -(ossible)d(par-)1110 4366 y(tial)41 b(completion)h(\(the)h(p)s(ossible) -d(completions)h(don't)h(share)g(a)h(common)1110 4475 -y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)e -(immediately)h(instead)g(of)i(ring-)1110 4585 y(ing)f(the)g(b)s(ell.)39 -b(The)30 b(default)f(v)-5 b(alue)30 b(is)f(`)p Fs(off)p -Ft('.)630 4743 y Fs(visible-stats)1110 4853 y Ft(If)i(set)i(to)f(`)p -Fs(on)p Ft(',)h(a)f(c)m(haracter)i(denoting)d(a)h(\014le's)f(t)m(yp)s -(e)h(is)f(app)s(ended)f(to)j(the)1110 4963 y(\014lename)d(when)f -(listing)f(p)s(ossible)g(completions.)40 b(The)30 b(default)f(is)h(`)p -Fs(off)p Ft('.)150 5121 y(Key)g(Bindings)630 5230 y(The)41 -b(syn)m(tax)i(for)f(con)m(trolling)e(k)m(ey)j(bindings)c(in)i(the)h -(init)e(\014le)h(is)g(simple.)73 b(First)42 b(y)m(ou)630 +2198 y(default)31 b(is)f(`)p Fs(off)p Ft('.)630 2357 +y Fs(page-completions)1110 2466 y Ft(If)j(set)i(to)f(`)p +Fs(on)p Ft(',)h(Readline)g(uses)e(an)h(in)m(ternal)h +Fs(more)p Ft(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 +2576 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) +47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Fs(on)p Ft(')1110 +2685 y(b)m(y)e(default.)630 2844 y Fs(print-completions-horizo)o(ntal)o +(ly)1110 2953 y Ft(If)23 b(set)i(to)g(`)p Fs(on)p Ft(',)g(Readline)g +(will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 +3063 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c +(than)g(do)m(wn)g(the)h(screen.)1110 3173 y(The)30 b(default)g(is)h(`)p +Fs(off)p Ft('.)630 3331 y Fs(show-all-if-ambiguous)1110 +3440 y Ft(This)e(alters)i(the)f(default)g(b)s(eha)m(vior)g(of)g(the)h +(completion)g(functions.)40 b(If)29 b(set)1110 3550 y(to)f(`)p +Fs(on)p Ft(',)g(w)m(ords)f(whic)m(h)g(ha)m(v)m(e)i(more)f(than)f(one)h +(p)s(ossible)f(completion)h(cause)1110 3660 y(the)39 +b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i(instead)e(of)g +(ringing)g(the)g(b)s(ell.)1110 3769 y(The)30 b(default)g(v)-5 +b(alue)31 b(is)g(`)p Fs(off)p Ft('.)630 3927 y Fs +(show-all-if-unmodified)1110 4037 y Ft(This)38 b(alters)h(the)g +(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h(functions)e(in)h(a) +1110 4147 y(fashion)25 b(similar)h(to)g Fq(sho)m(w-all-if-am)m(biguous) +p Ft(.)41 b(If)25 b(set)h(to)h(`)p Fs(on)p Ft(',)f(w)m(ords)f(whic)m(h) +1110 4256 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e +(completion)i(without)f(an)m(y)g(p)s(ossible)f(par-)1110 +4366 y(tial)43 b(completion)h(\(the)f(p)s(ossible)f(completions)h +(don't)f(share)g(a)h(common)1110 4475 y(pre\014x\))30 +b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g(immediately)i +(instead)e(of)h(ring-)1110 4585 y(ing)g(the)f(b)s(ell.)41 +b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fs(off)p +Ft('.)630 4743 y Fs(visible-stats)1110 4853 y Ft(If)h(set)i(to)f(`)p +Fs(on)p Ft(',)h(a)f(c)m(haracter)i(denoting)e(a)g(\014le's)g(t)m(yp)s +(e)g(is)g(app)s(ended)e(to)j(the)1110 4963 y(\014lename)e(when)e +(listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p +Fs(off)p Ft('.)150 5121 y(Key)f(Bindings)630 5230 y(The)41 +b(syn)m(tax)i(for)f(con)m(trolling)h(k)m(ey)g(bindings)e(in)h(the)g +(init)g(\014le)g(is)g(simple.)75 b(First)43 b(y)m(ou)630 5340 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i (y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)p -eop +eop end %%Page: 90 96 -90 95 bop 150 -116 a Ft(90)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(sections)36 b(con)m(tain)g(tables)g(of)g(the)g(command)f(name,)j -(the)e(default)f(k)m(eybinding,)g(if)g(an)m(y)-8 b(,)630 -408 y(and)30 b(a)h(short)f(description)e(of)j(what)f(the)g(command)h -(do)s(es.)630 543 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g(the) -g(command,)h(simply)d(place)i(on)f(a)i(line)d(in)h(the)h(init)630 -653 y(\014le)d(the)h(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)e(to)i -(bind)e(the)i(command)f(to,)i(a)f(colon,)h(and)e(then)630 +TeXDict begin 90 95 bop 150 -116 a Ft(90)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(sections)37 b(con)m(tain)g(tables)g +(of)f(the)g(command)f(name,)j(the)e(default)g(k)m(eybinding,)h(if)f(an) +m(y)-8 b(,)630 408 y(and)30 b(a)h(short)f(description)g(of)h(what)f +(the)g(command)h(do)s(es.)630 543 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g +(name)g(of)g(the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g +(the)g(init)630 653 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m(ou) +g(wish)f(to)h(bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)630 762 y(the)f(name)g(of)g(the)g(command.)46 b(The)31 b(name)h(of)g(the)g -(k)m(ey)h(can)f(b)s(e)f(expressed)h(in)e(di\013eren)m(t)630 -872 y(w)m(a)m(ys,)h(dep)s(ending)d(on)j(what)f(y)m(ou)h(\014nd)d(most)j -(comfortable.)630 1006 y(In)k(addition)f(to)j(command)f(names,)i -(readline)c(allo)m(ws)h(k)m(eys)i(to)g(b)s(e)e(b)s(ound)f(to)j(a)f -(string)630 1116 y(that)31 b(is)e(inserted)h(when)f(the)i(k)m(ey)g(is)e -(pressed)h(\(a)h Fq(macro)5 b Ft(\).)630 1250 y(The)42 -b Fs(bind)30 b(-p)42 b Ft(command)h(displa)m(ys)e(Readline)g(function)h -(names)h(and)f(bindings)e(in)i(a)630 1360 y(format)37 -b(that)h(can)f(put)f(directly)g(in)m(to)h(an)g(initialization)d -(\014le.)59 b(See)38 b(Section)e(4.2)j([Bash)630 1469 -y(Builtins],)28 b(page)j(39.)630 1629 y Fq(k)m(eyname)5 -b Ft(:)42 b Fq(function-name)34 b Ft(or)d Fq(macro)1110 -1738 y(k)m(eyname)k Ft(is)28 b(the)g(name)h(of)g(a)g(k)m(ey)h(sp)s -(elled)c(out)j(in)f(English.)37 b(F)-8 b(or)30 b(example:)1350 +(k)m(ey)h(can)f(b)s(e)f(expressed)h(in)f(di\013eren)m(t)630 +872 y(w)m(a)m(ys,)g(dep)s(ending)e(on)i(what)f(y)m(ou)h(\014nd)d(most)j +(comfortable.)630 1006 y(In)k(addition)h(to)h(command)f(names,)i +(readline)e(allo)m(ws)h(k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f +(string)630 1116 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f +(pressed)g(\(a)h Fq(macro)5 b Ft(\).)630 1250 y(The)42 +b Fs(bind)30 b(-p)42 b Ft(command)h(displa)m(ys)g(Readline)g(function)g +(names)g(and)f(bindings)g(in)h(a)630 1360 y(format)37 +b(that)h(can)f(put)f(directly)i(in)m(to)g(an)f(initialization)j +(\014le.)60 b(See)38 b(Section)f(4.2)i([Bash)630 1469 +y(Builtins],)31 b(page)g(39.)630 1629 y Fq(k)m(eyname)5 +b Ft(:)42 b Fq(function-name)35 b Ft(or)c Fq(macro)1110 +1738 y(k)m(eyname)k Ft(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s +(elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 1873 y Fs(Control-u:)45 b(universal-argument)1350 1983 y(Meta-Rubout:)f(backward-kill-word)1350 2092 y(Control-o:)h(">)i -(output")1110 2227 y Ft(In)38 b(the)h(ab)s(o)m(v)m(e)h(example,)g -Fj(C-u)e Ft(is)g(b)s(ound)e(to)k(the)e(function)g Fs(universal-)1110 -2336 y(argument)p Ft(,)g Fj(M-DEL)e Ft(is)h(b)s(ound)f(to)i(the)g -(function)f Fs(backward-kill-word)p Ft(,)1110 2446 y(and)h -Fj(C-o)g Ft(is)g(b)s(ound)f(to)j(run)d(the)j(macro)f(expressed)g(on)f -(the)i(righ)m(t)e(hand)1110 2555 y(side)29 b(\(that)j(is,)d(to)i -(insert)f(the)g(text)i(`)p Fs(>)e(output)p Ft(')f(in)m(to)h(the)h -(line\).)1110 2690 y(A)37 b(n)m(um)m(b)s(er)f(of)h(sym)m(b)s(olic)e(c)m -(haracter)k(names)e(are)g(recognized)g(while)e(pro-)1110 -2800 y(cessing)23 b(this)g(k)m(ey)h(binding)d(syn)m(tax:)37 +(output")1110 2227 y Ft(In)38 b(the)h(ab)s(o)m(v)m(e)h(example,)h +Fj(C-u)d Ft(is)h(b)s(ound)d(to)k(the)e(function)h Fs(universal-)1110 +2336 y(argument)p Ft(,)f Fj(M-DEL)e Ft(is)i(b)s(ound)e(to)i(the)g +(function)g Fs(backward-kill-word)p Ft(,)1110 2446 y(and)g +Fj(C-o)g Ft(is)h(b)s(ound)e(to)j(run)d(the)j(macro)f(expressed)g(on)f +(the)i(righ)m(t)f(hand)1110 2555 y(side)30 b(\(that)i(is,)e(to)h +(insert)g(the)f(text)i(`)p Fs(>)e(output)p Ft(')f(in)m(to)i(the)g +(line\).)1110 2690 y(A)37 b(n)m(um)m(b)s(er)f(of)h(sym)m(b)s(olic)g(c)m +(haracter)i(names)e(are)g(recognized)h(while)f(pro-)1110 +2800 y(cessing)24 b(this)g(k)m(ey)g(binding)f(syn)m(tax:)37 b Fq(DEL)p Ft(,)24 b Fq(ESC)p Ft(,)f Fq(ESCAPE)p Ft(,)g Fq(LFD)p Ft(,)h Fq(NEW-)1110 2909 y(LINE)p Ft(,)30 b Fq(RET)p Ft(,)g Fq(RETURN)p Ft(,)h Fq(R)m(UBOUT)p Ft(,)g Fq(SP)-8 b(A)m(CE)p Ft(,)30 b Fq(SPC)p Ft(,)g(and)f Fq(T)-8 b(AB)p Ft(.)630 3068 y Fs(")p Fq(k)m(eyseq)r Fs(")p Ft(:)41 -b Fq(function-name)35 b Ft(or)30 b Fq(macro)1110 3178 -y(k)m(eyseq)k Ft(di\013ers)c(from)g Fq(k)m(eyname)37 -b Ft(ab)s(o)m(v)m(e)32 b(in)e(that)i(strings)e(denoting)g(an)h(en-)1110 -3288 y(tire)i(k)m(ey)i(sequence)f(can)g(b)s(e)f(sp)s(eci\014ed,)g(b)m -(y)g(placing)g(the)h(k)m(ey)g(sequence)g(in)1110 3397 -y(double)28 b(quotes.)41 b(Some)29 b Fl(gnu)h Ft(Emacs)f(st)m(yle)h(k)m -(ey)g(escap)s(es)g(can)g(b)s(e)f(used,)g(as)1110 3507 -y(in)j(the)i(follo)m(wing)f(example,)h(but)f(the)h(sp)s(ecial)f(c)m -(haracter)i(names)f(are)g(not)1110 3616 y(recognized.)1350 +b Fq(function-name)36 b Ft(or)30 b Fq(macro)1110 3178 +y(k)m(eyseq)k Ft(di\013ers)d(from)f Fq(k)m(eyname)37 +b Ft(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f(denoting)g(an)g(en-)1110 +3288 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s(e)f(sp)s(eci\014ed,)h(b)m +(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in)1110 3397 +y(double)29 b(quotes.)41 b(Some)29 b Fl(gnu)h Ft(Emacs)f(st)m(yle)i(k)m +(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as)1110 3507 +y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s(ecial)h(c)m +(haracter)g(names)f(are)g(not)1110 3616 y(recognized.)1350 3751 y Fs("\\C-u":)46 b(universal-argument)1350 3861 y("\\C-x\\C-r":)f(re-read-init-file)1350 3970 y("\\e[11~":)g("Function) -h(Key)g(1")1110 4105 y Ft(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)73 -b Fj(C-u)64 b Ft(is)f(again)i(b)s(ound)d(to)k(the)e(function)1110 -4214 y Fs(universal-argument)39 b Ft(\(just)k(as)h(it)f(w)m(as)h(in)f -(the)g(\014rst)g(example\),)48 b(`)p Fj(C-x)1110 4324 -y(C-r)p Ft(')41 b(is)f(b)s(ound)f(to)j(the)f(function)f -Fs(re-read-init-file)p Ft(,)f(and)i(`)3462 4321 y Fg(h)p +h(Key)g(1")1110 4105 y Ft(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 +b Fj(C-u)64 b Ft(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110 +4214 y Fs(universal-argument)39 b Ft(\(just)k(as)h(it)g(w)m(as)g(in)g +(the)f(\014rst)g(example\),)49 b(`)p Fj(C-x)1110 4324 +y(C-r)p Ft(')41 b(is)g(b)s(ound)e(to)j(the)f(function)g +Fs(re-read-init-file)p Ft(,)e(and)i(`)3462 4321 y Fg(h)p 3486 4268 139 4 v 3486 4324 a Ff(ESC)p 3486 4339 V 3620 4321 a Fg(i)31 b(h)p 3705 4268 20 4 v 3705 4324 a Ff([)p 3705 4340 V 3720 4321 a Fg(i)1110 4430 y(h)p 1134 4377 36 4 v 1134 4433 a Ff(1)p 1134 4449 V 1165 4430 a Fg(i)f(h)p 1250 4377 V 1250 4433 a Ff(1)p 1250 4449 V 1281 4430 a Fg(i)g(h)p 1365 4377 48 4 v 1365 4433 a Fs(~)p 1365 -4449 V 1409 4430 a Fg(i)1438 4433 y Ft(')h(is)e(b)s(ound)g(to)i(insert) -e(the)i(text)g(`)p Fs(Function)d(Key)i(1)p Ft('.)630 -4593 y(The)f(follo)m(wing)f Fl(gnu)i Ft(Emacs)g(st)m(yle)g(escap)s(e)g -(sequences)g(are)g(a)m(v)-5 b(ailable)29 b(when)g(sp)s(ecifying)630 -4702 y(k)m(ey)i(sequences:)630 4862 y Fj(\\C-)336 b Ft(con)m(trol)31 +4449 V 1409 4430 a Fg(i)1438 4433 y Ft(')h(is)f(b)s(ound)f(to)i(insert) +f(the)h(text)g(`)p Fs(Function)d(Key)i(1)p Ft('.)630 +4593 y(The)f(follo)m(wing)i Fl(gnu)f Ft(Emacs)g(st)m(yle)h(escap)s(e)f +(sequences)g(are)g(a)m(v)-5 b(ailable)32 b(when)d(sp)s(ecifying)630 +4702 y(k)m(ey)i(sequences:)630 4862 y Fj(\\C-)336 b Ft(con)m(trol)32 b(pre\014x)630 5021 y Fj(\\M-)336 b Ft(meta)31 b(pre\014x)630 5181 y Fj(\\e)384 b Ft(an)30 b(escap)s(e)h(c)m(haracter)630 -5340 y Fj(\\\\)384 b Ft(bac)m(kslash)p eop +5340 y Fj(\\\\)384 b Ft(bac)m(kslash)p eop end %%Page: 91 97 -91 96 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(91)630 299 y Fj(\\)p Fs(")1110 -296 y Fg(h)p 1134 243 48 4 v 1134 299 a Fs(")p 1134 314 -V 1178 296 a Fg(i)1208 299 y Ft(,)30 b(a)h(double)e(quotation)h(mark) -630 460 y Fj(\\')1110 457 y Fg(h)p 1134 403 20 4 v 1134 -460 a Ff(')p 1134 475 V 1150 457 a Fg(i)1179 460 y Ft(,)h(a)g(single)e -(quote)i(or)f(ap)s(ostrophe)630 620 y(In)d(addition)f(to)i(the)g -Fl(gnu)f Ft(Emacs)h(st)m(yle)g(escap)s(e)g(sequences,)h(a)f(second)f -(set)h(of)g(bac)m(kslash)630 730 y(escap)s(es)j(is)e(a)m(v)-5 -b(ailable:)630 890 y Fs(\\a)384 b Ft(alert)30 b(\(b)s(ell\))630 -1051 y Fs(\\b)384 b Ft(bac)m(kspace)630 1212 y Fs(\\d)g -Ft(delete)630 1372 y Fs(\\f)g Ft(form)30 b(feed)630 1533 -y Fs(\\n)384 b Ft(newline)630 1694 y Fs(\\r)g Ft(carriage)31 -b(return)630 1854 y Fs(\\t)384 b Ft(horizon)m(tal)30 -b(tab)630 2015 y Fs(\\v)384 b Ft(v)m(ertical)30 b(tab)630 -2176 y Fs(\\)p Fj(nnn)288 b Ft(the)35 b(eigh)m(t-bit)f(c)m(haracter)i -(whose)e(v)-5 b(alue)34 b(is)g(the)g(o)s(ctal)h(v)-5 -b(alue)34 b Fq(nnn)f Ft(\(one)i(to)1110 2285 y(three)c(digits\))630 -2446 y Fs(\\x)p Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)f(c)m(haracter)i -(whose)e(v)-5 b(alue)38 b(is)h(the)g(hexadecimal)g(v)-5 -b(alue)39 b Fq(HH)1110 2555 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e -(digits\))630 2716 y(When)37 b(en)m(tering)g(the)h(text)g(of)g(a)g -(macro,)i(single)c(or)h(double)f(quotes)i(m)m(ust)f(b)s(e)g(used)f(to) -630 2826 y(indicate)21 b(a)g(macro)h(de\014nition.)36 -b(Unquoted)21 b(text)i(is)d(assumed)h(to)h(b)s(e)f(a)h(function)e -(name.)38 b(In)630 2935 y(the)22 b(macro)f(b)s(o)s(dy)-8 -b(,)23 b(the)e(bac)m(kslash)g(escap)s(es)h(describ)s(ed)d(ab)s(o)m(v)m -(e)k(are)e(expanded.)37 b(Bac)m(kslash)630 3045 y(will)g(quote)k(an)m -(y)f(other)g(c)m(haracter)i(in)c(the)j(macro)f(text,)k(including)36 -b(`)p Fs(")p Ft(')k(and)g(`)p Fs(')p Ft('.)69 b(F)-8 -b(or)630 3154 y(example,)27 b(the)f(follo)m(wing)e(binding)e(will)h -(mak)m(e)k(`)p Fj(C-x)j Fs(\\)p Ft(')c(insert)e(a)i(single)f(`)p -Fs(\\)p Ft(')h(in)m(to)f(the)h(line:)870 3290 y Fs("\\C-x\\\\":)45 +TeXDict begin 91 96 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(91)630 299 y Fj(\\)p +Fs(")1110 296 y Fg(h)p 1134 243 48 4 v 1134 299 a Fs(")p +1134 314 V 1178 296 a Fg(i)1208 299 y Ft(,)30 b(a)h(double)f(quotation) +h(mark)630 460 y Fj(\\')1110 457 y Fg(h)p 1134 403 20 +4 v 1134 460 a Ff(')p 1134 475 V 1150 457 a Fg(i)1179 +460 y Ft(,)g(a)g(single)g(quote)g(or)f(ap)s(ostrophe)630 +620 y(In)d(addition)h(to)g(the)g Fl(gnu)f Ft(Emacs)h(st)m(yle)h(escap)s +(e)f(sequences,)h(a)f(second)f(set)h(of)g(bac)m(kslash)630 +730 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 890 y +Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630 1051 y Fs(\\b)384 +b Ft(bac)m(kspace)630 1212 y Fs(\\d)g Ft(delete)630 1372 +y Fs(\\f)g Ft(form)30 b(feed)630 1533 y Fs(\\n)384 b +Ft(newline)630 1694 y Fs(\\r)g Ft(carriage)32 b(return)630 +1854 y Fs(\\t)384 b Ft(horizon)m(tal)32 b(tab)630 2015 +y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630 2176 y Fs(\\)p +Fj(nnn)288 b Ft(the)35 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5 +b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 b(alue)35 b Fq(nnn)e +Ft(\(one)i(to)1110 2285 y(three)c(digits\))630 2446 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 2555 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630 +2716 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g(macro,)i(single)e +(or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to)630 +2826 y(indicate)23 b(a)e(macro)h(de\014nition.)38 b(Unquoted)21 +b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f(name.)38 +b(In)630 2935 y(the)22 b(macro)f(b)s(o)s(dy)-8 b(,)23 +b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m(e)j +(are)e(expanded.)37 b(Bac)m(kslash)630 3045 y(will)j(quote)h(an)m(y)f +(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39 +b(`)p Fs(")p Ft(')h(and)g(`)p Fs(')p Ft('.)69 b(F)-8 +b(or)630 3154 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i +(mak)m(e)h(`)p Fj(C-x)j Fs(\\)p Ft(')c(insert)f(a)h(single)h(`)p +Fs(\\)p Ft(')f(in)m(to)g(the)g(line:)870 3290 y Fs("\\C-x\\\\":)45 b("\\\\")150 3516 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs) -275 3762 y Ft(Readline)34 b(implemen)m(ts)f(a)j(facilit)m(y)f(similar)d -(in)i(spirit)f(to)j(the)g(conditional)e(compilation)g(features)150 -3871 y(of)h(the)f(C)g(prepro)s(cessor)g(whic)m(h)f(allo)m(ws)h(k)m(ey)h -(bindings)c(and)j(v)-5 b(ariable)33 b(settings)i(to)g(b)s(e)f(p)s -(erformed)f(as)150 3981 y(the)e(result)e(of)h(tests.)42 -b(There)30 b(are)h(four)e(parser)h(directiv)m(es)g(used.)150 -4142 y Fs($if)336 b Ft(The)31 b Fs($if)f Ft(construct)i(allo)m(ws)f -(bindings)d(to)k(b)s(e)e(made)i(based)f(on)g(the)g(editing)f(mo)s(de,)i -(the)630 4252 y(terminal)37 b(b)s(eing)f(used,)k(or)e(the)g -(application)e(using)h(Readline.)62 b(The)38 b(text)h(of)f(the)g(test) -630 4361 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)e(no)h(c)m -(haracters)i(are)f(required)d(to)j(isolate)g(it.)630 +275 3762 y Ft(Readline)36 b(implemen)m(ts)f(a)h(facilit)m(y)i(similar)d +(in)g(spirit)g(to)h(the)g(conditional)h(compilation)g(features)150 +3871 y(of)e(the)f(C)g(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)f +(bindings)e(and)h(v)-5 b(ariable)35 b(settings)h(to)f(b)s(e)f(p)s +(erformed)f(as)150 3981 y(the)e(result)f(of)g(tests.)42 +b(There)30 b(are)h(four)e(parser)h(directiv)m(es)i(used.)150 +4142 y Fs($if)336 b Ft(The)31 b Fs($if)f Ft(construct)i(allo)m(ws)h +(bindings)d(to)i(b)s(e)e(made)i(based)f(on)g(the)g(editing)h(mo)s(de,)g +(the)630 4252 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g +(application)h(using)f(Readline.)64 b(The)38 b(text)h(of)f(the)g(test) +630 4361 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m +(haracters)i(are)f(required)e(to)i(isolate)i(it.)630 4522 y Fs(mode)288 b Ft(The)20 b Fs(mode=)g Ft(form)g(of)h(the)g -Fs($if)f Ft(directiv)m(e)h(is)f(used)g(to)h(test)h(whether)e(Readline) -1110 4631 y(is)28 b(in)h Fs(emacs)f Ft(or)h Fs(vi)g Ft(mo)s(de.)40 -b(This)28 b(ma)m(y)i(b)s(e)e(used)h(in)f(conjunction)h(with)f(the)1110 -4741 y(`)p Fs(set)i(keymap)p Ft(')c(command,)i(for)f(instance,)h(to)g -(set)g(bindings)d(in)h(the)i Fs(emacs-)1110 4851 y(standard)23 -b Ft(and)h Fs(emacs-ctlx)f Ft(k)m(eymaps)i(only)f(if)g(Readline)g(is)g -(starting)h(out)1110 4960 y(in)k Fs(emacs)g Ft(mo)s(de.)630 +Fs($if)f Ft(directiv)m(e)j(is)e(used)f(to)h(test)h(whether)e(Readline) +1110 4631 y(is)29 b(in)h Fs(emacs)e Ft(or)h Fs(vi)g Ft(mo)s(de.)40 +b(This)29 b(ma)m(y)h(b)s(e)e(used)h(in)g(conjunction)h(with)f(the)1110 +4741 y(`)p Fs(set)h(keymap)p Ft(')c(command,)i(for)f(instance,)i(to)f +(set)g(bindings)f(in)g(the)h Fs(emacs-)1110 4851 y(standard)23 +b Ft(and)h Fs(emacs-ctlx)f Ft(k)m(eymaps)i(only)g(if)g(Readline)h(is)f +(starting)h(out)1110 4960 y(in)k Fs(emacs)f Ft(mo)s(de.)630 5121 y Fs(term)288 b Ft(The)26 b Fs(term=)g Ft(form)g(ma)m(y)i(b)s(e)e -(used)g(to)i(include)d(terminal-sp)s(eci\014c)f(k)m(ey)k(bind-)1110 -5230 y(ings,)37 b(p)s(erhaps)d(to)j(bind)d(the)i(k)m(ey)h(sequences)f -(output)g(b)m(y)g(the)g(terminal's)1110 5340 y(function)23 -b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)e(side)g(of)h -(the)g(`)p Fs(=)p Ft(')g(is)f(tested)i(against)p eop +(used)g(to)i(include)f(terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 +5230 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f +(output)g(b)m(y)g(the)g(terminal's)1110 5340 y(function)24 +b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g +(the)g(`)p Fs(=)p Ft(')g(is)g(tested)h(against)p eop +end %%Page: 92 98 -92 97 bop 150 -116 a Ft(92)2572 b(Bash)31 b(Reference)g(Man)m(ual)1110 -299 y(b)s(oth)e(the)h(full)e(name)i(of)g(the)g(terminal)f(and)g(the)i -(p)s(ortion)d(of)i(the)g(terminal)1110 408 y(name)k(b)s(efore)f(the)g -(\014rst)g(`)p Fs(-)p Ft('.)50 b(This)32 b(allo)m(ws)h -Fs(sun)g Ft(to)h(matc)m(h)g(b)s(oth)f Fs(sun)g Ft(and)1110 -518 y Fs(sun-cmd)p Ft(,)c(for)h(instance.)630 677 y Fs(application)1110 -787 y Ft(The)21 b Fq(application)g Ft(construct)h(is)f(used)g(to)i -(include)d(application-sp)s(eci\014c)f(set-)1110 897 -y(tings.)38 b(Eac)m(h)26 b(program)e(using)f(the)i(Readline)e(library)g -(sets)i(the)g Fq(application)1110 1006 y(name)p Ft(,)g(and)e(y)m(ou)g -(can)h(test)g(for)f(a)g(particular)f(v)-5 b(alue.)38 -b(This)21 b(could)h(b)s(e)h(used)f(to)1110 1116 y(bind)31 -b(k)m(ey)i(sequences)g(to)h(functions)d(useful)g(for)i(a)g(sp)s -(eci\014c)e(program.)48 b(F)-8 b(or)1110 1225 y(instance,)34 -b(the)f(follo)m(wing)e(command)i(adds)f(a)i(k)m(ey)f(sequence)h(that)f -(quotes)1110 1335 y(the)e(curren)m(t)f(or)g(previous)f(w)m(ord)h(in)f -(Bash:)1350 1469 y Fs($if)47 b(Bash)1350 1579 y(#)g(Quote)g(the)g -(current)f(or)h(previous)e(word)1350 1689 y("\\C-xq":)h -("\\eb\\"\\ef\\"")1350 1798 y($endif)150 1958 y($endif)192 -b Ft(This)28 b(command,)j(as)f(seen)h(in)e(the)h(previous)f(example,)h -(terminates)g(an)h Fs($if)e Ft(command.)150 2117 y Fs($else)240 -b Ft(Commands)29 b(in)g(this)h(branc)m(h)f(of)i(the)f -Fs($if)g Ft(directiv)m(e)g(are)h(executed)g(if)e(the)i(test)g(fails.) -150 2276 y Fs($include)96 b Ft(This)42 b(directiv)m(e)h(tak)m(es)i(a)e -(single)g(\014lename)f(as)i(an)f(argumen)m(t)h(and)f(reads)g(commands) -630 2386 y(and)38 b(bindings)d(from)j(that)i(\014le.)64 -b(F)-8 b(or)39 b(example,)i(the)e(follo)m(wing)e(directiv)m(e)h(reads)g +TeXDict begin 92 97 bop 150 -116 a Ft(92)2572 b(Bash)31 +b(Reference)g(Man)m(ual)1110 299 y(b)s(oth)e(the)h(full)g(name)g(of)g +(the)g(terminal)h(and)e(the)i(p)s(ortion)e(of)h(the)g(terminal)1110 +408 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p Fs(-)p Ft('.)50 +b(This)33 b(allo)m(ws)i Fs(sun)e Ft(to)h(matc)m(h)g(b)s(oth)f +Fs(sun)g Ft(and)1110 518 y Fs(sun-cmd)p Ft(,)c(for)h(instance.)630 +677 y Fs(application)1110 787 y Ft(The)21 b Fq(application)j +Ft(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h +(set-)1110 897 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h +(Readline)g(library)g(sets)g(the)g Fq(application)1110 +1006 y(name)p Ft(,)g(and)e(y)m(ou)g(can)h(test)g(for)f(a)g(particular)h +(v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g(used)f(to)1110 +1116 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g(for)h +(a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 1225 +y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey)f +(sequence)h(that)f(quotes)1110 1335 y(the)e(curren)m(t)f(or)g(previous) +g(w)m(ord)g(in)g(Bash:)1350 1469 y Fs($if)47 b(Bash)1350 +1579 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350 +1689 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 1798 y($endif)150 +1958 y($endif)192 b Ft(This)29 b(command,)i(as)f(seen)h(in)f(the)g +(previous)g(example,)h(terminates)g(an)g Fs($if)e Ft(command.)150 +2117 y Fs($else)240 b Ft(Commands)29 b(in)h(this)h(branc)m(h)e(of)i +(the)f Fs($if)g Ft(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g +(fails.)150 2276 y Fs($include)96 b Ft(This)43 b(directiv)m(e)i(tak)m +(es)g(a)e(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g +(commands)630 2386 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 +b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e (from)630 2496 y(`)p Fs(/etc/inputrc)p Ft(':)870 2630 y Fs($include)46 b(/etc/inputrc)150 2854 y Fk(8.3.3)63 -b(Sample)40 b(Init)h(File)275 3098 y Ft(Here)31 b(is)e(an)h(example)h -(of)f(an)g Fq(inputrc)k Ft(\014le.)41 b(This)28 b(illustrates)h(k)m(ey) -i(binding,)d(v)-5 b(ariable)29 b(assignmen)m(t,)150 3208 -y(and)h(conditional)e(syn)m(tax.)p eop +b(Sample)41 b(Init)g(File)275 3098 y Ft(Here)31 b(is)f(an)g(example)i +(of)e(an)g Fq(inputrc)35 b Ft(\014le.)42 b(This)29 b(illustrates)j(k)m +(ey)f(binding,)f(v)-5 b(ariable)31 b(assignmen)m(t,)150 +3208 y(and)f(conditional)h(syn)m(tax.)p eop end %%Page: 93 99 -93 98 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(93)390 408 y Fs(#)47 b(This)g(file)g(controls)e -(the)i(behaviour)e(of)j(line)e(input)h(editing)e(for)390 -518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h(Readline)f(library.)93 -b(Existing)390 628 y(#)47 b(programs)f(include)g(FTP,)g(Bash,)h(and)g -(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g(re-read)f(the)h(inputrc)f -(file)g(with)h(C-x)g(C-r.)390 956 y(#)g(Lines)g(beginning)e(with)i('#') -g(are)g(comments.)390 1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i -(systemwide)e(bindings)h(and)h(variable)390 1285 y(#)g(assignments)e -(from)i(/etc/Inputrc)390 1395 y($include)f(/etc/Inputrc)390 -1614 y(#)390 1724 y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.) -390 1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 +TeXDict begin 93 98 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(93)390 408 y Fs(#)47 +b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h +(editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h +(Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) +g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g +(re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390 +956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390 +1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(systemwide)e(bindings) +h(and)h(variable)390 1285 y(#)g(assignments)e(from)i(/etc/Inputrc)390 +1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724 +y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.)390 +1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the) h(function)f(name)g(is)h(ignored)390 2600 y(#)390 2710 y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 2819 y(#)390 @@ -9424,18 +11137,18 @@ y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode)390 (previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) 390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 -5340 y(#"\\M-\\C-[C":)g(forward-char)p eop +5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end %%Page: 94 100 -94 99 bop 150 -116 a Ft(94)2572 b(Bash)31 b(Reference)g(Man)m(ual)390 -299 y Fs(#"\\M-\\C-[A":)331 b(previous-history)390 408 -y(#"\\M-\\C-[B":)g(next-history)390 628 y(C-q:)47 b(quoted-insert)390 -847 y($endif)390 1066 y(#)g(An)h(old-style)d(binding.)93 -b(This)47 b(happens)f(to)h(be)g(the)g(default.)390 1176 -y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f(are)h(convenient)e -(for)i(shell)f(interaction)390 1504 y($if)h(Bash)390 -1614 y(#)g(edit)g(the)g(path)390 1724 y("\\C-xp":)f -("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 1833 -y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 +TeXDict begin 94 99 bop 150 -116 a Ft(94)2572 b(Bash)31 +b(Reference)g(Man)m(ual)390 299 y Fs(#"\\M-\\C-[A":)331 +b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 +628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 +y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) +g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f +(are)h(convenient)e(for)i(shell)f(interaction)390 1504 +y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724 +y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 +1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390 2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390 2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g @@ -9459,28 +11172,28 @@ y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h 5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f (completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g (he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f -(completion-query-items)42 b(150)p eop +(completion-query-items)42 b(150)p eop end %%Page: 95 101 -95 100 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(95)390 299 y Fs(#)47 b(For)g(FTP)390 -408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 +TeXDict begin 95 100 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(95)390 299 y Fs(#)47 +b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 847 y($endif)150 1086 y Fr(8.4)68 b(Bindable)45 b(Readline)i(Commands) -275 1323 y Ft(This)33 b(section)j(describ)s(es)e(Readline)g(commands)i +275 1323 y Ft(This)34 b(section)j(describ)s(es)e(Readline)h(commands)g (that)g(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)56 -b(Y)-8 b(ou)150 1433 y(can)29 b(list)e(y)m(our)i(k)m(ey)g(bindings)d(b) -m(y)j(executing)f Fs(bind)i(-P)e Ft(or,)h(for)g(a)g(more)f(terse)i -(format,)f(suitable)f(for)g(an)150 1543 y Fq(inputrc)33 -b Ft(\014le,)28 b Fs(bind)h(-p)p Ft(.)40 b(\(See)30 b(Section)e(4.2)i -([Bash)g(Builtins],)d(page)j(39.\))41 b(Command)28 b(names)h(without) -150 1652 y(an)h(accompan)m(ying)h(k)m(ey)g(sequence)g(are)g(un)m(b)s -(ound)d(b)m(y)i(default.)275 1780 y(In)25 b(the)h(follo)m(wing)f -(descriptions,)g Fq(p)s(oin)m(t)i Ft(refers)f(to)h(the)f(curren)m(t)g -(cursor)g(p)s(osition,)f(and)h Fq(mark)31 b Ft(refers)150 -1890 y(to)40 b(a)f(cursor)f(p)s(osition)f(sa)m(v)m(ed)j(b)m(y)f(the)g +b(Y)-8 b(ou)150 1433 y(can)29 b(list)g(y)m(our)g(k)m(ey)g(bindings)f(b) +m(y)h(executing)g Fs(bind)h(-P)e Ft(or,)h(for)g(a)g(more)f(terse)i +(format,)f(suitable)h(for)e(an)150 1543 y Fq(inputrc)34 +b Ft(\014le,)29 b Fs(bind)g(-p)p Ft(.)40 b(\(See)30 b(Section)f(4.2)h +([Bash)g(Builtins],)g(page)g(39.\))41 b(Command)28 b(names)h(without) +150 1652 y(an)h(accompan)m(ying)i(k)m(ey)f(sequence)g(are)g(un)m(b)s +(ound)d(b)m(y)i(default.)275 1780 y(In)25 b(the)h(follo)m(wing)i +(descriptions,)f Fq(p)s(oin)m(t)h Ft(refers)e(to)h(the)f(curren)m(t)g +(cursor)g(p)s(osition,)h(and)f Fq(mark)31 b Ft(refers)150 +1890 y(to)40 b(a)f(cursor)f(p)s(osition)h(sa)m(v)m(ed)h(b)m(y)f(the)g Fs(set-mark)d Ft(command.)66 b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f -(p)s(oin)m(t)f(and)150 2000 y(mark)30 b(is)g(referred)f(to)i(as)g(the)f -Fq(region)p Ft(.)150 2205 y Fk(8.4.1)63 b(Commands)40 +(p)s(oin)m(t)g(and)150 2000 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f +Fq(region)p Ft(.)150 2205 y Fk(8.4.1)63 b(Commands)42 b(F)-10 b(or)41 b(Mo)m(ving)150 2443 y Fs(beginning-of-line)26 b(\(C-a\))630 2553 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f (curren)m(t)g(line.)150 2700 y Fs(end-of-line)d(\(C-e\))630 @@ -9490,686 +11203,692 @@ b(forw)m(ard)e(a)h(c)m(haracter.)150 3213 y Fs(backward-char)c(\(C-b\)) 630 3322 y Ft(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 3469 y Fs(forward-word)d(\(M-f\))630 3579 y Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41 -b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)h(and)630 -3689 y(digits.)150 3835 y Fs(backward-word)c(\(M-b\))630 +b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630 +3689 y(digits.)150 3835 y Fs(backward-word)27 b(\(M-b\))630 3945 y Ft(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g -(curren)m(t)f(or)g(previous)f(w)m(ord.)50 b(W)-8 b(ords)34 -b(are)g(comp)s(osed)630 4055 y(of)d(letters)f(and)g(digits.)150 -4202 y Fs(clear-screen)d(\(C-l\))630 4311 y Ft(Clear)f(the)h(screen)f -(and)h(redra)m(w)f(the)h(curren)m(t)f(line,)g(lea)m(ving)g(the)h -(curren)m(t)g(line)e(at)i(the)g(top)630 4421 y(of)k(the)f(screen.)150 +(curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34 +b(are)g(comp)s(osed)630 4055 y(of)d(letters)g(and)f(digits.)150 +4202 y Fs(clear-screen)d(\(C-l\))630 4311 y Ft(Clear)g(the)g(screen)f +(and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f +(curren)m(t)g(line)g(at)g(the)g(top)630 4421 y(of)k(the)f(screen.)150 4568 y Fs(redraw-current-line)25 b(\(\))630 4677 y Ft(Refresh)30 -b(the)g(curren)m(t)h(line.)39 b(By)30 b(default,)g(this)f(is)h(un)m(b)s -(ound.)150 4883 y Fk(8.4.2)63 b(Commands)40 b(F)-10 b(or)41 +b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s +(ound.)150 4883 y Fk(8.4.2)63 b(Commands)42 b(F)-10 b(or)41 b(Manipulating)h(The)f(History)150 5121 y Fs(accept-line)27 -b(\(Newline)h(or)i(Return\))630 5230 y Ft(Accept)25 b(the)e(line)f -(regardless)h(of)g(where)g(the)h(cursor)e(is.)38 b(If)23 -b(this)f(line)g(is)g(non-empt)m(y)-8 b(,)26 b(add)c(it)630 -5340 y(to)27 b(the)f(history)f(list)g(according)h(to)h(the)f(setting)h -(of)f(the)g Fs(HISTCONTROL)d Ft(and)j Fs(HISTIGNORE)p -eop +b(\(Newline)h(or)i(Return\))630 5230 y Ft(Accept)25 b(the)e(line)h +(regardless)g(of)f(where)g(the)h(cursor)e(is.)39 b(If)23 +b(this)g(line)h(is)f(non-empt)m(y)-8 b(,)26 b(add)c(it)630 +5340 y(to)27 b(the)f(history)g(list)h(according)g(to)g(the)f(setting)i +(of)e(the)g Fs(HISTCONTROL)d Ft(and)j Fs(HISTIGNORE)p +eop end %%Page: 96 102 -96 101 bop 150 -116 a Ft(96)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(v)-5 b(ariables.)40 b(If)30 b(this)g(line)f(is)h(a)h(mo)s -(di\014ed)d(history)i(line,)f(then)h(restore)i(the)f(history)e(line)g -(to)630 408 y(its)h(original)e(state.)150 562 y Fs(previous-history)e -(\(C-p\))630 672 y Ft(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g -(history)g(list,)f(fetc)m(hing)h(the)h(previous)e(command.)150 -826 y Fs(next-history)e(\(C-n\))630 935 y Ft(Mo)m(v)m(e)32 -b(`forw)m(ard')f(through)e(the)i(history)e(list,)h(fetc)m(hing)g(the)h -(next)f(command.)150 1089 y Fs(beginning-of-history)25 -b(\(M-<\))630 1199 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)e(in) -i(the)g(history)-8 b(.)150 1352 y Fs(end-of-history)26 -b(\(M->\))630 1462 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h -(input)d(history)-8 b(,)30 b(i.e.,)h(the)g(line)d(curren)m(tly)i(b)s -(eing)f(en)m(tered.)150 1616 y Fs(reverse-search-history)24 -b(\(C-r\))630 1725 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)f(at)h -(the)f(curren)m(t)g(line)e(and)i(mo)m(ving)g(`up')f(through)h(the)g -(his-)630 1835 y(tory)g(as)f(necessary)-8 b(.)42 b(This)28 -b(is)i(an)g(incremen)m(tal)g(searc)m(h.)150 1989 y Fs -(forward-search-history)24 b(\(C-s\))630 2098 y Ft(Searc)m(h)30 -b(forw)m(ard)f(starting)g(at)h(the)g(curren)m(t)f(line)f(and)h(mo)m -(ving)g(`do)m(wn')g(through)g(the)h(the)630 2208 y(history)f(as)i -(necessary)-8 b(.)41 b(This)29 b(is)g(an)i(incremen)m(tal)e(searc)m(h.) -150 2362 y Fs(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 -b(\(M-p\))630 2471 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)f(at)h -(the)f(curren)m(t)g(line)e(and)i(mo)m(ving)g(`up')f(through)h(the)g -(his-)630 2581 y(tory)36 b(as)g(necessary)h(using)d(a)j(non-incremen)m -(tal)e(searc)m(h)h(for)g(a)g(string)f(supplied)e(b)m(y)j(the)630 +TeXDict begin 96 101 bop 150 -116 a Ft(96)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(v)-5 b(ariables.)42 +b(If)30 b(this)h(line)g(is)g(a)g(mo)s(di\014ed)e(history)i(line,)g +(then)f(restore)i(the)f(history)f(line)h(to)630 408 y(its)g(original)g +(state.)150 562 y Fs(previous-history)26 b(\(C-p\))630 +672 y Ft(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g +(fetc)m(hing)g(the)g(previous)f(command.)150 826 y Fs(next-history)d +(\(C-n\))630 935 y Ft(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i +(history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150 +1089 y Fs(beginning-of-history)25 b(\(M-<\))630 1199 +y Ft(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8 +b(.)150 1352 y Fs(end-of-history)26 b(\(M->\))630 1462 +y Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8 +b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150 +1616 y Fs(reverse-search-history)24 b(\(C-r\))630 1725 +y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g +(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630 +1835 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m +(tal)i(searc)m(h.)150 1989 y Fs(forward-search-history)24 +b(\(C-s\))630 2098 y Ft(Searc)m(h)30 b(forw)m(ard)f(starting)h(at)g +(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn')f(through)g(the) +h(the)630 2208 y(history)g(as)h(necessary)-8 b(.)41 b(This)30 +b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 2362 y Fs +(non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 +b(\(M-p\))630 2471 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g +(the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g +(his-)630 2581 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m +(tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 2690 y(user.)150 2844 y Fs(non-incremental-forward-)o(sear)o(ch-h)o (ist)o(ory)24 b(\(M-n\))630 2954 y Ft(Searc)m(h)30 b(forw)m(ard)f -(starting)g(at)h(the)g(curren)m(t)f(line)f(and)h(mo)m(ving)g(`do)m(wn') -g(through)g(the)h(the)630 3063 y(history)c(as)g(necessary)i(using)d(a)i -(non-incremen)m(tal)e(searc)m(h)j(for)e(a)h(string)f(supplied)d(b)m(y)k +(starting)h(at)g(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn') +f(through)g(the)h(the)630 3063 y(history)d(as)f(necessary)i(using)e(a)h +(non-incremen)m(tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i (the)630 3173 y(user.)150 3327 y Fs(history-search-forward)d(\(\))630 -3436 y Ft(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)e(for)h -(the)h(string)e(of)i(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 -3546 y(start)36 b(of)f(the)g(curren)m(t)g(line)e(and)i(the)g(p)s(oin)m -(t.)54 b(This)33 b(is)i(a)g(non-incremen)m(tal)f(searc)m(h.)56 -b(By)630 3655 y(default,)30 b(this)f(command)h(is)g(un)m(b)s(ound.)150 +3436 y Ft(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g +(the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 +3546 y(start)36 b(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m +(t.)55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56 +b(By)630 3655 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 3809 y Fs(history-search-backward)24 b(\(\))630 3919 -y Ft(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)f(for)h -(the)f(string)g(of)h(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 -4028 y(start)g(of)f(the)g(curren)m(t)g(line)e(and)i(the)g(p)s(oin)m(t.) -54 b(This)33 b(is)i(a)g(non-incremen)m(tal)f(searc)m(h.)56 -b(By)630 4138 y(default,)30 b(this)f(command)h(is)g(un)m(b)s(ound.)150 -4292 y Fs(yank-nth-arg)d(\(M-C-y\))630 4401 y Ft(Insert)e(the)i -(\014rst)e(argumen)m(t)h(to)h(the)f(previous)f(command)g(\(usually)f -(the)i(second)g(w)m(ord)g(on)630 4511 y(the)k(previous)f(line\))f(at)j -(p)s(oin)m(t.)39 b(With)30 b(an)g(argumen)m(t)g Fq(n)p -Ft(,)g(insert)e(the)j Fq(n)p Ft(th)e(w)m(ord)g(from)h(the)630 -4621 y(previous)25 b(command)i(\(the)h(w)m(ords)e(in)g(the)h(previous)e -(command)i(b)s(egin)e(with)h(w)m(ord)h(0\).)40 b(A)630 -4730 y(negativ)m(e)27 b(argumen)m(t)f(inserts)e(the)i -Fq(n)p Ft(th)f(w)m(ord)g(from)g(the)h(end)f(of)h(the)g(previous)e -(command.)150 4884 y Fs(yank-last-arg)j(\(M-.)i(or)h(M-_\))630 -4994 y Ft(Insert)k(last)h(argumen)m(t)h(to)g(the)f(previous)e(command)i -(\(the)h(last)e(w)m(ord)h(of)g(the)g(previous)630 5103 -y(history)30 b(en)m(try\).)41 b(With)30 b(an)h(argumen)m(t,)g(b)s(eha)m -(v)m(e)g(exactly)h(lik)m(e)e Fs(yank-nth-arg)p Ft(.)38 -b(Succes-)630 5213 y(siv)m(e)c(calls)g(to)h Fs(yank-last-arg)c -Ft(mo)m(v)m(e)36 b(bac)m(k)g(through)d(the)i(history)f(list,)g -(inserting)f(the)630 5322 y(last)d(argumen)m(t)h(of)g(eac)m(h)g(line)e -(in)g(turn.)p eop +y Ft(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g +(the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 +4028 y(start)g(of)f(the)g(curren)m(t)g(line)g(and)g(the)g(p)s(oin)m(t.) +55 b(This)34 b(is)i(a)f(non-incremen)m(tal)h(searc)m(h.)56 +b(By)630 4138 y(default,)31 b(this)f(command)g(is)h(un)m(b)s(ound.)150 +4292 y Fs(yank-nth-arg)c(\(M-C-y\))630 4401 y Ft(Insert)e(the)i +(\014rst)e(argumen)m(t)h(to)h(the)f(previous)g(command)f(\(usually)h +(the)g(second)g(w)m(ord)g(on)630 4511 y(the)k(previous)g(line\))g(at)h +(p)s(oin)m(t.)40 b(With)31 b(an)f(argumen)m(t)g Fq(n)p +Ft(,)g(insert)f(the)i Fq(n)p Ft(th)e(w)m(ord)g(from)h(the)630 +4621 y(previous)c(command)h(\(the)h(w)m(ords)e(in)h(the)g(previous)f +(command)h(b)s(egin)f(with)h(w)m(ord)g(0\).)40 b(A)630 +4730 y(negativ)m(e)28 b(argumen)m(t)e(inserts)f(the)h +Fq(n)p Ft(th)f(w)m(ord)g(from)g(the)h(end)f(of)h(the)g(previous)f +(command.)150 4884 y Fs(yank-last-arg)i(\(M-.)i(or)h(M-_\))630 +4994 y Ft(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous)f(command)h +(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 5103 +y(history)c(en)m(try\).)41 b(With)31 b(an)g(argumen)m(t,)g(b)s(eha)m(v) +m(e)g(exactly)i(lik)m(e)f Fs(yank-nth-arg)p Ft(.)38 b(Succes-)630 +5213 y(siv)m(e)d(calls)h(to)f Fs(yank-last-arg)c Ft(mo)m(v)m(e)36 +b(bac)m(k)g(through)d(the)i(history)g(list,)h(inserting)f(the)630 +5322 y(last)c(argumen)m(t)g(of)g(eac)m(h)g(line)g(in)f(turn.)p +eop end %%Page: 97 103 -97 102 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(97)150 299 y Fk(8.4.3)63 b(Commands)40 -b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 549 y Fs(delete-char)27 -b(\(C-d\))630 659 y Ft(Delete)40 b(the)f(c)m(haracter)i(at)e(p)s(oin)m -(t.)65 b(If)39 b(p)s(oin)m(t)e(is)h(at)i(the)f(b)s(eginning)d(of)j(the) -g(line,)h(there)630 769 y(are)d(no)g(c)m(haracters)i(in)c(the)j(line,)f -(and)f(the)h(last)g(c)m(haracter)i(t)m(yp)s(ed)e(w)m(as)g(not)g(b)s -(ound)e(to)630 878 y Fs(delete-char)p Ft(,)28 b(then)i(return)f -Fl(eof)p Ft(.)150 1050 y Fs(backward-delete-char)c(\(Rubout\))630 -1160 y Ft(Delete)31 b(the)g(c)m(haracter)g(b)s(ehind)d(the)i(cursor.)40 -b(A)30 b(n)m(umeric)f(argumen)m(t)i(means)f(to)h(kill)d(the)630 -1270 y(c)m(haracters)k(instead)d(of)i(deleting)e(them.)150 +TeXDict begin 97 102 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(97)150 299 y Fk(8.4.3)63 +b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 +549 y Fs(delete-char)27 b(\(C-d\))630 659 y Ft(Delete)41 +b(the)e(c)m(haracter)i(at)e(p)s(oin)m(t.)66 b(If)39 b(p)s(oin)m(t)f(is) +h(at)h(the)f(b)s(eginning)f(of)h(the)g(line,)j(there)630 +769 y(are)37 b(no)g(c)m(haracters)i(in)d(the)i(line,)h(and)d(the)h +(last)h(c)m(haracter)h(t)m(yp)s(ed)e(w)m(as)g(not)g(b)s(ound)e(to)630 +878 y Fs(delete-char)p Ft(,)28 b(then)i(return)f Fl(eof)p +Ft(.)150 1050 y Fs(backward-delete-char)c(\(Rubout\))630 +1160 y Ft(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 +b(A)30 b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630 +1270 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 1442 y Fs(forward-backward-delete-)o(char)24 b(\(\))630 -1551 y Ft(Delete)39 b(the)g(c)m(haracter)h(under)c(the)j(cursor,)h -(unless)c(the)j(cursor)e(is)g(at)i(the)g(end)e(of)i(the)630 -1661 y(line,)31 b(in)f(whic)m(h)g(case)j(the)f(c)m(haracter)h(b)s -(ehind)c(the)j(cursor)f(is)f(deleted.)45 b(By)32 b(default,)f(this)630 -1771 y(is)e(not)i(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 +1551 y Ft(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h +(unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630 +1661 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s +(ehind)d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630 +1771 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 1943 y Fs(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 2052 -y Ft(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)f -(v)m(erbatim.)52 b(This)32 b(is)i(ho)m(w)g(to)h(insert)e(k)m(ey)630 -2162 y(sequences)e(lik)m(e)e Fj(C-q)p Ft(,)h(for)g(example.)150 +y Ft(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h +(v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630 +2162 y(sequences)d(lik)m(e)g Fj(C-q)p Ft(,)f(for)g(example.)150 2334 y Fs(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o(\))630 2444 y Ft(Insert)g(y)m(ourself.)150 2616 y Fs(transpose-chars)c (\(C-t\))630 2725 y Ft(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g (cursor)f(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g -(cursor,)630 2835 y(mo)m(ving)j(the)h(cursor)f(forw)m(ard)g(as)g(w)m -(ell.)55 b(If)35 b(the)h(insertion)e(p)s(oin)m(t)g(is)g(at)j(the)e(end) -g(of)h(the)630 2945 y(line,)22 b(then)g(this)f(transp)s(oses)g(the)h -(last)g(t)m(w)m(o)h(c)m(haracters)g(of)f(the)h(line.)36 -b(Negativ)m(e)24 b(argumen)m(ts)630 3054 y(ha)m(v)m(e)32 +(cursor,)630 2835 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m +(ell.)57 b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end) +g(of)h(the)630 2945 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h +(last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 +b(Negativ)m(e)25 b(argumen)m(ts)630 3054 y(ha)m(v)m(e)32 b(no)e(e\013ect.)150 3226 y Fs(transpose-words)c(\(M-t\))630 -3336 y Ft(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)f(past)h -(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)h(mo)m(ving)f(p)s(oin)m(t)f(past) -h(that)630 3446 y(w)m(ord)c(as)h(w)m(ell.)39 b(If)27 -b(the)i(insertion)d(p)s(oin)m(t)i(is)f(at)i(the)g(end)e(of)i(the)f -(line,)g(this)f(transp)s(oses)h(the)630 3555 y(last)i(t)m(w)m(o)i(w)m +3336 y Ft(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)g(past)g +(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin)m(t)f(past) +g(that)630 3446 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 +b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i(the)f +(line,)i(this)e(transp)s(oses)g(the)630 3555 y(last)j(t)m(w)m(o)h(w)m (ords)e(on)g(the)h(line.)150 3727 y Fs(upcase-word)c(\(M-u\))630 -3837 y Ft(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))f -(w)m(ord.)45 b(With)31 b(a)h(negativ)m(e)i(argumen)m(t,)f(upp)s(er-)630 -3947 y(case)e(the)g(previous)e(w)m(ord,)h(but)g(do)g(not)h(mo)m(v)m(e)h +3837 y Ft(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i +(w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 +3947 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h (the)e(cursor.)150 4119 y Fs(downcase-word)d(\(M-l\))630 -4228 y Ft(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))f -(w)m(ord.)37 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h(lo)m(w)m -(ercase)630 4338 y(the)31 b(previous)d(w)m(ord,)j(but)e(do)i(not)f(mo)m +4228 y Ft(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i +(w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m +(ercase)630 4338 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m (v)m(e)i(the)f(cursor.)150 4510 y Fs(capitalize-word)26 -b(\(M-c\))630 4620 y Ft(Capitalize)20 b(the)i(curren)m(t)f(\(or)g -(follo)m(wing\))f(w)m(ord.)38 b(With)20 b(a)i(negativ)m(e)g(argumen)m -(t,)i(capitalize)630 4729 y(the)31 b(previous)d(w)m(ord,)j(but)e(do)i -(not)f(mo)m(v)m(e)i(the)f(cursor.)150 4902 y Fs(overwrite-mode)26 -b(\(\))630 5011 y Ft(T)-8 b(oggle)34 b(o)m(v)m(erwrite)g(mo)s(de.)48 -b(With)32 b(an)h(explicit)e(p)s(ositiv)m(e)h(n)m(umeric)g(argumen)m(t,) -i(switc)m(hes)630 5121 y(to)22 b(o)m(v)m(erwrite)h(mo)s(de.)37 -b(With)21 b(an)h(explicit)e(non-p)s(ositiv)m(e)g(n)m(umeric)h(argumen)m -(t,)j(switc)m(hes)d(to)630 5230 y(insert)29 b(mo)s(de.)41 -b(This)29 b(command)i(a\013ects)h(only)d Fs(emacs)g Ft(mo)s(de;)i +b(\(M-c\))630 4620 y Ft(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m +(wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h +(capitalize)630 4729 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f +(mo)m(v)m(e)i(the)f(cursor.)150 4902 y Fs(overwrite-mode)26 +b(\(\))630 5011 y Ft(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 +b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) +h(switc)m(hes)630 5121 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 +b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m +(t,)i(switc)m(hes)e(to)630 5230 y(insert)30 b(mo)s(de.)41 +b(This)30 b(command)h(a\013ects)h(only)e Fs(emacs)f Ft(mo)s(de;)i Fs(vi)f Ft(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 5340 -y(di\013eren)m(tly)-8 b(.)40 b(Eac)m(h)31 b(call)f(to)h -Fs(readline\(\))c Ft(starts)k(in)e(insert)g(mo)s(de.)p -eop +y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f +Fs(readline\(\))c Ft(starts)k(in)f(insert)g(mo)s(de.)p +eop end %%Page: 98 104 -98 103 bop 150 -116 a Ft(98)2572 b(Bash)31 b(Reference)g(Man)m(ual)630 -299 y(In)d(o)m(v)m(erwrite)i(mo)s(de,)f(c)m(haracters)i(b)s(ound)c(to)j -Fs(self-insert)c Ft(replace)j(the)h(text)g(at)g(p)s(oin)m(t)630 -408 y(rather)41 b(than)h(pushing)d(the)j(text)g(to)g(the)g(righ)m(t.)74 -b(Characters)42 b(b)s(ound)d(to)j Fs(backward-)630 518 -y(delete-char)27 b Ft(replace)k(the)f(c)m(haracter)i(b)s(efore)e(p)s -(oin)m(t)g(with)f(a)h(space.)630 656 y(By)h(default,)e(this)h(command)g -(is)f(un)m(b)s(ound.)150 896 y Fk(8.4.4)63 b(Killing)42 -b(And)e(Y)-10 b(anking)150 1144 y Fs(kill-line)28 b(\(C-k\))630 -1253 y Ft(Kill)g(the)i(text)i(from)e(p)s(oin)m(t)f(to)i(the)g(end)e(of) -i(the)f(line.)150 1420 y Fs(backward-kill-line)25 b(\(C-x)30 -b(Rubout\))630 1530 y Ft(Kill)e(bac)m(kw)m(ard)j(to)g(the)f(b)s -(eginning)e(of)i(the)h(line.)150 1697 y Fs(unix-line-discard)26 -b(\(C-u\))630 1807 y Ft(Kill)i(bac)m(kw)m(ard)j(from)e(the)i(cursor)f -(to)h(the)f(b)s(eginning)e(of)j(the)f(curren)m(t)g(line.)150 -1974 y Fs(kill-whole-line)c(\(\))630 2083 y Ft(Kill)34 -b(all)h(c)m(haracters)j(on)f(the)f(curren)m(t)h(line,)f(no)h(matter)g -(where)f(p)s(oin)m(t)g(is.)58 b(By)36 b(default,)630 -2193 y(this)29 b(is)h(un)m(b)s(ound.)150 2360 y Fs(kill-word)e(\(M-d\)) -630 2469 y Ft(Kill)f(from)i(p)s(oin)m(t)f(to)i(the)g(end)e(of)i(the)f -(curren)m(t)h(w)m(ord,)f(or)g(if)g(b)s(et)m(w)m(een)h(w)m(ords,)f(to)h +TeXDict begin 98 103 bop 150 -116 a Ft(98)2572 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(In)d(o)m(v)m(erwrite)j(mo)s(de,)e(c)m +(haracters)i(b)s(ound)c(to)j Fs(self-insert)c Ft(replace)k(the)g(text)g +(at)g(p)s(oin)m(t)630 408 y(rather)41 b(than)h(pushing)e(the)i(text)g +(to)g(the)g(righ)m(t.)75 b(Characters)42 b(b)s(ound)d(to)j +Fs(backward-)630 518 y(delete-char)27 b Ft(replace)32 +b(the)e(c)m(haracter)i(b)s(efore)e(p)s(oin)m(t)h(with)f(a)g(space.)630 +656 y(By)h(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150 +896 y Fk(8.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150 +1144 y Fs(kill-line)28 b(\(C-k\))630 1253 y Ft(Kill)j(the)f(text)i +(from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f(line.)150 +1420 y Fs(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630 +1530 y Ft(Kill)h(bac)m(kw)m(ard)g(to)g(the)f(b)s(eginning)g(of)g(the)h +(line.)150 1697 y Fs(unix-line-discard)26 b(\(C-u\))630 +1807 y Ft(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f +(b)s(eginning)g(of)h(the)f(curren)m(t)g(line.)150 1974 +y Fs(kill-whole-line)c(\(\))630 2083 y Ft(Kill)37 b(all)g(c)m +(haracters)h(on)f(the)f(curren)m(t)h(line,)h(no)f(matter)g(where)f(p)s +(oin)m(t)h(is.)59 b(By)36 b(default,)630 2193 y(this)30 +b(is)h(un)m(b)s(ound.)150 2360 y Fs(kill-word)d(\(M-d\))630 +2469 y Ft(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f +(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h (the)g(end)630 2579 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 -b(ord)31 b(b)s(oundaries)d(are)i(the)h(same)g(as)f Fs(forward-word)p +b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fs(forward-word)p Ft(.)150 2746 y Fs(backward-kill-word)25 b(\(M-)1183 2743 y Fg(h)p 1207 2690 146 4 v 1207 2746 a Ff(DEL)p 1207 2761 V 1348 2743 a Fg(i)1378 2746 y Fs(\))630 2856 -y Ft(Kill)h(the)j(w)m(ord)g(b)s(ehind)d(p)s(oin)m(t.)39 -b(W)-8 b(ord)29 b(b)s(oundaries)e(are)i(the)g(same)g(as)g +y Ft(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t.)40 +b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g Fs(backward-word)p Ft(.)150 3023 y Fs(unix-word-rubout)d(\(C-w\))630 -3132 y Ft(Kill)j(the)j(w)m(ord)f(b)s(ehind)e(p)s(oin)m(t,)i(using)f -(white)h(space)h(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43 -b(The)31 b(killed)630 3242 y(text)g(is)f(sa)m(v)m(ed)h(on)g(the)f +3132 y Ft(Kill)32 b(the)g(w)m(ord)f(b)s(ehind)f(p)s(oin)m(t,)i(using)f +(white)h(space)g(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43 +b(The)31 b(killed)630 3242 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f (kill-ring.)150 3409 y Fs(unix-filename-rubout)25 b(\(\))630 -3518 y Ft(Kill)34 b(the)i(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t,)j(using)e -(white)g(space)i(and)f(the)g(slash)f(c)m(haracter)j(as)f(the)630 -3628 y(w)m(ord)30 b(b)s(oundaries.)38 b(The)30 b(killed)e(text)j(is)f -(sa)m(v)m(ed)h(on)g(the)f(kill-ring.)150 3795 y Fs -(delete-horizontal-space)24 b(\(\))630 3905 y Ft(Delete)32 -b(all)d(spaces)i(and)e(tabs)i(around)e(p)s(oin)m(t.)40 -b(By)31 b(default,)e(this)h(is)f(un)m(b)s(ound.)150 4072 -y Fs(kill-region)e(\(\))630 4181 y Ft(Kill)h(the)i(text)i(in)d(the)h -(curren)m(t)h(region.)40 b(By)31 b(default,)e(this)h(command)g(is)f(un) -m(b)s(ound.)150 4348 y Fs(copy-region-as-kill)c(\(\))630 -4458 y Ft(Cop)m(y)34 b(the)g(text)h(in)e(the)h(region)f(to)i(the)f -(kill)e(bu\013er,)i(so)g(it)g(can)g(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)e -(a)m(w)m(a)m(y)-8 b(.)630 4568 y(By)31 b(default,)e(this)h(command)g -(is)f(un)m(b)s(ound.)150 4735 y Fs(copy-backward-word)c(\(\))630 -4844 y Ft(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)f(to)j -(the)e(kill)e(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries)e(are)j -(the)630 4954 y(same)31 b(as)f Fs(backward-word)p Ft(.)38 -b(By)30 b(default,)g(this)f(command)h(is)g(un)m(b)s(ound.)150 -5121 y Fs(copy-forward-word)c(\(\))630 5230 y Ft(Cop)m(y)31 -b(the)g(w)m(ord)g(follo)m(wing)e(p)s(oin)m(t)h(to)i(the)f(kill)e -(bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)d(are)k(the)630 +3518 y Ft(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m(t,)j(using)e +(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f(the)630 +3628 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g +(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150 3795 y Fs +(delete-horizontal-space)24 b(\(\))630 3905 y Ft(Delete)33 +b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41 +b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 4072 +y Fs(kill-region)d(\(\))630 4181 y Ft(Kill)k(the)f(text)i(in)e(the)g +(curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g(un) +m(b)s(ound.)150 4348 y Fs(copy-region-as-kill)25 b(\(\))630 +4458 y Ft(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f +(kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)f +(a)m(w)m(a)m(y)-8 b(.)630 4568 y(By)31 b(default,)f(this)h(command)f +(is)g(un)m(b)s(ound.)150 4735 y Fs(copy-backward-word)25 +b(\(\))630 4844 y Ft(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m +(t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) +f(are)i(the)630 4954 y(same)31 b(as)f Fs(backward-word)p +Ft(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)150 +5121 y Fs(copy-forward-word)26 b(\(\))630 5230 y Ft(Cop)m(y)31 +b(the)g(w)m(ord)g(follo)m(wing)h(p)s(oin)m(t)f(to)h(the)f(kill)h +(bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)e(are)j(the)630 5340 y(same)f(as)f Fs(forward-word)p Ft(.)38 b(By)30 -b(default,)g(this)g(command)g(is)f(un)m(b)s(ound.)p eop +b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)p eop +end %%Page: 99 105 -99 104 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2105 b(99)150 299 y Fs(yank)29 b(\(C-y\))630 -408 y Ft(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)e(ring)h(in)m(to)i -(the)f(bu\013er)g(at)h(p)s(oin)m(t.)150 558 y Fs(yank-pop)d(\(M-y\))630 -667 y Ft(Rotate)36 b(the)f(kill-ring,)e(and)h(y)m(ank)h(the)f(new)g -(top.)54 b(Y)-8 b(ou)35 b(can)g(only)e(do)i(this)e(if)h(the)h(prior)630 -777 y(command)30 b(is)g Fs(yank)f Ft(or)h Fs(yank-pop)p -Ft(.)150 986 y Fk(8.4.5)63 b(Sp)s(ecifying)41 b(Numeric)f(Argumen)m(ts) -150 1225 y Fs(digit-argument)26 b(\()p Fj(M-0)p Fs(,)j -Fj(M-1)p Fs(,)h(...)f Fj(M--)p Fs(\))630 1335 y Ft(Add)d(this)g(digit)f -(to)j(the)f(argumen)m(t)g(already)g(accum)m(ulating,)g(or)g(start)h(a)f -(new)f(argumen)m(t.)630 1445 y Fj(M--)j Ft(starts)i(a)g(negativ)m(e)h +TeXDict begin 99 104 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2107 b(99)150 299 y Fs(yank)29 +b(\(C-y\))630 408 y Ft(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)h +(ring)f(in)m(to)i(the)e(bu\013er)g(at)h(p)s(oin)m(t.)150 +558 y Fs(yank-pop)d(\(M-y\))630 667 y Ft(Rotate)36 b(the)f(kill-ring,)i +(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h +(this)f(if)h(the)g(prior)630 777 y(command)30 b(is)h +Fs(yank)e Ft(or)h Fs(yank-pop)p Ft(.)150 986 y Fk(8.4.5)63 +b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m(ts)150 1225 +y Fs(digit-argument)26 b(\()p Fj(M-0)p Fs(,)j Fj(M-1)p +Fs(,)h(...)f Fj(M--)p Fs(\))630 1335 y Ft(Add)d(this)h(digit)g(to)h +(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f(new) +f(argumen)m(t.)630 1445 y Fj(M--)j Ft(starts)i(a)g(negativ)m(e)i (argumen)m(t.)150 1594 y Fs(universal-argument)25 b(\(\))630 -1704 y Ft(This)f(is)g(another)i(w)m(a)m(y)g(to)h(sp)s(ecify)d(an)h -(argumen)m(t.)40 b(If)25 b(this)f(command)i(is)e(follo)m(w)m(ed)h(b)m -(y)h(one)630 1813 y(or)k(more)f(digits,)g(optionally)f(with)g(a)i -(leading)f(min)m(us)f(sign,)h(those)h(digits)e(de\014ne)h(the)h(ar-)630 -1923 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)f(follo)m(w)m(ed)g(b) -m(y)h(digits,)g(executing)g Fs(universal-argument)630 -2032 y Ft(again)j(ends)f(the)h(n)m(umeric)e(argumen)m(t,)j(but)e(is)g -(otherwise)g(ignored.)44 b(As)32 b(a)g(sp)s(ecial)f(case,)630 -2142 y(if)h(this)g(command)g(is)g(immediately)f(follo)m(w)m(ed)i(b)m(y) -f(a)h(c)m(haracter)i(that)e(is)f(neither)g(a)h(digit)630 -2252 y(or)28 b(min)m(us)e(sign,)i(the)g(argumen)m(t)g(coun)m(t)h(for)e -(the)i(next)f(command)f(is)g(m)m(ultiplied)e(b)m(y)i(four.)630 -2361 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)g(initially)d(one,)39 -b(so)f(executing)f(this)f(function)g(the)i(\014rst)e(time)630 +1704 y Ft(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g +(argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m +(y)f(one)630 1813 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h +(leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630 +1923 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b) +m(y)f(digits,)i(executing)f Fs(universal-argument)630 +2032 y Ft(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h +(otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630 +2142 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y) +d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630 +2252 y(or)28 b(min)m(us)f(sign,)i(the)f(argumen)m(t)g(coun)m(t)h(for)e +(the)i(next)f(command)f(is)h(m)m(ultiplied)h(b)m(y)e(four.)630 +2361 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)h(initially)h(one,)g(so)f +(executing)g(this)f(function)g(the)h(\014rst)e(time)630 2471 y(mak)m(es)d(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)i(second)e -(time)h(mak)m(es)g(the)g(argumen)m(t)g(coun)m(t)h(six-)630 -2580 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)f(this)f(is)g(not)i +(time)i(mak)m(es)f(the)g(argumen)m(t)g(coun)m(t)h(six-)630 +2580 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g(not)h (b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 2790 y Fk(8.4.6)63 b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42 b(Y)-10 b(ou)150 3029 y Fs(complete)28 b(\()610 3026 y Fg(h)p 634 2973 148 4 v 634 3029 a Ff(T)-6 b(AB)p 634 3044 V 778 3026 a Fg(i)808 3029 y Fs(\))630 3138 y Ft(A)m(ttempt)24 -b(to)f(p)s(erform)e(completion)h(on)h(the)g(text)g(b)s(efore)f(p)s(oin) -m(t.)38 b(The)22 b(actual)h(completion)630 3248 y(p)s(erformed)33 -b(is)g(application-sp)s(eci\014c.)49 b(Bash)35 b(attempts)g(completion) -e(treating)i(the)f(text)630 3357 y(as)39 b(a)h(v)-5 b(ariable)37 -b(\(if)i(the)g(text)h(b)s(egins)d(with)h(`)p Fs($)p Ft('\),)k(username) -c(\(if)h(the)g(text)h(b)s(egins)d(with)630 3467 y(`)p -Fs(~)p Ft('\),)31 b(hostname)f(\(if)f(the)h(text)h(b)s(egins)d(with)h -(`)p Fs(@)p Ft('\),)i(or)f(command)f(\(including)e(aliases)j(and)630 -3577 y(functions\))k(in)f(turn.)53 b(If)34 b(none)g(of)h(these)h(pro)s -(duces)d(a)i(matc)m(h,)i(\014lename)d(completion)g(is)630 +b(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g(b)s(efore)f(p)s(oin) +m(t.)39 b(The)22 b(actual)i(completion)630 3248 y(p)s(erformed)33 +b(is)h(application-sp)s(eci\014c.)53 b(Bash)35 b(attempts)g(completion) +g(treating)h(the)e(text)630 3357 y(as)39 b(a)h(v)-5 b(ariable)39 +b(\(if)h(the)f(text)h(b)s(egins)e(with)h(`)p Fs($)p Ft('\),)j(username) +c(\(if)i(the)f(text)h(b)s(egins)e(with)630 3467 y(`)p +Fs(~)p Ft('\),)31 b(hostname)f(\(if)g(the)g(text)h(b)s(egins)e(with)h +(`)p Fs(@)p Ft('\),)h(or)f(command)f(\(including)h(aliases)i(and)630 +3577 y(functions\))j(in)f(turn.)53 b(If)34 b(none)g(of)h(these)h(pro)s +(duces)d(a)i(matc)m(h,)i(\014lename)e(completion)h(is)630 3686 y(attempted.)150 3836 y Fs(possible-completions)25 -b(\(M-?\))630 3945 y Ft(List)30 b(the)g(p)s(ossible)e(completions)i(of) -g(the)h(text)g(b)s(efore)f(p)s(oin)m(t.)150 4095 y Fs +b(\(M-?\))630 3945 y Ft(List)31 b(the)f(p)s(ossible)g(completions)i(of) +e(the)h(text)g(b)s(efore)f(p)s(oin)m(t.)150 4095 y Fs (insert-completions)25 b(\(M-*\))630 4204 y Ft(Insert)30 -b(all)f(completions)h(of)h(the)g(text)g(b)s(efore)f(p)s(oin)m(t)g(that) -h(w)m(ould)e(ha)m(v)m(e)j(b)s(een)e(generated)630 4314 +b(all)h(completions)h(of)f(the)g(text)g(b)s(efore)f(p)s(oin)m(t)h(that) +g(w)m(ould)f(ha)m(v)m(e)i(b)s(een)e(generated)630 4314 y(b)m(y)g Fs(possible-completions)p Ft(.)150 4463 y Fs(menu-complete)d -(\(\))630 4573 y Ft(Similar)21 b(to)j Fs(complete)p Ft(,)f(but)h -(replaces)f(the)h(w)m(ord)g(to)g(b)s(e)f(completed)h(with)e(a)j(single) -d(matc)m(h)630 4682 y(from)37 b(the)h(list)f(of)h(p)s(ossible)d -(completions.)62 b(Rep)s(eated)39 b(execution)f(of)g -Fs(menu-complete)630 4792 y Ft(steps)i(through)g(the)g(list)f(of)h(p)s -(ossible)e(completions,)k(inserting)c(eac)m(h)k(matc)m(h)f(in)e(turn.) -630 4902 y(A)m(t)f(the)f(end)f(of)h(the)g(list)e(of)i(completions,)g -(the)g(b)s(ell)e(is)h(rung)g(\(sub)5 b(ject)36 b(to)i(the)f(setting)630 -5011 y(of)f Fs(bell-style)p Ft(\))e(and)h(the)h(original)f(text)i(is)e +(\(\))630 4573 y Ft(Similar)d(to)g Fs(complete)p Ft(,)f(but)h(replaces) +g(the)g(w)m(ord)g(to)g(b)s(e)f(completed)i(with)e(a)i(single)f(matc)m +(h)630 4682 y(from)37 b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 +b(Rep)s(eated)39 b(execution)g(of)f Fs(menu-complete)630 +4792 y Ft(steps)i(through)g(the)g(list)h(of)f(p)s(ossible)g +(completions,)k(inserting)c(eac)m(h)i(matc)m(h)f(in)f(turn.)630 +4902 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g(of)g(completions,)i(the)e +(b)s(ell)g(is)g(rung)f(\(sub)5 b(ject)36 b(to)i(the)f(setting)630 +5011 y(of)f Fs(bell-style)p Ft(\))e(and)h(the)h(original)i(text)f(is)f (restored.)57 b(An)36 b(argumen)m(t)h(of)f Fq(n)f Ft(mo)m(v)m(es)i -Fq(n)630 5121 y Ft(p)s(ositions)c(forw)m(ard)h(in)f(the)i(list)f(of)g -(matc)m(hes;)39 b(a)c(negativ)m(e)h(argumen)m(t)f(ma)m(y)g(b)s(e)f +Fq(n)630 5121 y Ft(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e +(matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f (used)g(to)630 5230 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g -(list.)63 b(This)37 b(command)h(is)f(in)m(tended)g(to)i(b)s(e)f(b)s +(list.)65 b(This)38 b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s (ound)e(to)630 5337 y Fg(h)p 654 5284 V 654 5340 a Ff(T)-6 b(AB)p 654 5355 V 798 5337 a Fg(i)828 5340 y Ft(,)30 -b(but)g(is)f(un)m(b)s(ound)f(b)m(y)i(default.)p eop +b(but)g(is)g(un)m(b)s(ound)e(b)m(y)i(default.)p eop end %%Page: 100 106 -100 105 bop 150 -116 a Ft(100)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fs(delete-char-or-list)25 b(\(\))630 408 y -Ft(Deletes)j(the)f(c)m(haracter)h(under)e(the)h(cursor)f(if)g(not)h(at) -g(the)g(b)s(eginning)e(or)h(end)h(of)g(the)g(line)630 -518 y(\(lik)m(e)i Fs(delete-char)p Ft(\).)37 b(If)29 -b(at)h(the)f(end)f(of)i(the)f(line,)f(b)s(eha)m(v)m(es)i(iden)m -(tically)d(to)i Fs(possible-)630 628 y(completions)p -Ft(.)38 b(This)28 b(command)i(is)g(un)m(b)s(ound)e(b)m(y)i(default.)150 +TeXDict begin 100 105 bop 150 -116 a Ft(100)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(delete-char-or-list)25 +b(\(\))630 408 y Ft(Deletes)k(the)e(c)m(haracter)h(under)e(the)h +(cursor)f(if)h(not)g(at)g(the)g(b)s(eginning)g(or)f(end)h(of)g(the)g +(line)630 518 y(\(lik)m(e)k Fs(delete-char)p Ft(\).)37 +b(If)29 b(at)h(the)f(end)f(of)i(the)f(line,)h(b)s(eha)m(v)m(es)g(iden)m +(tically)h(to)e Fs(possible-)630 628 y(completions)p +Ft(.)38 b(This)29 b(command)h(is)h(un)m(b)s(ound)d(b)m(y)i(default.)150 789 y Fs(complete-filename)c(\(M-/\))630 899 y Ft(A)m(ttempt)32 -b(\014lename)d(completion)h(on)g(the)h(text)g(b)s(efore)f(p)s(oin)m(t.) +b(\014lename)e(completion)i(on)e(the)h(text)g(b)s(efore)f(p)s(oin)m(t.) 150 1060 y Fs(possible-filename-comple)o(tion)o(s)24 -b(\(C-x)30 b(/\))630 1170 y Ft(List)e(the)h(p)s(ossible)d(completions)h -(of)i(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)f(treating)h(it)f(as)h(a)f +b(\(C-x)30 b(/\))630 1170 y Ft(List)f(the)g(p)s(ossible)f(completions)h +(of)g(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)g(treating)h(it)f(as)g(a)f (\014lename.)150 1331 y Fs(complete-username)e(\(M-~\))630 -1441 y Ft(A)m(ttempt)32 b(completion)d(on)i(the)f(text)i(b)s(efore)e(p) -s(oin)m(t,)f(treating)i(it)f(as)g(a)h(username.)150 1602 +1441 y Ft(A)m(ttempt)32 b(completion)f(on)g(the)f(text)i(b)s(efore)e(p) +s(oin)m(t,)g(treating)i(it)f(as)f(a)h(username.)150 1602 y Fs(possible-username-comple)o(tion)o(s)24 b(\(C-x)30 -b(~\))630 1712 y Ft(List)24 b(the)h(p)s(ossible)e(completions)h(of)h -(the)g(text)h(b)s(efore)f(p)s(oin)m(t,)g(treating)g(it)g(as)g(a)g +b(~\))630 1712 y Ft(List)25 b(the)g(p)s(ossible)g(completions)h(of)f +(the)g(text)h(b)s(efore)f(p)s(oin)m(t,)h(treating)g(it)g(as)f(a)g (username.)150 1873 y Fs(complete-variable)h(\(M-$\))630 -1983 y Ft(A)m(ttempt)32 b(completion)d(on)i(the)f(text)i(b)s(efore)e(p) -s(oin)m(t,)f(treating)i(it)f(as)g(a)h(shell)e(v)-5 b(ariable.)150 +1983 y Ft(A)m(ttempt)32 b(completion)f(on)g(the)f(text)i(b)s(efore)e(p) +s(oin)m(t,)g(treating)i(it)f(as)f(a)h(shell)g(v)-5 b(ariable.)150 2144 y Fs(possible-variable-comple)o(tion)o(s)24 b(\(C-x)30 -b($\))630 2254 y Ft(List)41 b(the)h(p)s(ossible)e(completions)h(of)h -(the)g(text)h(b)s(efore)e(p)s(oin)m(t,)k(treating)d(it)f(as)h(a)h +b($\))630 2254 y Ft(List)42 b(the)g(p)s(ossible)g(completions)h(of)f +(the)g(text)h(b)s(efore)e(p)s(oin)m(t,)46 b(treating)d(it)f(as)g(a)h (shell)630 2364 y(v)-5 b(ariable.)150 2525 y Fs(complete-hostname)26 -b(\(M-@\))630 2635 y Ft(A)m(ttempt)32 b(completion)d(on)i(the)f(text)i -(b)s(efore)e(p)s(oin)m(t,)f(treating)i(it)f(as)g(a)h(hostname.)150 +b(\(M-@\))630 2635 y Ft(A)m(ttempt)32 b(completion)f(on)g(the)f(text)i +(b)s(efore)e(p)s(oin)m(t,)g(treating)i(it)f(as)f(a)h(hostname.)150 2796 y Fs(possible-hostname-comple)o(tion)o(s)24 b(\(C-x)30 -b(@\))630 2906 y Ft(List)24 b(the)h(p)s(ossible)d(completions)h(of)i -(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)g(treating)g(it)f(as)g(a)h +b(@\))630 2906 y Ft(List)25 b(the)g(p)s(ossible)f(completions)h(of)g +(the)g(text)g(b)s(efore)g(p)s(oin)m(t,)h(treating)g(it)f(as)f(a)h (hostname.)150 3067 y Fs(complete-command)h(\(M-!\))630 -3177 y Ft(A)m(ttempt)32 b(completion)e(on)h(the)g(text)h(b)s(efore)e(p) -s(oin)m(t,)g(treating)h(it)g(as)g(a)g(command)g(name.)630 -3286 y(Command)46 b(completion)g(attempts)i(to)f(matc)m(h)h(the)f(text) -h(against)f(aliases,)k(reserv)m(ed)630 3396 y(w)m(ords,)36 -b(shell)e(functions,)i(shell)d(builtins,)h(and)h(\014nally)e -(executable)j(\014lenames,)g(in)e(that)630 3505 y(order.)150 +3177 y Ft(A)m(ttempt)32 b(completion)g(on)f(the)g(text)h(b)s(efore)e(p) +s(oin)m(t,)h(treating)h(it)g(as)f(a)g(command)g(name.)630 +3286 y(Command)46 b(completion)i(attempts)g(to)f(matc)m(h)h(the)f(text) +h(against)g(aliases,)53 b(reserv)m(ed)630 3396 y(w)m(ords,)36 +b(shell)g(functions,)h(shell)e(builtins,)i(and)e(\014nally)g +(executable)i(\014lenames,)g(in)e(that)630 3505 y(order.)150 3667 y Fs(possible-command-complet)o(ions)24 b(\(C-x)29 -b(!\))630 3777 y Ft(List)c(the)i(p)s(ossible)d(completions)h(of)h(the)h -(text)g(b)s(efore)f(p)s(oin)m(t,)g(treating)g(it)g(as)h(a)f(command)630 +b(!\))630 3777 y Ft(List)d(the)h(p)s(ossible)f(completions)h(of)f(the)h +(text)g(b)s(efore)f(p)s(oin)m(t,)h(treating)g(it)g(as)g(a)f(command)630 3886 y(name.)150 4048 y Fs(dynamic-complete-history)e(\(M-)1470 4045 y Fg(h)p 1493 3992 148 4 v 1493 4048 a Ff(T)-6 b(AB)p 1493 4063 V 1637 4045 a Fg(i)1667 4048 y Fs(\))630 4157 -y Ft(A)m(ttempt)31 b(completion)f(on)g(the)g(text)h(b)s(efore)f(p)s -(oin)m(t,)f(comparing)h(the)g(text)h(against)g(lines)630 -4267 y(from)f(the)g(history)g(list)f(for)h(p)s(ossible)e(completion)i +y Ft(A)m(ttempt)31 b(completion)h(on)e(the)g(text)h(b)s(efore)f(p)s +(oin)m(t,)g(comparing)h(the)f(text)h(against)h(lines)630 +4267 y(from)e(the)g(history)h(list)g(for)f(p)s(ossible)g(completion)i (matc)m(hes.)150 4428 y Fs(complete-into-braces)25 b(\(M-{\))630 -4538 y Ft(P)m(erform)f(\014lename)e(completion)h(and)h(insert)e(the)i -(list)e(of)i(p)s(ossible)d(completions)i(enclosed)630 -4647 y(within)32 b(braces)j(so)f(the)h(list)e(is)h(a)m(v)-5 -b(ailable)34 b(to)h(the)g(shell)e(\(see)i(Section)g(3.5.1)h([Brace)g -(Ex-)630 4757 y(pansion],)29 b(page)i(17\).)150 4985 +4538 y Ft(P)m(erform)f(\014lename)f(completion)i(and)f(insert)f(the)h +(list)g(of)g(p)s(ossible)f(completions)i(enclosed)630 +4647 y(within)34 b(braces)h(so)f(the)h(list)g(is)g(a)m(v)-5 +b(ailable)37 b(to)e(the)g(shell)g(\(see)g(Section)h(3.5.1)g([Brace)g +(Ex-)630 4757 y(pansion],)30 b(page)h(17\).)150 4985 y Fk(8.4.7)63 b(Keyb)s(oard)41 b(Macros)150 5230 y Fs(start-kbd-macro) -26 b(\(C-x)j(\(\))630 5340 y Ft(Begin)h(sa)m(ving)h(the)f(c)m -(haracters)i(t)m(yp)s(ed)e(in)m(to)g(the)h(curren)m(t)f(k)m(eyb)s(oard) -g(macro.)p eop +26 b(\(C-x)j(\(\))630 5340 y Ft(Begin)i(sa)m(ving)h(the)e(c)m +(haracters)i(t)m(yp)s(ed)e(in)m(to)h(the)g(curren)m(t)f(k)m(eyb)s(oard) +g(macro.)p eop end %%Page: 101 107 -101 106 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2060 b(101)150 299 y Fs(end-kbd-macro)27 -b(\(C-x)i(\)\))630 408 y Ft(Stop)e(sa)m(ving)g(the)h(c)m(haracters)g(t) -m(yp)s(ed)f(in)m(to)h(the)f(curren)m(t)g(k)m(eyb)s(oard)g(macro)h(and)f +TeXDict begin 101 106 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(101)150 299 y Fs(end-kbd-macro)27 +b(\(C-x)i(\)\))630 408 y Ft(Stop)e(sa)m(ving)h(the)g(c)m(haracters)g(t) +m(yp)s(ed)f(in)m(to)i(the)e(curren)m(t)g(k)m(eyb)s(oard)g(macro)h(and)f (sa)m(v)m(e)i(the)630 518 y(de\014nition.)150 691 y Fs (call-last-kbd-macro)c(\(C-x)k(e\))630 801 y Ft(Re-execute)37 -b(the)e(last)g(k)m(eyb)s(oard)g(macro)h(de\014ned,)f(b)m(y)h(making)e -(the)h(c)m(haracters)i(in)d(the)630 911 y(macro)d(app)s(ear)f(as)g(if)g -(t)m(yp)s(ed)g(at)h(the)f(k)m(eyb)s(oard.)150 1163 y -Fk(8.4.8)63 b(Some)40 b(Miscellaneous)j(Commands)150 +b(the)e(last)h(k)m(eyb)s(oard)f(macro)h(de\014ned,)f(b)m(y)h(making)f +(the)g(c)m(haracters)i(in)e(the)630 911 y(macro)c(app)s(ear)f(as)g(if)h +(t)m(yp)s(ed)f(at)h(the)f(k)m(eyb)s(oard.)150 1163 y +Fk(8.4.8)63 b(Some)41 b(Miscellaneous)i(Commands)150 1414 y Fs(re-read-init-file)26 b(\(C-x)j(C-r\))630 1524 -y Ft(Read)22 b(in)f(the)h(con)m(ten)m(ts)h(of)f(the)g -Fq(inputrc)k Ft(\014le,)d(and)e(incorp)s(orate)g(an)m(y)i(bindings)18 -b(or)k(v)-5 b(ariable)630 1633 y(assignmen)m(ts)30 b(found)f(there.)150 +y Ft(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f(the)g +Fq(inputrc)27 b Ft(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h(bindings)d +(or)i(v)-5 b(ariable)630 1633 y(assignmen)m(ts)31 b(found)e(there.)150 1807 y Fs(abort)g(\(C-g\))630 1916 y Ft(Ab)s(ort)d(the)h(curren)m(t)f -(editing)f(command)h(and)g(ring)g(the)g(terminal's)f(b)s(ell)g(\(sub)5 -b(ject)26 b(to)i(the)630 2026 y(setting)i(of)h Fs(bell-style)p +(editing)h(command)f(and)g(ring)h(the)f(terminal's)h(b)s(ell)g(\(sub)5 +b(ject)26 b(to)i(the)630 2026 y(setting)j(of)g Fs(bell-style)p Ft(\).)150 2199 y Fs(do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p Fj(x)p Fs(,)g(...)o(\))630 2309 y Ft(If)e(the)h(meta\014ed)g(c)m -(haracter)h Fq(x)34 b Ft(is)27 b(lo)m(w)m(ercase,)i(run)e(the)g -(command)h(that)g(is)f(b)s(ound)e(to)k(the)630 2418 y(corresp)s(onding) -f(upp)s(ercase)i(c)m(haracter.)150 2592 y Fs(prefix-meta)d(\()753 +(haracter)h Fq(x)34 b Ft(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g +(command)h(that)g(is)g(b)s(ound)d(to)k(the)630 2418 y(corresp)s(onding) +g(upp)s(ercase)h(c)m(haracter.)150 2592 y Fs(prefix-meta)d(\()753 2589 y Fg(h)p 777 2536 139 4 v 777 2592 a Ff(ESC)p 777 2607 V 911 2589 a Fg(i)941 2592 y Fs(\))630 2701 y Ft(Metafy)39 -b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 b(This)36 -b(is)g(for)i(k)m(eyb)s(oards)f(without)f(a)i(meta)g(k)m(ey)-8 -b(.)630 2811 y(T)m(yping)29 b(`)968 2808 y Fg(h)p 993 +b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 b(This)37 +b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 +b(.)630 2811 y(T)m(yping)30 b(`)968 2808 y Fg(h)p 993 2755 V 993 2811 a Ff(ESC)p 993 2826 V 1127 2808 a Fg(i)1187 -2811 y Fs(f)p Ft(')h(is)f(equiv)-5 b(alen)m(t)30 b(to)h(t)m(yping)f -Fj(M-f)p Ft(.)150 2984 y Fs(undo)f(\(C-_)g(or)h(C-x)g(C-u\))630 -3094 y Ft(Incremen)m(tal)g(undo,)g(separately)g(remem)m(b)s(ered)g(for) +2811 y Fs(f)p Ft(')g(is)g(equiv)-5 b(alen)m(t)32 b(to)f(t)m(yping)g +Fj(M-f)p Ft(.)150 2984 y Fs(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 +3094 y Ft(Incremen)m(tal)h(undo,)f(separately)h(remem)m(b)s(ered)f(for) g(eac)m(h)i(line.)150 3267 y Fs(revert-line)27 b(\(M-r\))630 -3377 y Ft(Undo)33 b(all)f(c)m(hanges)i(made)f(to)h(this)e(line.)47 -b(This)31 b(is)h(lik)m(e)h(executing)g(the)g Fs(undo)f -Ft(command)630 3487 y(enough)e(times)g(to)h(get)h(bac)m(k)f(to)g(the)f +3377 y Ft(Undo)33 b(all)h(c)m(hanges)g(made)f(to)h(this)f(line.)49 +b(This)32 b(is)h(lik)m(e)i(executing)f(the)f Fs(undo)f +Ft(command)630 3487 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f (b)s(eginning.)150 3660 y Fs(tilde-expand)d(\(M-&\))630 -3770 y Ft(P)m(erform)j(tilde)f(expansion)h(on)g(the)g(curren)m(t)h(w)m +3770 y Ft(P)m(erform)j(tilde)h(expansion)g(on)f(the)g(curren)m(t)h(w)m (ord.)150 3943 y Fs(set-mark)d(\(C-@\))630 4053 y Ft(Set)33 -b(the)g(mark)f(to)i(the)f(p)s(oin)m(t.)47 b(If)32 b(a)h(n)m(umeric)f -(argumen)m(t)h(is)f(supplied,)e(the)j(mark)g(is)e(set)630 -4162 y(to)g(that)g(p)s(osition.)150 4336 y Fs(exchange-point-and-mark) -24 b(\(C-x)29 b(C-x\))630 4445 y Ft(Sw)m(ap)i(the)g(p)s(oin)m(t)f(with) -g(the)h(mark.)43 b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)g(is)g -(set)i(to)f(the)h(sa)m(v)m(ed)630 4555 y(p)s(osition,)d(and)g(the)i -(old)f(cursor)f(p)s(osition)g(is)g(sa)m(v)m(ed)j(as)e(the)h(mark.)150 +b(the)g(mark)f(to)i(the)f(p)s(oin)m(t.)48 b(If)32 b(a)h(n)m(umeric)g +(argumen)m(t)g(is)g(supplied,)f(the)h(mark)g(is)f(set)630 +4162 y(to)f(that)g(p)s(osition.)150 4336 y Fs(exchange-point-and-mark) +24 b(\(C-x)29 b(C-x\))630 4445 y Ft(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with) +g(the)g(mark.)43 b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f +(set)h(to)f(the)h(sa)m(v)m(ed)630 4555 y(p)s(osition,)f(and)e(the)i +(old)g(cursor)e(p)s(osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 4728 y Fs(character-search)26 b(\(C-]\))630 4838 y Ft(A)f(c)m(haracter) -h(is)e(read)h(and)f(p)s(oin)m(t)g(is)g(mo)m(v)m(ed)i(to)g(the)f(next)g +h(is)f(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g (o)s(ccurrence)g(of)g(that)g(c)m(haracter.)630 4947 y(A)30 -b(negativ)m(e)i(coun)m(t)f(searc)m(hes)g(for)f(previous)f(o)s +b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s (ccurrences.)150 5121 y Fs(character-search-backwar)o(d)24 -b(\(M-C-]\))630 5230 y Ft(A)45 b(c)m(haracter)h(is)e(read)h(and)f(p)s -(oin)m(t)g(is)g(mo)m(v)m(ed)i(to)f(the)g(previous)e(o)s(ccurrence)i(of) -g(that)630 5340 y(c)m(haracter.)d(A)31 b(negativ)m(e)g(coun)m(t)g +b(\(M-C-]\))630 5230 y Ft(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s +(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of) +g(that)630 5340 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f (searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)p -eop +eop end %%Page: 102 108 -102 107 bop 150 -116 a Ft(102)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fs(insert-comment)26 b(\(M-#\))630 408 y Ft(Without)35 -b(a)h(n)m(umeric)f(argumen)m(t,)i(the)f(v)-5 b(alue)35 -b(of)h(the)g Fs(comment-begin)c Ft(v)-5 b(ariable)34 -b(is)h(in-)630 518 y(serted)d(at)g(the)g(b)s(eginning)d(of)j(the)f -(curren)m(t)h(line.)43 b(If)31 b(a)h(n)m(umeric)e(argumen)m(t)i(is)f -(supplied,)630 628 y(this)k(command)i(acts)g(as)g(a)g(toggle:)54 -b(if)36 b(the)g(c)m(haracters)i(at)g(the)e(b)s(eginning)e(of)j(the)g -(line)630 737 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 b(alue)30 -b(of)g Fs(comment-begin)p Ft(,)e(the)i(v)-5 b(alue)30 -b(is)g(inserted,)g(otherwise)g(the)630 847 y(c)m(haracters)42 -b(in)c Fs(comment-begin)f Ft(are)j(deleted)g(from)g(the)g(b)s(eginning) -e(of)i(the)g(line.)69 b(In)630 956 y(either)36 b(case,)k(the)e(line)d -(is)h(accepted)j(as)e(if)f(a)h(newline)e(had)i(b)s(een)f(t)m(yp)s(ed.) -60 b(The)37 b(default)630 1066 y(v)-5 b(alue)31 b(of)h -Fs(comment-begin)c Ft(causes)k(this)e(command)i(to)g(mak)m(e)h(the)e -(curren)m(t)h(line)e(a)i(shell)630 1176 y(commen)m(t.)40 -b(If)26 b(a)h(n)m(umeric)e(argumen)m(t)i(causes)g(the)f(commen)m(t)i(c) -m(haracter)g(to)f(b)s(e)f(remo)m(v)m(ed,)630 1285 y(the)31 -b(line)d(will)g(b)s(e)i(executed)h(b)m(y)f(the)h(shell.)150 -1443 y Fs(dump-functions)26 b(\(\))630 1553 y Ft(Prin)m(t)f(all)h(of)g -(the)h(functions)e(and)h(their)f(k)m(ey)i(bindings)c(to)28 -b(the)e(Readline)f(output)h(stream.)630 1663 y(If)31 -b(a)h(n)m(umeric)f(argumen)m(t)h(is)f(supplied,)e(the)j(output)f(is)g -(formatted)h(in)e(suc)m(h)i(a)g(w)m(a)m(y)g(that)630 -1772 y(it)e(can)h(b)s(e)e(made)i(part)f(of)g(an)h Fq(inputrc)j -Ft(\014le.)40 b(This)28 b(command)i(is)g(un)m(b)s(ound)d(b)m(y)k +TeXDict begin 102 107 bop 150 -116 a Ft(102)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(insert-comment)26 +b(\(M-#\))630 408 y Ft(Without)36 b(a)g(n)m(umeric)g(argumen)m(t,)h +(the)f(v)-5 b(alue)36 b(of)g(the)g Fs(comment-begin)c +Ft(v)-5 b(ariable)36 b(is)g(in-)630 518 y(serted)c(at)g(the)g(b)s +(eginning)f(of)h(the)f(curren)m(t)h(line.)45 b(If)31 +b(a)h(n)m(umeric)f(argumen)m(t)h(is)g(supplied,)630 628 +y(this)k(command)h(acts)g(as)g(a)g(toggle:)55 b(if)37 +b(the)f(c)m(haracters)i(at)g(the)e(b)s(eginning)g(of)h(the)g(line)630 +737 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 b(alue)31 b(of)f +Fs(comment-begin)p Ft(,)e(the)i(v)-5 b(alue)31 b(is)g(inserted,)g +(otherwise)g(the)630 847 y(c)m(haracters)42 b(in)d Fs(comment-begin)e +Ft(are)j(deleted)h(from)f(the)g(b)s(eginning)g(of)g(the)g(line.)71 +b(In)630 956 y(either)37 b(case,)j(the)e(line)f(is)g(accepted)i(as)e +(if)g(a)g(newline)g(had)g(b)s(een)f(t)m(yp)s(ed.)60 b(The)37 +b(default)630 1066 y(v)-5 b(alue)32 b(of)g Fs(comment-begin)c +Ft(causes)k(this)f(command)h(to)g(mak)m(e)h(the)e(curren)m(t)h(line)g +(a)g(shell)630 1176 y(commen)m(t.)40 b(If)26 b(a)h(n)m(umeric)f +(argumen)m(t)h(causes)g(the)f(commen)m(t)i(c)m(haracter)g(to)f(b)s(e)f +(remo)m(v)m(ed,)630 1285 y(the)31 b(line)f(will)h(b)s(e)f(executed)h(b) +m(y)f(the)h(shell.)150 1443 y Fs(dump-functions)26 b(\(\))630 +1553 y Ft(Prin)m(t)g(all)i(of)e(the)h(functions)f(and)g(their)g(k)m(ey) +h(bindings)e(to)j(the)e(Readline)h(output)f(stream.)630 +1663 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h +(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 +1772 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fq(inputrc)k +Ft(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k (default.)150 1931 y Fs(dump-variables)26 b(\(\))630 -2040 y Ft(Prin)m(t)20 b(all)g(of)i(the)f(settable)h(v)-5 -b(ariables)20 b(and)h(their)f(v)-5 b(alues)21 b(to)h(the)f(Readline)f -(output)h(stream.)630 2150 y(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is) -f(supplied,)e(the)j(output)f(is)g(formatted)h(in)e(suc)m(h)i(a)g(w)m(a) -m(y)g(that)630 2259 y(it)e(can)h(b)s(e)e(made)i(part)f(of)g(an)h -Fq(inputrc)j Ft(\014le.)40 b(This)28 b(command)i(is)g(un)m(b)s(ound)d +2040 y Ft(Prin)m(t)21 b(all)h(of)g(the)f(settable)i(v)-5 +b(ariables)22 b(and)f(their)g(v)-5 b(alues)22 b(to)g(the)f(Readline)h +(output)f(stream.)630 2150 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is) +g(supplied,)f(the)h(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a) +m(y)g(that)630 2259 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h +Fq(inputrc)k Ft(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c (b)m(y)k(default.)150 2418 y Fs(dump-macros)c(\(\))630 -2527 y Ft(Prin)m(t)33 b(all)f(of)i(the)g(Readline)e(k)m(ey)j(sequences) -f(b)s(ound)e(to)i(macros)g(and)f(the)h(strings)f(they)630 -2637 y(output.)53 b(If)35 b(a)g(n)m(umeric)e(argumen)m(t)j(is)d -(supplied,)g(the)i(output)g(is)e(formatted)j(in)d(suc)m(h)i(a)630 -2746 y(w)m(a)m(y)c(that)g(it)e(can)h(b)s(e)g(made)g(part)f(of)i(an)e -Fq(inputrc)34 b Ft(\014le.)40 b(This)28 b(command)i(is)f(un)m(b)s(ound) -e(b)m(y)630 2856 y(default.)150 3014 y Fs(glob-complete-word)e(\(M-g\)) -630 3124 y Ft(The)i(w)m(ord)h(b)s(efore)f(p)s(oin)m(t)g(is)g(treated)i -(as)f(a)h(pattern)f(for)f(pathname)h(expansion,)f(with)g(an)630 -3233 y(asterisk)d(implicitly)d(app)s(ended.)37 b(This)22 -b(pattern)j(is)e(used)h(to)h(generate)h(a)e(list)f(of)i(matc)m(hing)630 -3343 y(\014le)k(names)i(for)f(p)s(ossible)e(completions.)150 -3501 y Fs(glob-expand-word)e(\(C-x)j(*\))630 3611 y Ft(The)40 -b(w)m(ord)g(b)s(efore)g(p)s(oin)m(t)g(is)g(treated)h(as)g(a)g(pattern)g -(for)f(pathname)g(expansion,)j(and)630 3720 y(the)d(list)e(of)h(matc)m -(hing)h(\014le)e(names)h(is)g(inserted,)h(replacing)f(the)g(w)m(ord.)67 -b(If)39 b(a)h(n)m(umeric)630 3830 y(argumen)m(t)31 b(is)e(supplied,)f -(a)i(`)p Fs(*)p Ft(')h(is)e(app)s(ended)g(b)s(efore)h(pathname)g +2527 y Ft(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences) +f(b)s(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630 +2637 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e +(supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 +2746 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e +Fq(inputrc)35 b Ft(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound) +d(b)m(y)630 2856 y(default.)150 3014 y Fs(glob-complete-word)e(\(M-g\)) +630 3124 y Ft(The)i(w)m(ord)h(b)s(efore)f(p)s(oin)m(t)h(is)g(treated)h +(as)f(a)h(pattern)f(for)f(pathname)h(expansion,)g(with)g(an)630 +3233 y(asterisk)d(implicitly)h(app)s(ended.)37 b(This)23 +b(pattern)i(is)f(used)g(to)h(generate)h(a)e(list)h(of)g(matc)m(hing)630 +3343 y(\014le)30 b(names)h(for)f(p)s(ossible)g(completions.)150 +3501 y Fs(glob-expand-word)c(\(C-x)j(*\))630 3611 y Ft(The)40 +b(w)m(ord)g(b)s(efore)g(p)s(oin)m(t)h(is)g(treated)g(as)g(a)g(pattern)g +(for)f(pathname)g(expansion,)k(and)630 3720 y(the)c(list)g(of)f(matc)m +(hing)i(\014le)e(names)g(is)h(inserted,)h(replacing)g(the)e(w)m(ord.)67 +b(If)39 b(a)h(n)m(umeric)630 3830 y(argumen)m(t)31 b(is)f(supplied,)g +(a)g(`)p Fs(*)p Ft(')h(is)f(app)s(ended)f(b)s(efore)h(pathname)g (expansion.)150 3988 y Fs(glob-list-expansions)25 b(\(C-x)k(g\))630 -4098 y Ft(The)k(list)f(of)h(expansions)f(that)i(w)m(ould)e(ha)m(v)m(e)i +4098 y Ft(The)k(list)h(of)f(expansions)g(that)h(w)m(ould)f(ha)m(v)m(e)h (b)s(een)f(generated)h(b)m(y)f Fs(glob-expand-word)630 -4208 y Ft(is)g(displa)m(y)m(ed,)g(and)g(the)h(line)e(is)g(redra)m(wn.) -50 b(If)33 b(a)h(n)m(umeric)f(argumen)m(t)h(is)e(supplied,)g(a)i(`)p -Fs(*)p Ft(')630 4317 y(is)29 b(app)s(ended)g(b)s(efore)h(pathname)g +4208 y Ft(is)h(displa)m(y)m(ed,)h(and)e(the)h(line)g(is)f(redra)m(wn.) +50 b(If)33 b(a)h(n)m(umeric)g(argumen)m(t)g(is)f(supplied,)h(a)g(`)p +Fs(*)p Ft(')630 4317 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g (expansion.)150 4475 y Fs(display-shell-version)25 b(\(C-x)k(C-v\))630 -4585 y Ft(Displa)m(y)h(v)m(ersion)f(information)g(ab)s(out)h(the)h -(curren)m(t)f(instance)g(of)g(Bash.)150 4743 y Fs(shell-expand-line)c -(\(M-C-e\))630 4853 y Ft(Expand)34 b(the)h(line)f(as)i(the)f(shell)f -(do)s(es.)55 b(This)33 b(p)s(erforms)h(alias)g(and)h(history)f -(expansion)630 4963 y(as)g(w)m(ell)e(as)i(all)f(of)g(the)h(shell)e(w)m -(ord)h(expansions)f(\(see)j(Section)e(3.5)i([Shell)c(Expansions],)630 -5072 y(page)g(16\).)150 5230 y Fs(history-expand-line)25 -b(\(M-^\))630 5340 y Ft(P)m(erform)30 b(history)g(expansion)f(on)h(the) -h(curren)m(t)f(line.)p eop +4585 y Ft(Displa)m(y)j(v)m(ersion)e(information)h(ab)s(out)f(the)h +(curren)m(t)f(instance)h(of)f(Bash.)150 4743 y Fs(shell-expand-line)c +(\(M-C-e\))630 4853 y Ft(Expand)34 b(the)h(line)h(as)g(the)f(shell)h +(do)s(es.)55 b(This)34 b(p)s(erforms)g(alias)i(and)f(history)g +(expansion)630 4963 y(as)f(w)m(ell)g(as)g(all)h(of)e(the)h(shell)g(w)m +(ord)f(expansions)g(\(see)i(Section)f(3.5)h([Shell)e(Expansions],)630 +5072 y(page)e(16\).)150 5230 y Fs(history-expand-line)25 +b(\(M-^\))630 5340 y Ft(P)m(erform)30 b(history)h(expansion)f(on)g(the) +h(curren)m(t)f(line.)p eop end %%Page: 103 109 -103 108 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2060 b(103)150 299 y Fs(magic-space)27 -b(\(\))630 408 y Ft(P)m(erform)c(history)f(expansion)g(on)h(the)g -(curren)m(t)g(line)e(and)i(insert)f(a)h(space)h(\(see)g(Section)f(9.3) -630 518 y([History)30 b(In)m(teraction],)i(page)f(111\).)150 -664 y Fs(alias-expand-line)26 b(\(\))630 774 y Ft(P)m(erform)i(alias)g -(expansion)f(on)h(the)h(curren)m(t)f(line)f(\(see)i(Section)f(6.6)i -([Aliases],)e(page)h(71\).)150 920 y Fs(history-and-alias-expand)o -(-lin)o(e)24 b(\(\))630 1029 y Ft(P)m(erform)30 b(history)g(and)f -(alias)h(expansion)f(on)h(the)h(curren)m(t)f(line.)150 +TeXDict begin 103 108 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(103)150 299 y Fs(magic-space)27 +b(\(\))630 408 y Ft(P)m(erform)c(history)g(expansion)g(on)g(the)g +(curren)m(t)g(line)g(and)g(insert)g(a)g(space)h(\(see)g(Section)g(9.3) +630 518 y([History)31 b(In)m(teraction],)i(page)e(111\).)150 +664 y Fs(alias-expand-line)26 b(\(\))630 774 y Ft(P)m(erform)i(alias)i +(expansion)e(on)g(the)h(curren)m(t)f(line)h(\(see)g(Section)g(6.6)h +([Aliases],)g(page)f(71\).)150 920 y Fs(history-and-alias-expand)o +(-lin)o(e)24 b(\(\))630 1029 y Ft(P)m(erform)30 b(history)h(and)e +(alias)j(expansion)e(on)g(the)h(curren)m(t)f(line.)150 1176 y Fs(insert-last-argument)25 b(\(M-.)k(or)h(M-_\))630 1285 y Ft(A)g(synon)m(ym)g(for)g Fs(yank-last-arg)p Ft(.)150 1431 y Fs(operate-and-get-next)25 b(\(C-o\))630 1541 -y Ft(Accept)42 b(the)e(curren)m(t)h(line)d(for)j(execution)f(and)g -(fetc)m(h)i(the)e(next)h(line)e(relativ)m(e)i(to)g(the)630 -1650 y(curren)m(t)30 b(line)f(from)h(the)g(history)g(for)g(editing.)39 -b(An)m(y)31 b(argumen)m(t)f(is)g(ignored.)150 1797 y +y Ft(Accept)42 b(the)e(curren)m(t)h(line)f(for)h(execution)g(and)f +(fetc)m(h)i(the)e(next)h(line)g(relativ)m(e)i(to)e(the)630 +1650 y(curren)m(t)30 b(line)h(from)f(the)g(history)h(for)f(editing.)41 +b(An)m(y)31 b(argumen)m(t)f(is)h(ignored.)150 1797 y Fs(edit-and-execute-command)24 b(\(C-xC-e\))630 1906 -y Ft(In)m(v)m(ok)m(e)34 b(an)f(editor)f(on)h(the)g(curren)m(t)f -(command)h(line,)f(and)g(execute)i(the)f(result)f(as)h(shell)630 -2016 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v)m(ok)m(e)g -Fs($VISUAL)p Ft(,)g Fs($EDITOR)p Ft(,)h(and)d Fs(emacs)g -Ft(as)h(the)630 2125 y(editor,)30 b(in)f(that)i(order.)150 +y Ft(In)m(v)m(ok)m(e)34 b(an)f(editor)g(on)g(the)g(curren)m(t)f +(command)h(line,)h(and)e(execute)i(the)f(result)g(as)g(shell)630 +2016 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v)m(ok)m(e)h +Fs($VISUAL)p Ft(,)f Fs($EDITOR)p Ft(,)h(and)d Fs(emacs)g +Ft(as)h(the)630 2125 y(editor,)31 b(in)f(that)h(order.)150 2363 y Fr(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)275 2600 -y Ft(While)22 b(the)i(Readline)e(library)f(do)s(es)j(not)g(ha)m(v)m(e)g -(a)h(full)c(set)j(of)g Fs(vi)f Ft(editing)f(functions,)i(it)f(do)s(es)h -(con)m(tain)150 2710 y(enough)34 b(to)h(allo)m(w)e(simple)f(editing)h -(of)h(the)g(line.)50 b(The)34 b(Readline)e Fs(vi)i Ft(mo)s(de)f(b)s -(eha)m(v)m(es)i(as)f(sp)s(eci\014ed)e(in)150 2819 y(the)f +y Ft(While)24 b(the)g(Readline)g(library)f(do)s(es)h(not)g(ha)m(v)m(e)g +(a)h(full)e(set)h(of)g Fs(vi)f Ft(editing)h(functions,)h(it)f(do)s(es)g +(con)m(tain)150 2710 y(enough)34 b(to)h(allo)m(w)g(simple)f(editing)h +(of)f(the)g(line.)52 b(The)34 b(Readline)g Fs(vi)g Ft(mo)s(de)f(b)s +(eha)m(v)m(es)i(as)f(sp)s(eci\014ed)f(in)150 2819 y(the)e Fl(posix)e Ft(1003.2)k(standard.)275 2947 y(In)i(order)g(to)i(switc)m -(h)e(in)m(teractiv)m(ely)h(b)s(et)m(w)m(een)g Fs(emacs)f -Ft(and)g Fs(vi)g Ft(editing)f(mo)s(des,)j(use)f(the)g(`)p +(h)f(in)m(teractiv)m(ely)j(b)s(et)m(w)m(een)d Fs(emacs)f +Ft(and)g Fs(vi)g Ft(editing)h(mo)s(des,)h(use)f(the)g(`)p Fs(set)30 b(-o)150 3057 y(emacs)p Ft(')21 b(and)g(`)p -Fs(set)29 b(-o)h(vi)p Ft(')21 b(commands)h(\(see)g(Section)g(4.3)h -([The)e(Set)h(Builtin],)g(page)g(50\).)39 b(The)21 b(Readline)150 -3166 y(default)30 b(is)f Fs(emacs)g Ft(mo)s(de.)275 3294 -y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)d(in)h Fs(vi)g -Ft(mo)s(de,)h(y)m(ou)h(are)f(already)g(placed)f(in)g(`insertion')f(mo)s -(de,)i(as)h(if)e(y)m(ou)150 3404 y(had)d(t)m(yp)s(ed)g(an)g(`)p +Fs(set)29 b(-o)h(vi)p Ft(')21 b(commands)h(\(see)g(Section)h(4.3)g +([The)e(Set)h(Builtin],)j(page)d(50\).)39 b(The)21 b(Readline)150 +3166 y(default)31 b(is)f Fs(emacs)f Ft(mo)s(de.)275 3294 +y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f(in)g Fs(vi)f +Ft(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f(in)g(`insertion')g(mo)s +(de,)g(as)h(if)f(y)m(ou)150 3404 y(had)c(t)m(yp)s(ed)g(an)g(`)p Fs(i)p Ft('.)39 b(Pressing)1215 3401 y Fg(h)p 1239 3348 139 4 v 1239 3404 a Ff(ESC)p 1239 3419 V 1373 3401 a -Fg(i)1429 3404 y Ft(switc)m(hes)26 b(y)m(ou)h(in)m(to)f(`command')g(mo) -s(de,)h(where)f(y)m(ou)h(can)f(edit)g(the)150 3513 y(text)35 -b(of)f(the)g(line)e(with)g(the)i(standard)f Fs(vi)g Ft(mo)m(v)m(emen)m -(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)f(history)f(lines)g(with)150 -3623 y(`)p Fs(k)p Ft(')f(and)e(subsequen)m(t)h(lines)f(with)g(`)p -Fs(j)p Ft(',)h(and)g(so)h(forth.)150 3861 y Fr(8.6)68 +Fg(i)1429 3404 y Ft(switc)m(hes)27 b(y)m(ou)g(in)m(to)g(`command')f(mo) +s(de,)h(where)f(y)m(ou)h(can)f(edit)h(the)150 3513 y(text)35 +b(of)f(the)g(line)g(with)f(the)h(standard)f Fs(vi)g Ft(mo)m(v)m(emen)m +(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g(history)f(lines)h(with)150 +3623 y(`)p Fs(k)p Ft(')d(and)e(subsequen)m(t)h(lines)h(with)f(`)p +Fs(j)p Ft(',)g(and)g(so)h(forth.)150 3861 y Fr(8.6)68 b(Programmable)47 b(Completion)275 4098 y Ft(When)25 -b(w)m(ord)g(completion)g(is)g(attempted)h(for)g(an)f(argumen)m(t)h(to)h -(a)f(command)f(for)h(whic)m(h)e(a)i(comple-)150 4208 -y(tion)e(sp)s(eci\014cation)f(\(a)j Fq(compsp)s(ec)6 -b Ft(\))24 b(has)g(b)s(een)g(de\014ned)g(using)f(the)h -Fs(complete)f Ft(builtin)e(\(see)k(Section)g(8.7)150 -4317 y([Programmable)e(Completion)f(Builtins],)g(page)i(105\),)j(the)c -(programmable)g(completion)f(facilities)g(are)150 4427 -y(in)m(v)m(ok)m(ed.)275 4555 y(First,)g(the)f(command)g(name)g(is)g -(iden)m(ti\014ed.)35 b(If)21 b(a)g(compsp)s(ec)g(has)g(b)s(een)f +b(w)m(ord)g(completion)i(is)f(attempted)g(for)g(an)f(argumen)m(t)h(to)h +(a)f(command)f(for)h(whic)m(h)f(a)h(comple-)150 4208 +y(tion)f(sp)s(eci\014cation)g(\(a)h Fq(compsp)s(ec)6 +b Ft(\))24 b(has)g(b)s(een)g(de\014ned)g(using)g(the)g +Fs(complete)f Ft(builtin)h(\(see)h(Section)h(8.7)150 +4317 y([Programmable)e(Completion)g(Builtins],)h(page)f(105\),)j(the)c +(programmable)h(completion)g(facilities)i(are)150 4427 +y(in)m(v)m(ok)m(ed.)275 4555 y(First,)d(the)e(command)g(name)g(is)h +(iden)m(ti\014ed.)37 b(If)21 b(a)g(compsp)s(ec)g(has)g(b)s(een)f (de\014ned)g(for)h(that)h(command,)150 4664 y(the)44 -b(compsp)s(ec)g(is)f(used)g(to)h(generate)i(the)e(list)e(of)i(p)s -(ossible)e(completions)h(for)g(the)h(w)m(ord.)81 b(If)44 -b(the)150 4774 y(command)33 b(w)m(ord)f(is)g(a)h(full)e(pathname,)j(a)f -(compsp)s(ec)f(for)h(the)g(full)e(pathname)h(is)g(searc)m(hed)i(for)e -(\014rst.)150 4883 y(If)f(no)h(compsp)s(ec)f(is)g(found)f(for)h(the)h -(full)e(pathname,)i(an)f(attempt)i(is)e(made)g(to)i(\014nd)d(a)i -(compsp)s(ec)f(for)150 4993 y(the)g(p)s(ortion)e(follo)m(wing)f(the)j -(\014nal)e(slash.)275 5121 y(Once)34 b(a)g(compsp)s(ec)g(has)g(b)s(een) -f(found,)h(it)g(is)f(used)g(to)i(generate)h(the)e(list)f(of)h(matc)m -(hing)g(w)m(ords.)51 b(If)150 5230 y(a)37 b(compsp)s(ec)f(is)f(not)i -(found,)f(the)h(default)e(Bash)i(completion)e(describ)s(ed)f(ab)s(o)m -(v)m(e)k(\(see)f(Section)f(8.4.6)150 5340 y([Commands)30 -b(F)-8 b(or)31 b(Completion],)e(page)i(99\))h(is)d(p)s(erformed.)p -eop +b(compsp)s(ec)g(is)g(used)f(to)h(generate)i(the)e(list)g(of)g(p)s +(ossible)g(completions)h(for)e(the)h(w)m(ord.)81 b(If)44 +b(the)150 4774 y(command)33 b(w)m(ord)f(is)h(a)g(full)g(pathname,)h(a)f +(compsp)s(ec)f(for)h(the)g(full)g(pathname)f(is)h(searc)m(hed)h(for)e +(\014rst.)150 4883 y(If)f(no)h(compsp)s(ec)f(is)h(found)e(for)h(the)h +(full)g(pathname,)g(an)f(attempt)i(is)f(made)f(to)i(\014nd)d(a)i +(compsp)s(ec)f(for)150 4993 y(the)g(p)s(ortion)f(follo)m(wing)h(the)g +(\014nal)f(slash.)275 5121 y(Once)k(a)g(compsp)s(ec)g(has)g(b)s(een)f +(found,)h(it)h(is)f(used)f(to)i(generate)h(the)e(list)h(of)f(matc)m +(hing)h(w)m(ords.)51 b(If)150 5230 y(a)37 b(compsp)s(ec)f(is)g(not)h +(found,)f(the)h(default)f(Bash)h(completion)g(describ)s(ed)e(ab)s(o)m +(v)m(e)j(\(see)f(Section)g(8.4.6)150 5340 y([Commands)30 +b(F)-8 b(or)31 b(Completion],)g(page)g(99\))h(is)e(p)s(erformed.)p +eop end %%Page: 104 110 -104 109 bop 150 -116 a Ft(104)2527 b(Bash)31 b(Reference)g(Man)m(ual) -275 299 y(First,)f(the)h(actions)f(sp)s(eci\014ed)f(b)m(y)i(the)f -(compsp)s(ec)h(are)g(used.)40 b(Only)29 b(matc)m(hes)j(whic)m(h)d(are)i -(pre\014xed)150 408 y(b)m(y)25 b(the)h(w)m(ord)f(b)s(eing)e(completed)j -(are)f(returned.)38 b(When)25 b(the)h(`)p Fs(-f)p Ft(')f(or)g(`)p -Fs(-d)p Ft(')g(option)g(is)f(used)h(for)g(\014lename)150 -518 y(or)30 b(directory)g(name)g(completion,)g(the)g(shell)f(v)-5 -b(ariable)29 b Fs(FIGNORE)f Ft(is)h(used)g(to)i(\014lter)f(the)g(matc)m -(hes.)42 b(See)150 628 y(Section)30 b(5.2)i([Bash)e(V)-8 -b(ariables],)31 b(page)g(55,)g(for)f(a)h(description)e(of)h -Fs(FIGNORE)p Ft(.)275 765 y(An)m(y)f(completions)f(sp)s(eci\014ed)g(b)m -(y)h(a)h(\014lename)e(expansion)h(pattern)g(to)h(the)g(`)p -Fs(-G)p Ft(')f(option)g(are)g(gener-)150 874 y(ated)h(next.)40 +TeXDict begin 104 109 bop 150 -116 a Ft(104)2527 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(First,)g(the)g(actions)g(sp)s +(eci\014ed)f(b)m(y)h(the)f(compsp)s(ec)h(are)g(used.)40 +b(Only)30 b(matc)m(hes)i(whic)m(h)e(are)h(pre\014xed)150 +408 y(b)m(y)25 b(the)h(w)m(ord)f(b)s(eing)f(completed)j(are)e +(returned.)38 b(When)25 b(the)h(`)p Fs(-f)p Ft(')f(or)g(`)p +Fs(-d)p Ft(')g(option)h(is)f(used)g(for)g(\014lename)150 +518 y(or)30 b(directory)h(name)f(completion,)i(the)e(shell)h(v)-5 +b(ariable)31 b Fs(FIGNORE)d Ft(is)i(used)f(to)i(\014lter)g(the)f(matc)m +(hes.)42 b(See)150 628 y(Section)31 b(5.2)h([Bash)e(V)-8 +b(ariables],)33 b(page)e(55,)g(for)f(a)h(description)g(of)f +Fs(FIGNORE)p Ft(.)275 765 y(An)m(y)f(completions)h(sp)s(eci\014ed)f(b)m +(y)g(a)h(\014lename)f(expansion)h(pattern)f(to)h(the)g(`)p +Fs(-G)p Ft(')f(option)h(are)f(gener-)150 874 y(ated)h(next.)40 b(The)29 b(w)m(ords)g(generated)h(b)m(y)f(the)h(pattern)f(need)g(not)g -(matc)m(h)i(the)e(w)m(ord)g(b)s(eing)f(completed.)150 -984 y(The)42 b Fs(GLOBIGNORE)d Ft(shell)i(v)-5 b(ariable)41 -b(is)g(not)i(used)e(to)i(\014lter)e(the)i(matc)m(hes,)j(but)c(the)g -Fs(FIGNORE)f Ft(shell)150 1093 y(v)-5 b(ariable)29 b(is)h(used.)275 -1230 y(Next,)35 b(the)g(string)d(sp)s(eci\014ed)h(as)h(the)g(argumen)m -(t)g(to)h(the)f(`)p Fs(-W)p Ft(')g(option)f(is)g(considered.)51 -b(The)33 b(string)150 1340 y(is)f(\014rst)f(split)g(using)g(the)i(c)m -(haracters)h(in)d(the)i Fs(IFS)e Ft(sp)s(ecial)h(v)-5 -b(ariable)31 b(as)i(delimiters.)45 b(Shell)30 b(quoting)i(is)150 -1450 y(honored.)37 b(Eac)m(h)21 b(w)m(ord)g(is)f(then)g(expanded)g -(using)g(brace)h(expansion,)h(tilde)d(expansion,)j(parameter)g(and)150 -1559 y(v)-5 b(ariable)24 b(expansion,)h(command)g(substitution,)f -(arithmetic)g(expansion,)h(and)g(pathname)g(expansion,)150 -1669 y(as)j(describ)s(ed)d(ab)s(o)m(v)m(e)k(\(see)f(Section)g(3.5)g -([Shell)e(Expansions],)g(page)j(16\).)41 b(The)27 b(results)f(are)i -(split)d(using)150 1778 y(the)33 b(rules)f(describ)s(ed)e(ab)s(o)m(v)m -(e)k(\(see)g(Section)f(3.5.7)i([W)-8 b(ord)33 b(Splitting],)f(page)h -(22\).)50 b(The)32 b(results)g(of)h(the)150 1888 y(expansion)g(are)i -(pre\014x-matc)m(hed)f(against)h(the)f(w)m(ord)g(b)s(eing)f(completed,) -j(and)e(the)g(matc)m(hing)g(w)m(ords)150 1998 y(b)s(ecome)d(the)f(p)s -(ossible)e(completions.)275 2134 y(After)h(these)g(matc)m(hes)i(ha)m(v) -m(e)f(b)s(een)f(generated,)h(an)m(y)g(shell)d(function)h(or)h(command)g -(sp)s(eci\014ed)e(with)150 2244 y(the)j(`)p Fs(-F)p Ft(')g(and)f(`)p -Fs(-C)p Ft(')h(options)f(is)g(in)m(v)m(ok)m(ed.)40 b(When)30 -b(the)g(command)g(or)f(function)g(is)g(in)m(v)m(ok)m(ed,)h(the)g +(matc)m(h)i(the)e(w)m(ord)g(b)s(eing)g(completed.)150 +984 y(The)42 b Fs(GLOBIGNORE)d Ft(shell)k(v)-5 b(ariable)43 +b(is)f(not)h(used)e(to)i(\014lter)f(the)h(matc)m(hes,)j(but)c(the)g +Fs(FIGNORE)f Ft(shell)150 1093 y(v)-5 b(ariable)31 b(is)g(used.)275 +1230 y(Next,)k(the)g(string)e(sp)s(eci\014ed)h(as)g(the)g(argumen)m(t)g +(to)h(the)f(`)p Fs(-W)p Ft(')g(option)g(is)g(considered.)52 +b(The)33 b(string)150 1340 y(is)g(\014rst)e(split)i(using)f(the)h(c)m +(haracters)h(in)e(the)h Fs(IFS)e Ft(sp)s(ecial)j(v)-5 +b(ariable)33 b(as)g(delimiters.)48 b(Shell)32 b(quoting)h(is)150 +1450 y(honored.)k(Eac)m(h)21 b(w)m(ord)g(is)g(then)f(expanded)g(using)h +(brace)g(expansion,)i(tilde)e(expansion,)i(parameter)f(and)150 +1559 y(v)-5 b(ariable)26 b(expansion,)g(command)f(substitution,)h +(arithmetic)g(expansion,)g(and)f(pathname)g(expansion,)150 +1669 y(as)j(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)h(3.5)f +([Shell)g(Expansions],)f(page)i(16\).)41 b(The)27 b(results)g(are)h +(split)f(using)150 1778 y(the)33 b(rules)g(describ)s(ed)e(ab)s(o)m(v)m +(e)j(\(see)g(Section)g(3.5.7)h([W)-8 b(ord)33 b(Splitting],)i(page)e +(22\).)50 b(The)32 b(results)h(of)g(the)150 1888 y(expansion)h(are)h +(pre\014x-matc)m(hed)f(against)i(the)e(w)m(ord)g(b)s(eing)g(completed,) +j(and)d(the)g(matc)m(hing)h(w)m(ords)150 1998 y(b)s(ecome)c(the)f(p)s +(ossible)g(completions.)275 2134 y(After)f(these)g(matc)m(hes)i(ha)m(v) +m(e)f(b)s(een)f(generated,)h(an)m(y)g(shell)f(function)g(or)g(command)g +(sp)s(eci\014ed)f(with)150 2244 y(the)i(`)p Fs(-F)p Ft(')g(and)f(`)p +Fs(-C)p Ft(')h(options)g(is)g(in)m(v)m(ok)m(ed.)41 b(When)30 +b(the)g(command)g(or)f(function)h(is)g(in)m(v)m(ok)m(ed,)h(the)f Fs(COMP_)150 2354 y(LINE)21 b Ft(and)h Fs(COMP_POINT)d -Ft(v)-5 b(ariables)21 b(are)i(assigned)f(v)-5 b(alues)21 -b(as)i(describ)s(ed)d(ab)s(o)m(v)m(e)k(\(see)f(Section)f(5.2)i([Bash) -150 2463 y(V)-8 b(ariables],)31 b(page)h(55\).)44 b(If)30 -b(a)i(shell)d(function)g(is)h(b)s(eing)g(in)m(v)m(ok)m(ed,)i(the)f +Ft(v)-5 b(ariables)23 b(are)g(assigned)g(v)-5 b(alues)22 +b(as)h(describ)s(ed)e(ab)s(o)m(v)m(e)j(\(see)f(Section)g(5.2)h([Bash) +150 2463 y(V)-8 b(ariables],)33 b(page)f(55\).)44 b(If)30 +b(a)i(shell)f(function)f(is)h(b)s(eing)g(in)m(v)m(ok)m(ed,)i(the)e Fs(COMP_WORDS)d Ft(and)j Fs(COMP_CWORD)150 2573 y Ft(v)-5 -b(ariables)38 b(are)i(also)g(set.)68 b(When)40 b(the)f(function)g(or)g -(command)g(is)g(in)m(v)m(ok)m(ed,)j(the)e(\014rst)f(argumen)m(t)h(is) +b(ariables)40 b(are)g(also)h(set.)68 b(When)40 b(the)f(function)h(or)f +(command)g(is)h(in)m(v)m(ok)m(ed,)j(the)d(\014rst)f(argumen)m(t)h(is) 150 2682 y(the)34 b(name)f(of)h(the)g(command)f(whose)g(argumen)m(ts)h -(are)g(b)s(eing)e(completed,)j(the)e(second)h(argumen)m(t)g(is)150 -2792 y(the)h(w)m(ord)g(b)s(eing)f(completed,)i(and)f(the)g(third)e -(argumen)m(t)j(is)e(the)h(w)m(ord)g(preceding)f(the)i(w)m(ord)e(b)s -(eing)150 2902 y(completed)d(on)f(the)h(curren)m(t)g(command)f(line.)40 -b(No)31 b(\014ltering)e(of)i(the)g(generated)h(completions)e(against) -150 3011 y(the)f(w)m(ord)g(b)s(eing)e(completed)i(is)f(p)s(erformed;)g -(the)h(function)f(or)h(command)f(has)h(complete)g(freedom)g(in)150 -3121 y(generating)i(the)f(matc)m(hes.)275 3258 y(An)m(y)h(function)g -(sp)s(eci\014ed)f(with)g(`)p Fs(-F)p Ft(')i(is)f(in)m(v)m(ok)m(ed)h -(\014rst.)44 b(The)31 b(function)g(ma)m(y)h(use)g(an)m(y)g(of)g(the)g -(shell)150 3367 y(facilities,)40 b(including)d(the)j -Fs(compgen)d Ft(builtin)g(describ)s(ed)g(b)s(elo)m(w)i(\(see)i(Section) -e(8.7)i([Programmable)150 3477 y(Completion)26 b(Builtins],)f(page)j +(are)g(b)s(eing)f(completed,)j(the)d(second)h(argumen)m(t)g(is)150 +2792 y(the)h(w)m(ord)g(b)s(eing)g(completed,)i(and)e(the)g(third)f +(argumen)m(t)i(is)f(the)g(w)m(ord)g(preceding)g(the)h(w)m(ord)e(b)s +(eing)150 2902 y(completed)e(on)e(the)h(curren)m(t)g(command)f(line.)42 +b(No)31 b(\014ltering)g(of)g(the)g(generated)h(completions)g(against) +150 3011 y(the)d(w)m(ord)g(b)s(eing)f(completed)i(is)f(p)s(erformed;)f +(the)h(function)g(or)g(command)f(has)h(complete)h(freedom)f(in)150 +3121 y(generating)j(the)e(matc)m(hes.)275 3258 y(An)m(y)h(function)h +(sp)s(eci\014ed)f(with)g(`)p Fs(-F)p Ft(')h(is)g(in)m(v)m(ok)m(ed)h +(\014rst.)44 b(The)31 b(function)h(ma)m(y)g(use)g(an)m(y)g(of)g(the)g +(shell)150 3367 y(facilities,)44 b(including)c(the)g +Fs(compgen)d Ft(builtin)j(describ)s(ed)e(b)s(elo)m(w)i(\(see)h(Section) +f(8.7)h([Programmable)150 3477 y(Completion)28 b(Builtins],)g(page)g (105\),)i(to)e(generate)h(the)e(matc)m(hes.)41 b(It)27 -b(m)m(ust)g(put)g(the)g(p)s(ossible)e(comple-)150 3587 -y(tions)30 b(in)f(the)h Fs(COMPREPLY)e Ft(arra)m(y)j(v)-5 -b(ariable.)275 3724 y(Next,)23 b(an)m(y)e(command)f(sp)s(eci\014ed)f -(with)g(the)i(`)p Fs(-C)p Ft(')f(option)g(is)g(in)m(v)m(ok)m(ed)h(in)e -(an)h(en)m(vironmen)m(t)g(equiv)-5 b(alen)m(t)150 3833 -y(to)26 b(command)e(substitution.)37 b(It)25 b(should)e(prin)m(t)h(a)h -(list)f(of)h(completions,)g(one)g(p)s(er)f(line,)h(to)h(the)f(standard) -150 3943 y(output.)40 b(Bac)m(kslash)31 b(ma)m(y)g(b)s(e)f(used)g(to)h -(escap)s(e)g(a)f(newline,)f(if)g(necessary)-8 b(.)275 -4080 y(After)42 b(all)e(of)i(the)g(p)s(ossible)e(completions)h(are)h -(generated,)k(an)m(y)c(\014lter)f(sp)s(eci\014ed)f(with)h(the)h(`)p -Fs(-X)p Ft(')150 4189 y(option)33 b(is)f(applied)f(to)j(the)f(list.)47 -b(The)33 b(\014lter)f(is)g(a)i(pattern)f(as)g(used)g(for)g(pathname)g -(expansion;)g(a)h(`)p Fs(&)p Ft(')150 4299 y(in)k(the)h(pattern)g(is)f -(replaced)g(with)g(the)h(text)h(of)f(the)g(w)m(ord)g(b)s(eing)e -(completed.)67 b(A)39 b(literal)e(`)p Fs(&)p Ft(')i(ma)m(y)150 -4408 y(b)s(e)e(escap)s(ed)h(with)f(a)i(bac)m(kslash;)j(the)c(bac)m -(kslash)g(is)f(remo)m(v)m(ed)i(b)s(efore)e(attempting)i(a)f(matc)m(h.) -65 b(An)m(y)150 4518 y(completion)33 b(that)i(matc)m(hes)g(the)f -(pattern)g(will)d(b)s(e)j(remo)m(v)m(ed)h(from)e(the)h(list.)51 -b(A)34 b(leading)e(`)p Fs(!)p Ft(')j(negates)150 4628 -y(the)c(pattern;)f(in)f(this)h(case)h(an)m(y)g(completion)e(not)i(matc) -m(hing)g(the)f(pattern)h(will)c(b)s(e)j(remo)m(v)m(ed.)275 -4765 y(Finally)-8 b(,)30 b(an)m(y)i(pre\014x)f(and)g(su\016x)g(sp)s -(eci\014ed)f(with)h(the)h(`)p Fs(-P)p Ft(')f(and)g(`)p -Fs(-S)p Ft(')h(options)f(are)h(added)f(to)i(eac)m(h)150 -4874 y(mem)m(b)s(er)e(of)g(the)h(completion)f(list,)f(and)h(the)h -(result)e(is)h(returned)f(to)i(the)g(Readline)e(completion)h(co)s(de) -150 4984 y(as)g(the)f(list)f(of)i(p)s(ossible)d(completions.)275 -5121 y(If)22 b(the)i(previously-applied)19 b(actions)24 -b(do)f(not)h(generate)h(an)m(y)f(matc)m(hes,)i(and)d(the)g(`)p -Fs(-o)30 b(dirnames)p Ft(')22 b(op-)150 5230 y(tion)28 -b(w)m(as)g(supplied)d(to)k Fs(complete)d Ft(when)h(the)h(compsp)s(ec)g -(w)m(as)g(de\014ned,)g(directory)f(name)i(completion)150 -5340 y(is)g(attempted.)p eop +b(m)m(ust)g(put)g(the)g(p)s(ossible)g(comple-)150 3587 +y(tions)k(in)f(the)g Fs(COMPREPLY)e Ft(arra)m(y)j(v)-5 +b(ariable.)275 3724 y(Next,)23 b(an)m(y)e(command)f(sp)s(eci\014ed)g +(with)g(the)h(`)p Fs(-C)p Ft(')f(option)h(is)g(in)m(v)m(ok)m(ed)h(in)e +(an)g(en)m(vironmen)m(t)h(equiv)-5 b(alen)m(t)150 3833 +y(to)26 b(command)e(substitution.)39 b(It)25 b(should)f(prin)m(t)h(a)g +(list)h(of)f(completions,)i(one)e(p)s(er)f(line,)j(to)f(the)f(standard) +150 3943 y(output.)40 b(Bac)m(kslash)32 b(ma)m(y)f(b)s(e)f(used)g(to)h +(escap)s(e)g(a)f(newline,)h(if)f(necessary)-8 b(.)275 +4080 y(After)42 b(all)g(of)g(the)g(p)s(ossible)g(completions)h(are)f +(generated,)k(an)m(y)c(\014lter)g(sp)s(eci\014ed)f(with)h(the)g(`)p +Fs(-X)p Ft(')150 4189 y(option)34 b(is)f(applied)g(to)h(the)f(list.)49 +b(The)33 b(\014lter)g(is)g(a)h(pattern)f(as)g(used)g(for)g(pathname)g +(expansion;)h(a)g(`)p Fs(&)p Ft(')150 4299 y(in)39 b(the)g(pattern)g +(is)g(replaced)g(with)g(the)g(text)h(of)f(the)g(w)m(ord)g(b)s(eing)f +(completed.)68 b(A)39 b(literal)h(`)p Fs(&)p Ft(')f(ma)m(y)150 +4408 y(b)s(e)e(escap)s(ed)h(with)g(a)h(bac)m(kslash;)k(the)38 +b(bac)m(kslash)h(is)f(remo)m(v)m(ed)h(b)s(efore)e(attempting)j(a)e +(matc)m(h.)65 b(An)m(y)150 4518 y(completion)35 b(that)g(matc)m(hes)g +(the)f(pattern)g(will)g(b)s(e)g(remo)m(v)m(ed)h(from)e(the)h(list.)53 +b(A)34 b(leading)g(`)p Fs(!)p Ft(')h(negates)150 4628 +y(the)c(pattern;)f(in)g(this)h(case)g(an)m(y)g(completion)g(not)g(matc) +m(hing)h(the)e(pattern)h(will)f(b)s(e)g(remo)m(v)m(ed.)275 +4765 y(Finally)-8 b(,)33 b(an)m(y)f(pre\014x)f(and)g(su\016x)g(sp)s +(eci\014ed)g(with)h(the)g(`)p Fs(-P)p Ft(')f(and)g(`)p +Fs(-S)p Ft(')h(options)g(are)g(added)f(to)i(eac)m(h)150 +4874 y(mem)m(b)s(er)e(of)g(the)h(completion)h(list,)f(and)f(the)h +(result)f(is)h(returned)e(to)i(the)g(Readline)g(completion)h(co)s(de) +150 4984 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)275 +5121 y(If)22 b(the)i(previously-applied)f(actions)i(do)e(not)h +(generate)h(an)m(y)f(matc)m(hes,)i(and)d(the)g(`)p Fs(-o)30 +b(dirnames)p Ft(')22 b(op-)150 5230 y(tion)29 b(w)m(as)f(supplied)f(to) +i Fs(complete)d Ft(when)h(the)h(compsp)s(ec)g(w)m(as)g(de\014ned,)g +(directory)g(name)h(completion)150 5340 y(is)h(attempted.)p +eop end %%Page: 105 111 -105 110 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2060 b(105)275 299 y(If)30 b(the)i(`)p -Fs(-o)e(plusdirs)p Ft(')f(option)i(w)m(as)g(supplied)d(to)k +TeXDict begin 105 110 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(105)275 299 y(If)30 +b(the)i(`)p Fs(-o)e(plusdirs)p Ft(')f(option)j(w)m(as)f(supplied)f(to)i Fs(complete)e Ft(when)g(the)h(compsp)s(ec)g(w)m(as)h(de\014ned,)150 -408 y(directory)j(name)g(completion)g(is)f(attempted)i(and)f(an)m(y)h -(matc)m(hes)g(are)g(added)f(to)h(the)f(results)f(of)i(the)150 -518 y(other)31 b(actions.)275 659 y(By)g(default,)h(if)e(a)i(compsp)s -(ec)f(is)g(found,)g(whatev)m(er)h(it)f(generates)i(is)d(returned)h(to)h -(the)g(completion)150 769 y(co)s(de)21 b(as)g(the)g(full)e(set)i(of)g -(p)s(ossible)d(completions.)37 b(The)20 b(default)g(Bash)h(completions) -f(are)i(not)f(attempted,)150 879 y(and)k(the)h(Readline)e(default)h(of) -h(\014lename)f(completion)g(is)g(disabled.)36 b(If)26 +408 y(directory)k(name)f(completion)i(is)e(attempted)h(and)f(an)m(y)h +(matc)m(hes)g(are)g(added)f(to)h(the)f(results)g(of)h(the)150 +518 y(other)31 b(actions.)275 659 y(By)g(default,)i(if)e(a)h(compsp)s +(ec)f(is)h(found,)f(whatev)m(er)h(it)g(generates)h(is)e(returned)g(to)h +(the)g(completion)150 769 y(co)s(de)21 b(as)g(the)g(full)g(set)g(of)g +(p)s(ossible)f(completions.)39 b(The)20 b(default)h(Bash)g(completions) +h(are)g(not)f(attempted,)150 879 y(and)k(the)h(Readline)g(default)g(of) +g(\014lename)g(completion)h(is)f(disabled.)38 b(If)26 b(the)g(`)p Fs(-o)k(bashdefault)p Ft(')22 b(option)150 -988 y(w)m(as)i(supplied)c(to)25 b Fs(complete)c Ft(when)i(the)g(compsp) -s(ec)h(w)m(as)g(de\014ned,)g(the)f(default)g(Bash)h(completions)f(are) -150 1098 y(attempted)h(if)e(the)h(compsp)s(ec)g(generates)i(no)e(matc)m +988 y(w)m(as)i(supplied)e(to)j Fs(complete)c Ft(when)i(the)g(compsp)s +(ec)h(w)m(as)g(de\014ned,)g(the)f(default)h(Bash)g(completions)h(are) +150 1098 y(attempted)f(if)f(the)g(compsp)s(ec)g(generates)i(no)e(matc)m (hes.)39 b(If)23 b(the)g(`)p Fs(-o)30 b(default)p Ft(')21 -b(option)i(w)m(as)g(supplied)d(to)150 1207 y Fs(complete)25 -b Ft(when)h(the)h(compsp)s(ec)f(w)m(as)i(de\014ned,)e(Readline's)g -(default)g(completion)g(will)e(b)s(e)i(p)s(erformed)150 -1317 y(if)j(the)i(compsp)s(ec)f(\(and,)g(if)g(attempted,)h(the)g -(default)e(Bash)i(completions\))f(generate)i(no)e(matc)m(hes.)275 -1458 y(When)20 b(a)i(compsp)s(ec)e(indicates)g(that)i(directory)f(name) -g(completion)f(is)g(desired,)i(the)f(programmable)150 -1568 y(completion)29 b(functions)f(force)j(Readline)d(to)j(app)s(end)d -(a)i(slash)f(to)h(completed)g(names)f(whic)m(h)g(are)h(sym-)150 -1678 y(b)s(olic)38 b(links)g(to)j(directories,)h(sub)5 -b(ject)40 b(to)h(the)f(v)-5 b(alue)40 b(of)g(the)g Fq(mark-directories) -j Ft(Readline)c(v)-5 b(ariable,)150 1787 y(regardless)30 -b(of)g(the)h(setting)f(of)h(the)f Fq(mark-symlink)m(ed-directories)i -Ft(Readline)d(v)-5 b(ariable.)150 2062 y Fr(8.7)68 b(Programmable)47 -b(Completion)f(Builtins)275 2313 y Ft(Tw)m(o)30 b(builtin)d(commands)j -(are)h(a)m(v)-5 b(ailable)29 b(to)i(manipulate)e(the)i(programmable)e -(completion)h(facil-)150 2423 y(ities.)150 2592 y Fs(compgen)870 -2730 y(compgen)46 b([)p Fj(option)11 b Fs(])45 b([)p -Fj(word)11 b Fs(])630 2868 y Ft(Generate)27 b(p)s(ossible)c(completion) -i(matc)m(hes)i(for)e Fq(w)m(ord)k Ft(according)d(to)g(the)g -Fq(option)p Ft(s,)g(whic)m(h)630 2978 y(ma)m(y)i(b)s(e)f(an)m(y)h -(option)f(accepted)i(b)m(y)e(the)h Fs(complete)d Ft(builtin)g(with)h -(the)i(exception)f(of)h(`)p Fs(-p)p Ft(')630 3088 y(and)k(`)p -Fs(-r)p Ft(',)i(and)e(write)g(the)h(matc)m(hes)h(to)g(the)f(standard)f -(output.)48 b(When)33 b(using)e(the)i(`)p Fs(-F)p Ft(')630 -3197 y(or)28 b(`)p Fs(-C)p Ft(')g(options,)g(the)g(v)-5 -b(arious)28 b(shell)e(v)-5 b(ariables)27 b(set)h(b)m(y)g(the)g -(programmable)g(completion)630 3307 y(facilities,)h(while)f(a)m(v)-5 -b(ailable,)30 b(will)e(not)j(ha)m(v)m(e)g(useful)e(v)-5 -b(alues.)630 3445 y(The)34 b(matc)m(hes)h(will)d(b)s(e)i(generated)h -(in)e(the)i(same)g(w)m(a)m(y)g(as)g(if)e(the)i(programmable)e(com-)630 -3554 y(pletion)c(co)s(de)i(had)f(generated)i(them)e(directly)g(from)g -(a)h(completion)f(sp)s(eci\014cation)f(with)630 3664 -y(the)g(same)h(\015ags.)40 b(If)29 b Fq(w)m(ord)j Ft(is)c(sp)s -(eci\014ed,)g(only)g(those)i(completions)e(matc)m(hing)h -Fq(w)m(ord)k Ft(will)630 3773 y(b)s(e)d(displa)m(y)m(ed.)630 -3911 y(The)24 b(return)g(v)-5 b(alue)24 b(is)g(true)g(unless)f(an)i(in) -m(v)-5 b(alid)22 b(option)i(is)g(supplied,)e(or)j(no)g(matc)m(hes)g(w)m +b(option)j(w)m(as)f(supplied)f(to)150 1207 y Fs(complete)j +Ft(when)h(the)h(compsp)s(ec)f(w)m(as)i(de\014ned,)e(Readline's)i +(default)f(completion)h(will)f(b)s(e)f(p)s(erformed)150 +1317 y(if)k(the)h(compsp)s(ec)f(\(and,)g(if)h(attempted,)g(the)g +(default)f(Bash)h(completions\))h(generate)g(no)e(matc)m(hes.)275 +1458 y(When)20 b(a)i(compsp)s(ec)e(indicates)i(that)g(directory)g(name) +f(completion)h(is)f(desired,)i(the)e(programmable)150 +1568 y(completion)31 b(functions)e(force)i(Readline)f(to)h(app)s(end)d +(a)i(slash)g(to)g(completed)h(names)e(whic)m(h)h(are)g(sym-)150 +1678 y(b)s(olic)40 b(links)g(to)h(directories,)j(sub)5 +b(ject)40 b(to)h(the)f(v)-5 b(alue)41 b(of)f(the)g Fq(mark-directories) +45 b Ft(Readline)c(v)-5 b(ariable,)150 1787 y(regardless)31 +b(of)f(the)h(setting)g(of)g(the)f Fq(mark-symlink)m(ed-directories)36 +b Ft(Readline)31 b(v)-5 b(ariable.)150 2062 y Fr(8.7)68 +b(Programmable)47 b(Completion)f(Builtins)275 2313 y +Ft(Tw)m(o)30 b(builtin)g(commands)g(are)h(a)m(v)-5 b(ailable)32 +b(to)f(manipulate)g(the)g(programmable)f(completion)i(facil-)150 +2423 y(ities.)150 2592 y Fs(compgen)870 2730 y(compgen)46 +b([)p Fj(option)11 b Fs(])45 b([)p Fj(word)11 b Fs(])630 +2868 y Ft(Generate)27 b(p)s(ossible)e(completion)i(matc)m(hes)g(for)e +Fq(w)m(ord)k Ft(according)e(to)f(the)g Fq(option)p Ft(s,)h(whic)m(h)630 +2978 y(ma)m(y)h(b)s(e)f(an)m(y)h(option)g(accepted)h(b)m(y)e(the)h +Fs(complete)d Ft(builtin)j(with)f(the)h(exception)g(of)g(`)p +Fs(-p)p Ft(')630 3088 y(and)k(`)p Fs(-r)p Ft(',)i(and)e(write)h(the)g +(matc)m(hes)h(to)g(the)f(standard)f(output.)48 b(When)33 +b(using)f(the)h(`)p Fs(-F)p Ft(')630 3197 y(or)28 b(`)p +Fs(-C)p Ft(')g(options,)h(the)f(v)-5 b(arious)29 b(shell)f(v)-5 +b(ariables)29 b(set)f(b)m(y)g(the)g(programmable)h(completion)630 +3307 y(facilities,)k(while)d(a)m(v)-5 b(ailable,)33 b(will)e(not)g(ha)m +(v)m(e)g(useful)f(v)-5 b(alues.)630 3445 y(The)34 b(matc)m(hes)h(will)g +(b)s(e)f(generated)h(in)f(the)h(same)g(w)m(a)m(y)g(as)g(if)f(the)h +(programmable)f(com-)630 3554 y(pletion)d(co)s(de)g(had)f(generated)i +(them)e(directly)i(from)e(a)h(completion)h(sp)s(eci\014cation)f(with) +630 3664 y(the)e(same)h(\015ags.)40 b(If)29 b Fq(w)m(ord)j +Ft(is)d(sp)s(eci\014ed,)g(only)g(those)h(completions)g(matc)m(hing)g +Fq(w)m(ord)j Ft(will)630 3773 y(b)s(e)d(displa)m(y)m(ed.)630 +3911 y(The)24 b(return)g(v)-5 b(alue)25 b(is)g(true)f(unless)g(an)h(in) +m(v)-5 b(alid)25 b(option)g(is)g(supplied,)f(or)h(no)g(matc)m(hes)g(w)m (ere)630 4021 y(generated.)150 4187 y Fs(complete)870 4325 y(complete)46 b([-abcdefgjksuv])d([-o)k Fj(comp-option)11 b Fs(])44 b([-A)j Fj(action)11 b Fs(])45 b([-G)i Fj(glob-)870 @@ -10178,2028 +11897,2037 @@ b Fs(])44 b([-A)j Fj(action)11 b Fs(])45 b([-G)i Fj(glob-)870 b Fs(])45 b([-X)i Fj(filterpat)11 b Fs(])45 b([-F)i Fj(function)11 b Fs(])870 4654 y([-C)47 b Fj(command)11 b Fs(])45 b Fj(name)57 b Fs([)p Fj(name)g Fs(...)o(])870 4764 y(complete)46 -b(-pr)g([)p Fj(name)57 b Fs(...])630 4902 y Ft(Sp)s(ecify)32 -b(ho)m(w)i(argumen)m(ts)h(to)f(eac)m(h)i Fq(name)j Ft(should)32 -b(b)s(e)h(completed.)52 b(If)33 b(the)i(`)p Fs(-p)p Ft(')e(option)630 -5011 y(is)c(supplied,)d(or)k(if)f(no)g(options)g(are)h(supplied,)d +b(-pr)g([)p Fj(name)57 b Fs(...])630 4902 y Ft(Sp)s(ecify)33 +b(ho)m(w)h(argumen)m(ts)h(to)f(eac)m(h)i Fq(name)j Ft(should)33 +b(b)s(e)g(completed.)53 b(If)33 b(the)i(`)p Fs(-p)p Ft(')e(option)630 +5011 y(is)d(supplied,)e(or)i(if)g(no)f(options)h(are)g(supplied,)f (existing)h(completion)h(sp)s(eci\014cations)g(are)630 -5121 y(prin)m(ted)42 b(in)h(a)h(w)m(a)m(y)h(that)f(allo)m(ws)f(them)h -(to)g(b)s(e)g(reused)f(as)h(input.)79 b(The)43 b(`)p -Fs(-r)p Ft(')g(option)630 5230 y(remo)m(v)m(es)29 b(a)f(completion)f -(sp)s(eci\014cation)f(for)i(eac)m(h)g Fq(name)p Ft(,)h(or,)f(if)f(no)g -Fq(name)5 b Ft(s)28 b(are)g(supplied,)630 5340 y(all)h(completion)h(sp) -s(eci\014cations.)p eop +5121 y(prin)m(ted)43 b(in)h(a)g(w)m(a)m(y)h(that)f(allo)m(ws)h(them)f +(to)g(b)s(e)g(reused)f(as)h(input.)80 b(The)43 b(`)p +Fs(-r)p Ft(')g(option)630 5230 y(remo)m(v)m(es)29 b(a)f(completion)h +(sp)s(eci\014cation)f(for)g(eac)m(h)g Fq(name)p Ft(,)h(or,)f(if)g(no)f +Fq(name)5 b Ft(s)28 b(are)g(supplied,)630 5340 y(all)j(completion)h(sp) +s(eci\014cations.)p eop end %%Page: 106 112 -106 111 bop 150 -116 a Ft(106)2527 b(Bash)31 b(Reference)g(Man)m(ual) -630 299 y(The)e(pro)s(cess)g(of)h(applying)e(these)i(completion)e(sp)s -(eci\014cations)h(when)f(w)m(ord)i(completion)630 408 -y(is)k(attempted)i(is)e(describ)s(ed)f(ab)s(o)m(v)m(e)k(\(see)f -(Section)f(8.6)h([Programmable)f(Completion],)630 518 -y(page)c(103\).)630 652 y(Other)41 b(options,)k(if)40 -b(sp)s(eci\014ed,)j(ha)m(v)m(e)g(the)f(follo)m(wing)f(meanings.)74 -b(The)41 b(argumen)m(ts)h(to)630 762 y(the)e(`)p Fs(-G)p -Ft(',)j(`)p Fs(-W)p Ft(',)g(and)d(`)p Fs(-X)p Ft(')g(options)f(\(and,)k -(if)c(necessary)-8 b(,)44 b(the)c(`)p Fs(-P)p Ft(')h(and)e(`)p -Fs(-S)p Ft(')h(options\))630 872 y(should)29 b(b)s(e)i(quoted)g(to)h -(protect)g(them)f(from)g(expansion)f(b)s(efore)h(the)g -Fs(complete)e Ft(builtin)630 981 y(is)g(in)m(v)m(ok)m(ed.)630 -1140 y Fs(-o)h Fj(comp-option)1110 1250 y Ft(The)c Fq(comp-option)h -Ft(con)m(trols)g(sev)m(eral)h(asp)s(ects)f(of)g(the)g(compsp)s(ec's)g -(b)s(eha)m(v-)1110 1359 y(ior)f(b)s(ey)m(ond)g(the)g(simple)f -(generation)i(of)f(completions.)39 b Fq(comp-option)26 -b Ft(ma)m(y)1110 1469 y(b)s(e)k(one)g(of:)1110 1628 y -Fs(bashdefault)1590 1738 y Ft(P)m(erform)d(the)h(rest)f(of)h(the)g -(default)e(Bash)i(completions)e(if)h(the)1590 1847 y(compsp)s(ec)j -(generates)i(no)e(matc)m(hes.)1110 2006 y Fs(default)144 -b Ft(Use)22 b(Readline's)e(default)h(\014lename)g(completion)f(if)h -(the)h(comp-)1590 2116 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110 -2275 y Fs(dirnames)96 b Ft(P)m(erform)46 b(directory)f(name)i -(completion)e(if)g(the)h(compsp)s(ec)1590 2385 y(generates)32 +TeXDict begin 106 111 bop 150 -116 a Ft(106)2527 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y(The)e(pro)s(cess)g(of)h(applying)g +(these)g(completion)g(sp)s(eci\014cations)h(when)d(w)m(ord)i +(completion)630 408 y(is)35 b(attempted)h(is)f(describ)s(ed)f(ab)s(o)m +(v)m(e)j(\(see)f(Section)g(8.6)g([Programmable)g(Completion],)630 +518 y(page)31 b(103\).)630 652 y(Other)41 b(options,)46 +b(if)41 b(sp)s(eci\014ed,)j(ha)m(v)m(e)f(the)f(follo)m(wing)i +(meanings.)75 b(The)41 b(argumen)m(ts)h(to)630 762 y(the)e(`)p +Fs(-G)p Ft(',)j(`)p Fs(-W)p Ft(',)g(and)d(`)p Fs(-X)p +Ft(')g(options)g(\(and,)j(if)d(necessary)-8 b(,)44 b(the)c(`)p +Fs(-P)p Ft(')h(and)e(`)p Fs(-S)p Ft(')h(options\))630 +872 y(should)30 b(b)s(e)h(quoted)g(to)h(protect)g(them)f(from)g +(expansion)g(b)s(efore)g(the)g Fs(complete)e Ft(builtin)630 +981 y(is)h(in)m(v)m(ok)m(ed.)630 1140 y Fs(-o)g Fj(comp-option)1110 +1250 y Ft(The)c Fq(comp-option)i Ft(con)m(trols)g(sev)m(eral)h(asp)s +(ects)e(of)g(the)g(compsp)s(ec's)g(b)s(eha)m(v-)1110 +1359 y(ior)g(b)s(ey)m(ond)f(the)g(simple)h(generation)h(of)e +(completions.)41 b Fq(comp-option)27 b Ft(ma)m(y)1110 +1469 y(b)s(e)j(one)g(of:)1110 1628 y Fs(bashdefault)1590 +1738 y Ft(P)m(erform)d(the)h(rest)f(of)h(the)g(default)f(Bash)h +(completions)g(if)g(the)1590 1847 y(compsp)s(ec)i(generates)i(no)e +(matc)m(hes.)1110 2006 y Fs(default)144 b Ft(Use)22 b(Readline's)g +(default)g(\014lename)g(completion)g(if)g(the)g(comp-)1590 +2116 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110 +2275 y Fs(dirnames)96 b Ft(P)m(erform)46 b(directory)g(name)h +(completion)g(if)f(the)g(compsp)s(ec)1590 2385 y(generates)32 b(no)e(matc)m(hes.)1110 2544 y Fs(filenames)1590 2653 -y Ft(T)-8 b(ell)38 b(Readline)f(that)j(the)f(compsp)s(ec)f(generates)j -(\014lenames,)1590 2763 y(so)29 b(it)g(can)g(p)s(erform)f(an)m(y)h -(\014lename-sp)s(eci\014c)f(pro)s(cessing)f(\(lik)m(e)1590 -2872 y(adding)h(a)i(slash)e(to)i(directory)f(names)g(or)g(suppressing)e -(trail-)1590 2982 y(ing)37 b(spaces\).)66 b(This)36 b(option)i(is)f(in) -m(tended)g(to)i(b)s(e)f(used)f(with)1590 3092 y(shell)29 -b(functions)g(sp)s(eci\014ed)f(with)h(`)p Fs(-F)p Ft('.)1110 -3251 y Fs(nospace)144 b Ft(T)-8 b(ell)38 b(Readline)g(not)i(to)g(app)s -(end)d(a)j(space)g(\(the)f(default\))g(to)1590 3360 y(w)m(ords)30 -b(completed)g(at)h(the)g(end)f(of)g(the)h(line.)630 3519 -y Fs(-A)f Fj(action)1110 3629 y Ft(The)25 b Fq(action)g -Ft(ma)m(y)h(b)s(e)e(one)h(of)h(the)f(follo)m(wing)f(to)h(generate)i(a)e -(list)f(of)h(p)s(ossible)1110 3739 y(completions:)1110 -3898 y Fs(alias)240 b Ft(Alias)29 b(names.)41 b(Ma)m(y)31 -b(also)g(b)s(e)f(sp)s(eci\014ed)e(as)j(`)p Fs(-a)p Ft('.)1110 -4057 y Fs(arrayvar)96 b Ft(Arra)m(y)31 b(v)-5 b(ariable)29 -b(names.)1110 4216 y Fs(binding)144 b Ft(Readline)28 -b(k)m(ey)h(binding)d(names)j(\(see)h(Section)e(8.4)i([Bindable)1590 -4325 y(Readline)f(Commands],)h(page)h(95\).)1110 4484 -y Fs(builtin)144 b Ft(Names)21 b(of)g(shell)d(builtin)g(commands.)37 -b(Ma)m(y)21 b(also)g(b)s(e)f(sp)s(eci\014ed)1590 4594 +y Ft(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j +(\014lenames,)1590 2763 y(so)29 b(it)h(can)f(p)s(erform)f(an)m(y)h +(\014lename-sp)s(eci\014c)h(pro)s(cessing)e(\(lik)m(e)1590 +2872 y(adding)h(a)h(slash)f(to)h(directory)g(names)f(or)g(suppressing)f +(trail-)1590 2982 y(ing)38 b(spaces\).)66 b(This)37 b(option)i(is)f(in) +m(tended)g(to)h(b)s(e)f(used)f(with)1590 3092 y(shell)31 +b(functions)f(sp)s(eci\014ed)f(with)h(`)p Fs(-F)p Ft('.)1110 +3251 y Fs(nospace)144 b Ft(T)-8 b(ell)40 b(Readline)g(not)g(to)g(app)s +(end)d(a)j(space)g(\(the)f(default\))h(to)1590 3360 y(w)m(ords)30 +b(completed)h(at)g(the)g(end)f(of)g(the)h(line.)630 3519 +y Fs(-A)f Fj(action)1110 3629 y Ft(The)25 b Fq(action)h +Ft(ma)m(y)g(b)s(e)e(one)h(of)h(the)f(follo)m(wing)i(to)e(generate)i(a)e +(list)h(of)f(p)s(ossible)1110 3739 y(completions:)1110 +3898 y Fs(alias)240 b Ft(Alias)31 b(names.)41 b(Ma)m(y)31 +b(also)h(b)s(e)e(sp)s(eci\014ed)f(as)i(`)p Fs(-a)p Ft('.)1110 +4057 y Fs(arrayvar)96 b Ft(Arra)m(y)31 b(v)-5 b(ariable)31 +b(names.)1110 4216 y Fs(binding)144 b Ft(Readline)30 +b(k)m(ey)f(binding)f(names)h(\(see)h(Section)f(8.4)h([Bindable)1590 +4325 y(Readline)h(Commands],)f(page)h(95\).)1110 4484 +y Fs(builtin)144 b Ft(Names)21 b(of)g(shell)f(builtin)h(commands.)37 +b(Ma)m(y)21 b(also)h(b)s(e)e(sp)s(eci\014ed)1590 4594 y(as)31 b(`)p Fs(-b)p Ft('.)1110 4753 y Fs(command)144 -b Ft(Command)29 b(names.)41 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s -(eci\014ed)e(as)j(`)p Fs(-c)p Ft('.)1110 4912 y Fs(directory)1590 -5022 y Ft(Directory)g(names.)40 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s -(eci\014ed)f(as)h(`)p Fs(-d)p Ft('.)1110 5181 y Fs(disabled)96 -b Ft(Names)31 b(of)g(disabled)d(shell)g(builtins.)1110 -5340 y Fs(enabled)144 b Ft(Names)31 b(of)g(enabled)e(shell)f(builtins.) -p eop +b Ft(Command)29 b(names.)41 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s +(eci\014ed)f(as)i(`)p Fs(-c)p Ft('.)1110 4912 y Fs(directory)1590 +5022 y Ft(Directory)h(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s +(eci\014ed)g(as)g(`)p Fs(-d)p Ft('.)1110 5181 y Fs(disabled)96 +b Ft(Names)31 b(of)g(disabled)f(shell)g(builtins.)1110 +5340 y Fs(enabled)144 b Ft(Names)31 b(of)g(enabled)f(shell)g(builtins.) +p eop end %%Page: 107 113 -107 112 bop 150 -116 a Ft(Chapter)30 b(8:)41 b(Command)29 -b(Line)h(Editing)2060 b(107)1110 299 y Fs(export)192 -b Ft(Names)34 b(of)f(exp)s(orted)f(shell)f(v)-5 b(ariables.)47 -b(Ma)m(y)35 b(also)d(b)s(e)h(sp)s(eci-)1590 408 y(\014ed)d(as)g(`)p -Fs(-e)p Ft('.)1110 558 y Fs(file)288 b Ft(File)30 b(names.)40 -b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)e(as)j(`)p +TeXDict begin 107 112 bop 150 -116 a Ft(Chapter)30 b(8:)41 +b(Command)29 b(Line)i(Editing)2062 b(107)1110 299 y Fs(export)192 +b Ft(Names)34 b(of)f(exp)s(orted)f(shell)h(v)-5 b(ariables.)49 +b(Ma)m(y)35 b(also)e(b)s(e)g(sp)s(eci-)1590 408 y(\014ed)d(as)g(`)p +Fs(-e)p Ft('.)1110 558 y Fs(file)288 b Ft(File)32 b(names.)40 +b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i(`)p Fs(-f)p Ft('.)1110 708 y Fs(function)96 b Ft(Names)31 -b(of)g(shell)d(functions.)1110 858 y Fs(group)240 b Ft(Group)30 -b(names.)40 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)f(as)h(`)p -Fs(-g)p Ft('.)1110 1008 y Fs(helptopic)1590 1118 y Ft(Help)36 -b(topics)g(as)h(accepted)h(b)m(y)e(the)h Fs(help)f Ft(builtin)d(\(see)k -(Sec-)1590 1228 y(tion)30 b(4.2)h([Bash)g(Builtins],)d(page)j(39\).) +b(of)g(shell)f(functions.)1110 858 y Fs(group)240 b Ft(Group)30 +b(names.)40 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)g(`)p +Fs(-g)p Ft('.)1110 1008 y Fs(helptopic)1590 1118 y Ft(Help)37 +b(topics)g(as)g(accepted)h(b)m(y)e(the)h Fs(help)f Ft(builtin)g(\(see)h +(Sec-)1590 1228 y(tion)31 b(4.2)g([Bash)g(Builtins],)g(page)g(39\).) 1110 1377 y Fs(hostname)96 b Ft(Hostnames,)89 b(as)76 -b(tak)m(en)h(from)f(the)g(\014le)g(sp)s(eci\014ed)e(b)m(y)1590 -1487 y(the)55 b Fs(HOSTFILE)e Ft(shell)h(v)-5 b(ariable)54 -b(\(see)i(Section)f(5.2)i([Bash)1590 1597 y(V)-8 b(ariables],)30 -b(page)h(55\).)1110 1747 y Fs(job)336 b Ft(Job)31 b(names,)h(if)f(job)g -(con)m(trol)h(is)f(activ)m(e.)45 b(Ma)m(y)33 b(also)f(b)s(e)f(sp)s +b(tak)m(en)h(from)f(the)g(\014le)h(sp)s(eci\014ed)e(b)m(y)1590 +1487 y(the)55 b Fs(HOSTFILE)e Ft(shell)j(v)-5 b(ariable)56 +b(\(see)g(Section)g(5.2)h([Bash)1590 1597 y(V)-8 b(ariables],)32 +b(page)f(55\).)1110 1747 y Fs(job)336 b Ft(Job)31 b(names,)h(if)g(job)f +(con)m(trol)i(is)f(activ)m(e.)46 b(Ma)m(y)33 b(also)g(b)s(e)e(sp)s (eci-)1590 1856 y(\014ed)f(as)g(`)p Fs(-j)p Ft('.)1110 -2006 y Fs(keyword)144 b Ft(Shell)28 b(reserv)m(ed)j(w)m(ords.)40 -b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)e(as)j(`)p +2006 y Fs(keyword)144 b Ft(Shell)30 b(reserv)m(ed)h(w)m(ords.)40 +b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f(as)i(`)p Fs(-k)p Ft('.)1110 2156 y Fs(running)144 b Ft(Names)31 -b(of)g(running)c(jobs,)j(if)g(job)g(con)m(trol)g(is)g(activ)m(e.)1110 -2306 y Fs(service)144 b Ft(Service)30 b(names.)41 b(Ma)m(y)31 -b(also)f(b)s(e)g(sp)s(eci\014ed)f(as)h(`)p Fs(-s)p Ft('.)1110 -2456 y Fs(setopt)192 b Ft(V)-8 b(alid)32 b(argumen)m(ts)h(for)f(the)h -(`)p Fs(-o)p Ft(')g(option)f(to)i(the)f Fs(set)e Ft(builtin)1590 -2566 y(\(see)g(Section)g(4.3)g([The)f(Set)h(Builtin],)d(page)j(50\).) -1110 2716 y Fs(shopt)240 b Ft(Shell)38 b(option)h(names)h(as)g +b(of)g(running)d(jobs,)i(if)h(job)f(con)m(trol)h(is)g(activ)m(e.)1110 +2306 y Fs(service)144 b Ft(Service)31 b(names.)41 b(Ma)m(y)31 +b(also)g(b)s(e)f(sp)s(eci\014ed)g(as)g(`)p Fs(-s)p Ft('.)1110 +2456 y Fs(setopt)192 b Ft(V)-8 b(alid)34 b(argumen)m(ts)f(for)f(the)h +(`)p Fs(-o)p Ft(')g(option)g(to)h(the)f Fs(set)e Ft(builtin)1590 +2566 y(\(see)g(Section)h(4.3)f([The)f(Set)h(Builtin],)g(page)g(50\).) +1110 2716 y Fs(shopt)240 b Ft(Shell)40 b(option)g(names)g(as)g (accepted)i(b)m(y)e(the)g Fs(shopt)e Ft(builtin)1590 -2825 y(\(see)31 b(Section)g(4.2)g([Bash)g(Builtins],)d(page)j(39\).) -1110 2975 y Fs(signal)192 b Ft(Signal)29 b(names.)1110 -3125 y Fs(stopped)144 b Ft(Names)31 b(of)g(stopp)s(ed)e(jobs,)h(if)f -(job)h(con)m(trol)h(is)f(activ)m(e.)1110 3275 y Fs(user)288 -b Ft(User)30 b(names.)41 b(Ma)m(y)32 b(also)e(b)s(e)g(sp)s(eci\014ed)e -(as)j(`)p Fs(-u)p Ft('.)1110 3425 y Fs(variable)96 b -Ft(Names)36 b(of)g(all)e(shell)g(v)-5 b(ariables.)54 -b(Ma)m(y)37 b(also)e(b)s(e)g(sp)s(eci\014ed)f(as)1590 -3535 y(`)p Fs(-v)p Ft('.)630 3685 y Fs(-G)c Fj(globpat)1110 -3794 y Ft(The)39 b(\014lename)g(expansion)g(pattern)h -Fq(globpat)i Ft(is)d(expanded)g(to)h(generate)1110 3904 -y(the)31 b(p)s(ossible)c(completions.)630 4054 y Fs(-W)j -Fj(wordlist)1110 4163 y Ft(The)24 b Fq(w)m(ordlist)i -Ft(is)e(split)f(using)g(the)i(c)m(haracters)i(in)c(the)j -Fs(IFS)e Ft(sp)s(ecial)f(v)-5 b(ariable)1110 4273 y(as)36 -b(delimiters,)f(and)h(eac)m(h)h(resultan)m(t)f(w)m(ord)f(is)g -(expanded.)57 b(The)35 b(p)s(ossible)1110 4383 y(completions)29 -b(are)g(the)h(mem)m(b)s(ers)f(of)g(the)h(resultan)m(t)f(list)f(whic)m -(h)g(matc)m(h)j(the)1110 4492 y(w)m(ord)f(b)s(eing)f(completed.)630 -4642 y Fs(-C)h Fj(command)1110 4752 y Fq(command)35 b -Ft(is)d(executed)h(in)d(a)j(subshell)c(en)m(vironmen)m(t,)j(and)g(its)f -(output)h(is)1110 4861 y(used)e(as)g(the)h(p)s(ossible)d(completions.) -630 5011 y Fs(-F)i Fj(function)1110 5121 y Ft(The)25 -b(shell)g(function)f Fq(function)h Ft(is)g(executed)i(in)d(the)j -(curren)m(t)e(shell)g(en)m(viron-)1110 5230 y(men)m(t.)40 -b(When)25 b(it)g(\014nishes,)f(the)i(p)s(ossible)d(completions)h(are)i -(retriev)m(ed)f(from)1110 5340 y(the)31 b(v)-5 b(alue)29 -b(of)i(the)g Fs(COMPREPLY)c Ft(arra)m(y)k(v)-5 b(ariable.)p -eop +2825 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(39\).) +1110 2975 y Fs(signal)192 b Ft(Signal)31 b(names.)1110 +3125 y Fs(stopped)144 b Ft(Names)31 b(of)g(stopp)s(ed)e(jobs,)h(if)g +(job)g(con)m(trol)i(is)f(activ)m(e.)1110 3275 y Fs(user)288 +b Ft(User)30 b(names.)41 b(Ma)m(y)32 b(also)f(b)s(e)f(sp)s(eci\014ed)f +(as)i(`)p Fs(-u)p Ft('.)1110 3425 y Fs(variable)96 b +Ft(Names)36 b(of)g(all)g(shell)g(v)-5 b(ariables.)56 +b(Ma)m(y)37 b(also)f(b)s(e)f(sp)s(eci\014ed)g(as)1590 +3535 y(`)p Fs(-v)p Ft('.)630 3685 y Fs(-G)30 b Fj(globpat)1110 +3794 y Ft(The)39 b(\014lename)h(expansion)g(pattern)g +Fq(globpat)j Ft(is)d(expanded)f(to)h(generate)1110 3904 +y(the)31 b(p)s(ossible)e(completions.)630 4054 y Fs(-W)h +Fj(wordlist)1110 4163 y Ft(The)24 b Fq(w)m(ordlist)k +Ft(is)d(split)g(using)f(the)h(c)m(haracters)i(in)d(the)i +Fs(IFS)e Ft(sp)s(ecial)h(v)-5 b(ariable)1110 4273 y(as)36 +b(delimiters,)i(and)e(eac)m(h)h(resultan)m(t)g(w)m(ord)e(is)h +(expanded.)57 b(The)35 b(p)s(ossible)1110 4383 y(completions)c(are)e +(the)h(mem)m(b)s(ers)f(of)g(the)h(resultan)m(t)g(list)g(whic)m(h)f +(matc)m(h)i(the)1110 4492 y(w)m(ord)f(b)s(eing)g(completed.)630 +4642 y Fs(-C)g Fj(command)1110 4752 y Fq(command)35 b +Ft(is)e(executed)g(in)e(a)i(subshell)e(en)m(vironmen)m(t,)i(and)f(its)g +(output)g(is)1110 4861 y(used)e(as)g(the)h(p)s(ossible)f(completions.) +630 5011 y Fs(-F)g Fj(function)1110 5121 y Ft(The)25 +b(shell)i(function)e Fq(function)h Ft(is)g(executed)h(in)e(the)i +(curren)m(t)e(shell)i(en)m(viron-)1110 5230 y(men)m(t.)40 +b(When)25 b(it)h(\014nishes,)f(the)h(p)s(ossible)f(completions)h(are)g +(retriev)m(ed)g(from)1110 5340 y(the)31 b(v)-5 b(alue)30 +b(of)h(the)g Fs(COMPREPLY)c Ft(arra)m(y)k(v)-5 b(ariable.)p +eop end %%Page: 108 114 -108 113 bop 150 -116 a Ft(108)2527 b(Bash)31 b(Reference)g(Man)m(ual) -630 299 y Fs(-X)f Fj(filterpat)1110 408 y Fq(\014lterpat)c -Ft(is)e(a)h(pattern)g(as)f(used)g(for)h(\014lename)f(expansion.)37 -b(It)25 b(is)f(applied)e(to)1110 518 y(the)30 b(list)d(of)j(p)s -(ossible)d(completions)h(generated)j(b)m(y)e(the)g(preceding)g(options) -1110 628 y(and)e(argumen)m(ts,)i(and)e(eac)m(h)i(completion)e(matc)m -(hing)h Fq(\014lterpat)h Ft(is)e(remo)m(v)m(ed)1110 737 -y(from)j(the)h(list.)40 b(A)30 b(leading)g(`)p Fs(!)p -Ft(')g(in)f Fq(\014lterpat)j Ft(negates)g(the)f(pattern;)g(in)e(this) -1110 847 y(case,)j(an)m(y)e(completion)g(not)h(matc)m(hing)f -Fq(\014lterpat)i Ft(is)d(remo)m(v)m(ed.)630 1006 y Fs(-P)h -Fj(prefix)1110 1116 y Fq(pre\014x)39 b Ft(is)33 b(added)g(at)i(the)f(b) -s(eginning)d(of)k(eac)m(h)g(p)s(ossible)c(completion)i(after)1110 -1225 y(all)c(other)i(options)f(ha)m(v)m(e)h(b)s(een)f(applied.)630 -1385 y Fs(-S)g Fj(suffix)1110 1494 y Fq(su\016x)c Ft(is)19 -b(app)s(ended)g(to)i(eac)m(h)h(p)s(ossible)c(completion)i(after)h(all)e -(other)i(options)1110 1604 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630 -1763 y(The)35 b(return)g(v)-5 b(alue)36 b(is)f(true)g(unless)g(an)g(in) -m(v)-5 b(alid)34 b(option)h(is)g(supplied,)f(an)i(option)g(other)630 +TeXDict begin 108 113 bop 150 -116 a Ft(108)2527 b(Bash)31 +b(Reference)g(Man)m(ual)630 299 y Fs(-X)f Fj(filterpat)1110 +408 y Fq(\014lterpat)d Ft(is)e(a)g(pattern)g(as)f(used)g(for)h +(\014lename)g(expansion.)38 b(It)25 b(is)g(applied)f(to)1110 +518 y(the)30 b(list)f(of)h(p)s(ossible)f(completions)h(generated)h(b)m +(y)e(the)g(preceding)h(options)1110 628 y(and)d(argumen)m(ts,)i(and)e +(eac)m(h)i(completion)g(matc)m(hing)g Fq(\014lterpat)h +Ft(is)e(remo)m(v)m(ed)1110 737 y(from)i(the)h(list.)42 +b(A)30 b(leading)i(`)p Fs(!)p Ft(')e(in)g Fq(\014lterpat)j +Ft(negates)f(the)f(pattern;)g(in)f(this)1110 847 y(case,)i(an)m(y)e +(completion)i(not)f(matc)m(hing)g Fq(\014lterpat)i Ft(is)d(remo)m(v)m +(ed.)630 1006 y Fs(-P)g Fj(prefix)1110 1116 y Fq(pre\014x)39 +b Ft(is)34 b(added)f(at)i(the)f(b)s(eginning)f(of)i(eac)m(h)g(p)s +(ossible)e(completion)i(after)1110 1225 y(all)c(other)g(options)g(ha)m +(v)m(e)g(b)s(een)f(applied.)630 1385 y Fs(-S)g Fj(suffix)1110 +1494 y Fq(su\016x)c Ft(is)20 b(app)s(ended)f(to)i(eac)m(h)h(p)s +(ossible)e(completion)i(after)f(all)g(other)g(options)1110 +1604 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)630 1763 y(The)35 +b(return)g(v)-5 b(alue)37 b(is)f(true)f(unless)h(an)f(in)m(v)-5 +b(alid)37 b(option)f(is)g(supplied,)g(an)g(option)h(other)630 1873 y(than)31 b(`)p Fs(-p)p Ft(')g(or)g(`)p Fs(-r)p -Ft(')g(is)f(supplied)e(without)i(a)h Fq(name)37 b Ft(argumen)m(t,)32 -b(an)f(attempt)h(is)e(made)h(to)630 1983 y(remo)m(v)m(e)h(a)e -(completion)g(sp)s(eci\014cation)f(for)h(a)h Fq(name)k -Ft(for)30 b(whic)m(h)f(no)h(sp)s(eci\014cation)f(exists,)630 -2092 y(or)h(an)h(error)f(o)s(ccurs)g(adding)f(a)h(completion)g(sp)s -(eci\014cation.)p eop +Ft(')g(is)g(supplied)f(without)h(a)g Fq(name)37 b Ft(argumen)m(t,)32 +b(an)f(attempt)h(is)f(made)g(to)630 1983 y(remo)m(v)m(e)h(a)e +(completion)i(sp)s(eci\014cation)f(for)f(a)h Fq(name)k +Ft(for)30 b(whic)m(h)g(no)g(sp)s(eci\014cation)h(exists,)630 +2092 y(or)f(an)h(error)f(o)s(ccurs)g(adding)g(a)g(completion)i(sp)s +(eci\014cation.)p eop end %%Page: 109 115 -109 114 bop 150 -116 a Ft(Chapter)30 b(9:)41 b(Using)29 -b(History)h(In)m(teractiv)m(ely)1923 b(109)150 299 y -Fo(9)80 b(Using)54 b(History)g(In)l(teractiv)l(ely)275 -562 y Ft(This)31 b(c)m(hapter)j(describ)s(es)d(ho)m(w)i(to)h(use)f(the) -g Fl(gnu)g Ft(History)g(Library)e(in)m(teractiv)m(ely)-8 -b(,)34 b(from)f(a)h(user's)150 671 y(standp)s(oin)m(t.)75 -b(It)42 b(should)e(b)s(e)i(considered)f(a)h(user's)g(guide.)75 -b(F)-8 b(or)43 b(information)d(on)i(using)f(the)h Fl(gnu)150 -781 y Ft(History)30 b(Library)f(in)g(other)h(programs,)g(see)h(the)g -Fl(gnu)f Ft(Readline)f(Library)g(Man)m(ual.)150 1062 +TeXDict begin 109 114 bop 150 -116 a Ft(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(109)150 +299 y Fo(9)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)275 +562 y Ft(This)32 b(c)m(hapter)i(describ)s(es)e(ho)m(w)h(to)h(use)f(the) +g Fl(gnu)g Ft(History)h(Library)e(in)m(teractiv)m(ely)-8 +b(,)37 b(from)c(a)h(user's)150 671 y(standp)s(oin)m(t.)76 +b(It)42 b(should)f(b)s(e)h(considered)g(a)g(user's)g(guide.)76 +b(F)-8 b(or)43 b(information)f(on)g(using)g(the)g Fl(gnu)150 +781 y Ft(History)31 b(Library)f(in)g(other)g(programs,)g(see)h(the)g +Fl(gnu)f Ft(Readline)h(Library)f(Man)m(ual.)150 1062 y Fr(9.1)68 b(Bash)45 b(History)h(F)-11 b(acilities)275 -1316 y Ft(When)36 b(the)h(`)p Fs(-o)30 b(history)p Ft(')k(option)i(to)i -(the)e Fs(set)g Ft(builtin)d(is)j(enabled)f(\(see)j(Section)e(4.3)h -([The)g(Set)150 1425 y(Builtin],)29 b(page)j(50\),)h(the)e(shell)f(pro) -m(vides)g(access)i(to)g(the)f Fq(command)g(history)p -Ft(,)g(the)g(list)f(of)h(commands)150 1535 y(previously)f(t)m(yp)s(ed.) -47 b(The)33 b(v)-5 b(alue)32 b(of)g(the)h Fs(HISTSIZE)e -Ft(shell)f(v)-5 b(ariable)32 b(is)g(used)f(as)i(the)g(n)m(um)m(b)s(er)e -(of)i(com-)150 1644 y(mands)i(to)i(sa)m(v)m(e)h(in)d(a)h(history)g -(list.)56 b(The)36 b(text)h(of)g(the)f(last)g Fs($HISTSIZE)e -Ft(commands)i(\(default)f(500\))150 1754 y(is)h(sa)m(v)m(ed.)61 -b(The)36 b(shell)f(stores)j(eac)m(h)g(command)e(in)g(the)h(history)f -(list)f(prior)g(to)j(parameter)f(and)f(v)-5 b(ari-)150 -1864 y(able)32 b(expansion)g(but)g(after)h(history)e(expansion)h(is)g -(p)s(erformed,)f(sub)5 b(ject)33 b(to)g(the)g(v)-5 b(alues)32 -b(of)h(the)g(shell)150 1973 y(v)-5 b(ariables)29 b Fs(HISTIGNORE)f -Ft(and)h Fs(HISTCONTROL)p Ft(.)275 2117 y(When)g(the)g(shell)f(starts)i -(up,)f(the)h(history)e(is)h(initialized)d(from)j(the)h(\014le)e(named)h -(b)m(y)h(the)f Fs(HISTFILE)150 2227 y Ft(v)-5 b(ariable)19 -b(\(default)i(`)p Fs(~/.bash_history)p Ft('\).)34 b(The)20 -b(\014le)g(named)g(b)m(y)h(the)g(v)-5 b(alue)20 b(of)h -Fs(HISTFILE)d Ft(is)i(truncated,)150 2336 y(if)41 b(necessary)-8 -b(,)45 b(to)e(con)m(tain)f(no)g(more)g(than)f(the)h(n)m(um)m(b)s(er)f -(of)h(lines)e(sp)s(eci\014ed)g(b)m(y)i(the)g(v)-5 b(alue)41 -b(of)h(the)150 2446 y Fs(HISTFILESIZE)21 b Ft(v)-5 b(ariable.)38 -b(When)24 b(an)g(in)m(teractiv)m(e)h(shell)e(exits,)i(the)g(last)f -Fs($HISTSIZE)e Ft(lines)h(are)h(copied)150 2556 y(from)29 -b(the)i(history)d(list)h(to)i(the)f(\014le)f(named)g(b)m(y)h +1316 y Ft(When)36 b(the)h(`)p Fs(-o)30 b(history)p Ft(')k(option)j(to)h +(the)e Fs(set)g Ft(builtin)g(is)h(enabled)f(\(see)i(Section)f(4.3)g +([The)g(Set)150 1425 y(Builtin],)32 b(page)g(50\),)h(the)e(shell)h(pro) +m(vides)f(access)h(to)g(the)f Fq(command)g(history)p +Ft(,)h(the)f(list)h(of)f(commands)150 1535 y(previously)h(t)m(yp)s(ed.) +47 b(The)33 b(v)-5 b(alue)33 b(of)f(the)h Fs(HISTSIZE)e +Ft(shell)h(v)-5 b(ariable)34 b(is)f(used)e(as)i(the)g(n)m(um)m(b)s(er)e +(of)i(com-)150 1644 y(mands)i(to)i(sa)m(v)m(e)h(in)e(a)g(history)h +(list.)58 b(The)36 b(text)h(of)g(the)f(last)h Fs($HISTSIZE)d +Ft(commands)i(\(default)g(500\))150 1754 y(is)h(sa)m(v)m(ed.)61 +b(The)36 b(shell)h(stores)h(eac)m(h)g(command)e(in)h(the)g(history)g +(list)g(prior)f(to)i(parameter)f(and)f(v)-5 b(ari-)150 +1864 y(able)33 b(expansion)g(but)f(after)h(history)f(expansion)h(is)g +(p)s(erformed,)e(sub)5 b(ject)33 b(to)g(the)g(v)-5 b(alues)33 +b(of)g(the)g(shell)150 1973 y(v)-5 b(ariables)31 b Fs(HISTIGNORE)d +Ft(and)h Fs(HISTCONTROL)p Ft(.)275 2117 y(When)g(the)g(shell)h(starts)g +(up,)f(the)h(history)f(is)h(initialized)h(from)e(the)h(\014le)f(named)g +(b)m(y)h(the)f Fs(HISTFILE)150 2227 y Ft(v)-5 b(ariable)21 +b(\(default)h(`)p Fs(~/.bash_history)p Ft('\).)34 b(The)20 +b(\014le)h(named)f(b)m(y)h(the)g(v)-5 b(alue)21 b(of)g +Fs(HISTFILE)d Ft(is)j(truncated,)150 2336 y(if)42 b(necessary)-8 +b(,)45 b(to)e(con)m(tain)g(no)f(more)g(than)f(the)h(n)m(um)m(b)s(er)f +(of)h(lines)g(sp)s(eci\014ed)f(b)m(y)h(the)g(v)-5 b(alue)42 +b(of)g(the)150 2446 y Fs(HISTFILESIZE)21 b Ft(v)-5 b(ariable.)40 +b(When)24 b(an)g(in)m(teractiv)m(e)j(shell)e(exits,)h(the)f(last)g +Fs($HISTSIZE)d Ft(lines)j(are)f(copied)150 2556 y(from)29 +b(the)i(history)e(list)i(to)g(the)f(\014le)g(named)f(b)m(y)h Fs($HISTFILE)p Ft(.)38 b(If)30 b(the)g Fs(histappend)d -Ft(shell)h(option)h(is)g(set)150 2665 y(\(see)22 b(Section)f(4.2)h -([Bash)g(Builtins],)e(page)i(39\),)j(the)c(lines)e(are)j(app)s(ended)d -(to)j(the)f(history)f(\014le,)j(otherwise)150 2775 y(the)32 -b(history)e(\014le)g(is)h(o)m(v)m(erwritten.)44 b(If)31 -b Fs(HISTFILE)e Ft(is)i(unset,)g(or)h(if)e(the)i(history)e(\014le)g(is) -h(un)m(writable,)f(the)150 2884 y(history)36 b(is)h(not)g(sa)m(v)m(ed.) -63 b(After)38 b(sa)m(ving)f(the)g(history)-8 b(,)39 b(the)f(history)e -(\014le)g(is)h(truncated)g(to)h(con)m(tain)g(no)150 2994 -y(more)31 b(than)f Fs($HISTFILESIZE)c Ft(lines.)39 b(If)30 -b Fs(HISTFILESIZE)d Ft(is)j(not)g(set,)h(no)g(truncation)e(is)h(p)s -(erformed.)275 3138 y(If)h(the)h Fs(HISTTIMEFORMAT)d -Ft(is)i(set,)i(the)f(time)g(stamp)g(information)e(asso)s(ciated)j(with) -e(eac)m(h)i(history)150 3247 y(en)m(try)e(is)e(written)g(to)j(the)e -(history)f(\014le.)275 3392 y(The)19 b(builtin)e(command)j -Fs(fc)g Ft(ma)m(y)h(b)s(e)f(used)f(to)i(list)e(or)i(edit)f(and)f -(re-execute)j(a)f(p)s(ortion)e(of)h(the)h(history)150 -3501 y(list.)39 b(The)27 b Fs(history)f Ft(builtin)f(ma)m(y)k(b)s(e)e -(used)g(to)i(displa)m(y)e(or)h(mo)s(dify)e(the)i(history)f(list)g(and)h -(manipulate)150 3611 y(the)j(history)f(\014le.)41 b(When)31 -b(using)e(command-line)g(editing,)h(searc)m(h)h(commands)g(are)g(a)m(v) --5 b(ailable)30 b(in)g(eac)m(h)150 3720 y(editing)43 -b(mo)s(de)i(that)g(pro)m(vide)f(access)i(to)f(the)g(history)e(list)h -(\(see)h(Section)g(8.4.2)h([Commands)e(F)-8 b(or)150 -3830 y(History],)30 b(page)i(95\).)275 3974 y(The)47 -b(shell)g(allo)m(ws)h(con)m(trol)g(o)m(v)m(er)i(whic)m(h)d(commands)h -(are)h(sa)m(v)m(ed)g(on)f(the)h(history)e(list.)93 b(The)150 +Ft(shell)j(option)g(is)g(set)150 2665 y(\(see)22 b(Section)g(4.2)g +([Bash)g(Builtins],)h(page)f(39\),)j(the)c(lines)g(are)h(app)s(ended)d +(to)j(the)f(history)g(\014le,)j(otherwise)150 2775 y(the)32 +b(history)f(\014le)g(is)h(o)m(v)m(erwritten.)45 b(If)31 +b Fs(HISTFILE)e Ft(is)j(unset,)f(or)h(if)f(the)h(history)f(\014le)g(is) +h(un)m(writable,)g(the)150 2884 y(history)37 b(is)h(not)f(sa)m(v)m(ed.) +63 b(After)38 b(sa)m(ving)g(the)f(history)-8 b(,)40 b(the)e(history)f +(\014le)g(is)h(truncated)f(to)h(con)m(tain)h(no)150 2994 +y(more)31 b(than)f Fs($HISTFILESIZE)c Ft(lines.)41 b(If)30 +b Fs(HISTFILESIZE)d Ft(is)k(not)f(set,)h(no)g(truncation)f(is)h(p)s +(erformed.)275 3138 y(If)g(the)h Fs(HISTTIMEFORMAT)d +Ft(is)j(set,)h(the)f(time)h(stamp)f(information)g(asso)s(ciated)i(with) +e(eac)m(h)h(history)150 3247 y(en)m(try)e(is)f(written)g(to)i(the)e +(history)g(\014le.)275 3392 y(The)19 b(builtin)h(command)g +Fs(fc)g Ft(ma)m(y)h(b)s(e)f(used)f(to)i(list)g(or)g(edit)g(and)e +(re-execute)j(a)f(p)s(ortion)f(of)g(the)h(history)150 +3501 y(list.)41 b(The)27 b Fs(history)f Ft(builtin)i(ma)m(y)h(b)s(e)e +(used)g(to)i(displa)m(y)g(or)f(mo)s(dify)f(the)h(history)g(list)h(and)f +(manipulate)150 3611 y(the)j(history)g(\014le.)42 b(When)31 +b(using)f(command-line)h(editing,)h(searc)m(h)f(commands)g(are)g(a)m(v) +-5 b(ailable)33 b(in)e(eac)m(h)150 3720 y(editing)45 +b(mo)s(de)g(that)g(pro)m(vide)g(access)h(to)f(the)g(history)f(list)i +(\(see)f(Section)h(8.4.2)g([Commands)e(F)-8 b(or)150 +3830 y(History],)31 b(page)h(95\).)275 3974 y(The)47 +b(shell)i(allo)m(ws)h(con)m(trol)f(o)m(v)m(er)h(whic)m(h)e(commands)g +(are)h(sa)m(v)m(ed)g(on)f(the)h(history)f(list.)95 b(The)150 4084 y Fs(HISTCONTROL)25 b Ft(and)j Fs(HISTIGNORE)e Ft(v)-5 -b(ariables)27 b(ma)m(y)j(b)s(e)d(set)j(to)f(cause)g(the)g(shell)d(to)k -(sa)m(v)m(e)g(only)e(a)h(subset)150 4193 y(of)e(the)g(commands)f(en)m -(tered.)40 b(The)26 b Fs(cmdhist)f Ft(shell)g(option,)i(if)f(enabled,)g -(causes)i(the)e(shell)f(to)j(attempt)150 4303 y(to)23 -b(sa)m(v)m(e)h(eac)m(h)f(line)e(of)h(a)h(m)m(ulti-line)c(command)j(in)f -(the)i(same)f(history)f(en)m(try)-8 b(,)25 b(adding)c(semicolons)g -(where)150 4412 y(necessary)37 b(to)f(preserv)m(e)h(syn)m(tactic)g -(correctness.)58 b(The)36 b Fs(lithist)e Ft(shell)g(option)i(causes)h -(the)f(shell)e(to)150 4522 y(sa)m(v)m(e)25 b(the)e(command)h(with)e(em) -m(b)s(edded)g(newlines)f(instead)i(of)g(semicolons.)38 -b(The)23 b Fs(shopt)e Ft(builtin)f(is)j(used)150 4631 -y(to)31 b(set)g(these)g(options.)40 b(See)31 b(Section)f(4.2)h([Bash)g -(Builtins],)d(page)j(39,)h(for)e(a)h(description)d(of)j +b(ariables)29 b(ma)m(y)h(b)s(e)d(set)j(to)f(cause)g(the)g(shell)f(to)i +(sa)m(v)m(e)g(only)f(a)g(subset)150 4193 y(of)e(the)g(commands)f(en)m +(tered.)40 b(The)26 b Fs(cmdhist)f Ft(shell)i(option,)h(if)f(enabled,)g +(causes)h(the)e(shell)h(to)h(attempt)150 4303 y(to)23 +b(sa)m(v)m(e)h(eac)m(h)f(line)g(of)f(a)h(m)m(ulti-line)g(command)f(in)g +(the)h(same)f(history)g(en)m(try)-8 b(,)25 b(adding)d(semicolons)h +(where)150 4412 y(necessary)37 b(to)f(preserv)m(e)h(syn)m(tactic)h +(correctness.)58 b(The)36 b Fs(lithist)e Ft(shell)i(option)h(causes)g +(the)f(shell)g(to)150 4522 y(sa)m(v)m(e)25 b(the)e(command)h(with)f(em) +m(b)s(edded)f(newlines)h(instead)h(of)f(semicolons.)40 +b(The)23 b Fs(shopt)e Ft(builtin)i(is)h(used)150 4631 +y(to)31 b(set)g(these)g(options.)41 b(See)31 b(Section)g(4.2)g([Bash)g +(Builtins],)g(page)g(39,)h(for)e(a)h(description)f(of)h Fs(shopt)p Ft(.)150 4913 y Fr(9.2)68 b(Bash)45 b(History)h(Builtins)275 -5166 y Ft(Bash)30 b(pro)m(vides)f(t)m(w)m(o)j(builtin)27 -b(commands)j(whic)m(h)f(manipulate)g(the)h(history)g(list)f(and)h -(history)f(\014le.)150 5340 y Fs(fc)p eop +5166 y Ft(Bash)30 b(pro)m(vides)g(t)m(w)m(o)i(builtin)e(commands)g +(whic)m(h)g(manipulate)h(the)f(history)h(list)g(and)f(history)g +(\014le.)150 5340 y Fs(fc)p eop end %%Page: 110 116 -110 115 bop 150 -116 a Ft(110)2527 b(Bash)31 b(Reference)g(Man)m(ual) -870 299 y Fs(fc)47 b([-e)g Fj(ename)11 b Fs(])46 b([-nlr])g([)p -Fj(first)11 b Fs(])45 b([)p Fj(last)11 b Fs(])870 408 -y(fc)47 b(-s)g([)p Fj(pat)11 b Fs(=)p Fj(rep)g Fs(])45 -b([)p Fj(command)11 b Fs(])630 539 y Ft(Fix)40 b(Command.)68 -b(In)39 b(the)i(\014rst)e(form,)j(a)e(range)h(of)f(commands)g(from)f -Fq(\014rst)i Ft(to)g Fq(last)h Ft(is)630 648 y(selected)34 -b(from)f(the)g(history)f(list.)48 b(Both)34 b Fq(\014rst)h -Ft(and)e Fq(last)i Ft(ma)m(y)f(b)s(e)e(sp)s(eci\014ed)g(as)h(a)h -(string)630 758 y(\(to)26 b(lo)s(cate)g(the)f(most)h(recen)m(t)g -(command)e(b)s(eginning)f(with)h(that)h(string\))g(or)g(as)g(a)g(n)m -(um)m(b)s(er)630 867 y(\(an)f(index)e(in)m(to)h(the)h(history)f(list,)g -(where)g(a)h(negativ)m(e)h(n)m(um)m(b)s(er)d(is)h(used)g(as)g(an)h -(o\013set)g(from)630 977 y(the)j(curren)m(t)f(command)h(n)m(um)m(b)s -(er\).)39 b(If)26 b Fq(last)i Ft(is)e(not)h(sp)s(eci\014ed)e(it)h(is)g -(set)h(to)h Fq(\014rst)p Ft(.)39 b(If)26 b Fq(\014rst)i -Ft(is)630 1087 y(not)j(sp)s(eci\014ed)e(it)h(is)g(set)i(to)f(the)g -(previous)e(command)i(for)f(editing)g(and)g Fp(\000)p -Ft(16)h(for)g(listing.)630 1196 y(If)f(the)g(`)p Fs(-l)p -Ft(')g(\015ag)h(is)e(giv)m(en,)h(the)h(commands)e(are)i(listed)e(on)h -(standard)f(output.)40 b(The)30 b(`)p Fs(-n)p Ft(')630 +TeXDict begin 110 115 bop 150 -116 a Ft(110)2527 b(Bash)31 +b(Reference)g(Man)m(ual)870 299 y Fs(fc)47 b([-e)g Fj(ename)11 +b Fs(])46 b([-nlr])g([)p Fj(first)11 b Fs(])45 b([)p +Fj(last)11 b Fs(])870 408 y(fc)47 b(-s)g([)p Fj(pat)11 +b Fs(=)p Fj(rep)g Fs(])45 b([)p Fj(command)11 b Fs(])630 +539 y Ft(Fix)41 b(Command.)68 b(In)39 b(the)i(\014rst)e(form,)j(a)e +(range)h(of)f(commands)g(from)f Fq(\014rst)i Ft(to)g +Fq(last)i Ft(is)630 648 y(selected)35 b(from)e(the)g(history)g(list.)50 +b(Both)34 b Fq(\014rst)h Ft(and)e Fq(last)j Ft(ma)m(y)e(b)s(e)e(sp)s +(eci\014ed)h(as)g(a)h(string)630 758 y(\(to)26 b(lo)s(cate)h(the)e +(most)h(recen)m(t)g(command)e(b)s(eginning)h(with)g(that)g(string\))h +(or)f(as)g(a)g(n)m(um)m(b)s(er)630 867 y(\(an)f(index)f(in)m(to)h(the)g +(history)g(list,)h(where)e(a)h(negativ)m(e)i(n)m(um)m(b)s(er)c(is)i +(used)f(as)g(an)h(o\013set)g(from)630 977 y(the)j(curren)m(t)f(command) +h(n)m(um)m(b)s(er\).)39 b(If)26 b Fq(last)j Ft(is)e(not)g(sp)s +(eci\014ed)f(it)h(is)g(set)g(to)h Fq(\014rst)p Ft(.)39 +b(If)26 b Fq(\014rst)i Ft(is)630 1087 y(not)j(sp)s(eci\014ed)f(it)h(is) +g(set)h(to)f(the)g(previous)f(command)h(for)f(editing)i(and)e +Fp(\000)p Ft(16)h(for)g(listing.)630 1196 y(If)f(the)g(`)p +Fs(-l)p Ft(')g(\015ag)h(is)f(giv)m(en,)h(the)g(commands)e(are)i(listed) +g(on)f(standard)f(output.)40 b(The)30 b(`)p Fs(-n)p Ft(')630 1306 y(\015ag)i(suppresses)f(the)h(command)g(n)m(um)m(b)s(ers)e(when)i -(listing.)43 b(The)32 b(`)p Fs(-r)p Ft(')g(\015ag)g(rev)m(erses)h(the) -630 1415 y(order)g(of)g(the)h(listing.)47 b(Otherwise,)33 -b(the)g(editor)g(giv)m(en)g(b)m(y)g Fq(ename)39 b Ft(is)32 -b(in)m(v)m(ok)m(ed)i(on)f(a)h(\014le)630 1525 y(con)m(taining)g(those)h -(commands.)52 b(If)33 b Fq(ename)40 b Ft(is)33 b(not)i(giv)m(en,)g(the) -g(v)-5 b(alue)34 b(of)g(the)g(follo)m(wing)630 1634 y(v)-5 -b(ariable)31 b(expansion)f(is)h(used:)42 b Fs(${FCEDIT:-${EDITOR:-vi}}) -p Ft(.)d(This)30 b(sa)m(ys)i(to)g(use)g(the)630 1744 -y(v)-5 b(alue)33 b(of)g(the)h Fs(FCEDIT)e Ft(v)-5 b(ariable)32 -b(if)g(set,)j(or)f(the)f(v)-5 b(alue)33 b(of)h(the)f -Fs(EDITOR)f Ft(v)-5 b(ariable)32 b(if)g(that)630 1854 -y(is)g(set,)j(or)e Fs(vi)g Ft(if)f(neither)g(is)g(set.)50 -b(When)33 b(editing)f(is)g(complete,)i(the)g(edited)e(commands)630 -1963 y(are)f(ec)m(ho)s(ed)g(and)f(executed.)630 2093 -y(In)k(the)g(second)g(form,)h Fq(command)j Ft(is)33 b(re-executed)j -(after)f(eac)m(h)g(instance)f(of)g Fq(pat)j Ft(in)c(the)630 -2203 y(selected)e(command)f(is)f(replaced)h(b)m(y)h Fq(rep)p -Ft(.)630 2333 y(A)g(useful)e(alias)h(to)i(use)e(with)g(the)h -Fs(fc)f Ft(command)h(is)f Fs(r='fc)f(-s')p Ft(,)h(so)h(that)h(t)m -(yping)e(`)p Fs(r)g(cc)p Ft(')630 2443 y(runs)35 b(the)h(last)g -(command)g(b)s(eginning)e(with)h Fs(cc)g Ft(and)h(t)m(yping)f(`)p -Fs(r)p Ft(')i(re-executes)h(the)e(last)630 2552 y(command)30 -b(\(see)h(Section)g(6.6)g([Aliases],)f(page)i(71\).)150 +(listing.)46 b(The)32 b(`)p Fs(-r)p Ft(')g(\015ag)g(rev)m(erses)h(the) +630 1415 y(order)g(of)g(the)h(listing.)50 b(Otherwise,)34 +b(the)f(editor)h(giv)m(en)g(b)m(y)f Fq(ename)39 b Ft(is)33 +b(in)m(v)m(ok)m(ed)i(on)e(a)h(\014le)630 1525 y(con)m(taining)i(those)f +(commands.)52 b(If)33 b Fq(ename)40 b Ft(is)34 b(not)h(giv)m(en,)h(the) +f(v)-5 b(alue)35 b(of)f(the)g(follo)m(wing)630 1634 y(v)-5 +b(ariable)33 b(expansion)e(is)h(used:)42 b Fs(${FCEDIT:-${EDITOR:-vi}}) +p Ft(.)d(This)31 b(sa)m(ys)h(to)g(use)g(the)630 1744 +y(v)-5 b(alue)34 b(of)f(the)h Fs(FCEDIT)e Ft(v)-5 b(ariable)34 +b(if)f(set,)i(or)f(the)f(v)-5 b(alue)34 b(of)g(the)f +Fs(EDITOR)f Ft(v)-5 b(ariable)34 b(if)f(that)630 1854 +y(is)g(set,)i(or)e Fs(vi)g Ft(if)g(neither)g(is)g(set.)50 +b(When)33 b(editing)h(is)f(complete,)i(the)f(edited)f(commands)630 +1963 y(are)e(ec)m(ho)s(ed)g(and)f(executed.)630 2093 +y(In)k(the)g(second)g(form,)h Fq(command)j Ft(is)c(re-executed)i(after) +f(eac)m(h)g(instance)g(of)f Fq(pat)j Ft(in)d(the)630 +2203 y(selected)e(command)e(is)g(replaced)h(b)m(y)g Fq(rep)p +Ft(.)630 2333 y(A)g(useful)f(alias)i(to)g(use)e(with)h(the)g +Fs(fc)f Ft(command)h(is)g Fs(r='fc)e(-s')p Ft(,)h(so)h(that)h(t)m +(yping)f(`)p Fs(r)f(cc)p Ft(')630 2443 y(runs)35 b(the)h(last)h +(command)f(b)s(eginning)g(with)g Fs(cc)f Ft(and)h(t)m(yping)g(`)p +Fs(r)p Ft(')h(re-executes)h(the)e(last)630 2552 y(command)30 +b(\(see)h(Section)h(6.6)f([Aliases],)h(page)g(71\).)150 2703 y Fs(history)870 2833 y(history)46 b([)p Fj(n)11 b Fs(])870 2943 y(history)46 b(-c)870 3052 y(history)g(-d)h Fj(offset)870 3162 y Fs(history)f([-anrw])g([)p Fj(filename)11 b Fs(])870 3271 y(history)46 b(-ps)h Fj(arg)630 3402 -y Ft(With)25 b(no)h(options,)g(displa)m(y)e(the)i(history)f(list)f -(with)g(line)g(n)m(um)m(b)s(ers.)38 b(Lines)25 b(pre\014xed)f(with)630 +y Ft(With)26 b(no)g(options,)h(displa)m(y)f(the)g(history)g(list)g +(with)f(line)h(n)m(um)m(b)s(ers.)38 b(Lines)26 b(pre\014xed)e(with)630 3511 y(a)35 b(`)p Fs(*)p Ft(')g(ha)m(v)m(e)h(b)s(een)e(mo)s(di\014ed.) -52 b(An)34 b(argumen)m(t)h(of)g Fq(n)f Ft(lists)g(only)g(the)h(last)f -Fq(n)g Ft(lines.)52 b(If)35 b(the)630 3621 y(shell)28 -b(v)-5 b(ariable)29 b Fs(HISTTIMEFORMAT)d Ft(is)j(set)i(and)e(not)i(n)m -(ull,)d(it)i(is)f(used)g(as)h(a)h(format)f(string)630 -3730 y(for)36 b Fq(strftime)k Ft(to)c(displa)m(y)e(the)i(time)g(stamp)g -(asso)s(ciated)g(with)f(eac)m(h)i(displa)m(y)m(ed)d(history)630 -3840 y(en)m(try)-8 b(.)47 b(No)33 b(in)m(terv)m(ening)e(blank)g(is)g -(prin)m(ted)g(b)s(et)m(w)m(een)i(the)g(formatted)f(time)g(stamp)h(and) -630 3950 y(the)e(history)e(line.)630 4080 y(Options,)g(if)h(supplied,)d -(ha)m(v)m(e)k(the)g(follo)m(wing)e(meanings:)630 4230 -y Fs(-c)384 b Ft(Clear)22 b(the)h(history)f(list.)37 -b(This)21 b(ma)m(y)j(b)s(e)e(com)m(bined)g(with)f(the)i(other)h -(options)1110 4340 y(to)31 b(replace)f(the)h(history)e(list)g +53 b(An)34 b(argumen)m(t)h(of)g Fq(n)f Ft(lists)i(only)f(the)g(last)g +Fq(n)f Ft(lines.)54 b(If)35 b(the)630 3621 y(shell)30 +b(v)-5 b(ariable)31 b Fs(HISTTIMEFORMAT)26 b Ft(is)k(set)h(and)e(not)i +(n)m(ull,)f(it)h(is)f(used)f(as)h(a)h(format)f(string)630 +3730 y(for)36 b Fq(strftime)41 b Ft(to)36 b(displa)m(y)g(the)g(time)h +(stamp)f(asso)s(ciated)h(with)f(eac)m(h)h(displa)m(y)m(ed)f(history)630 +3840 y(en)m(try)-8 b(.)47 b(No)33 b(in)m(terv)m(ening)g(blank)f(is)g +(prin)m(ted)g(b)s(et)m(w)m(een)h(the)g(formatted)f(time)h(stamp)g(and) +630 3950 y(the)e(history)f(line.)630 4080 y(Options,)g(if)h(supplied,)e +(ha)m(v)m(e)i(the)g(follo)m(wing)h(meanings:)630 4230 +y Fs(-c)384 b Ft(Clear)23 b(the)g(history)g(list.)39 +b(This)22 b(ma)m(y)i(b)s(e)e(com)m(bined)h(with)f(the)h(other)h +(options)1110 4340 y(to)31 b(replace)g(the)g(history)f(list)h (completely)-8 b(.)630 4491 y Fs(-d)30 b Fj(offset)1110 -4600 y Ft(Delete)24 b(the)g(history)e(en)m(try)i(at)g(p)s(osition)d -Fq(o\013set)p Ft(.)39 b Fq(o\013set)27 b Ft(should)21 -b(b)s(e)i(sp)s(eci\014ed)1110 4710 y(as)31 b(it)f(app)s(ears)f(when)h -(the)g(history)f(is)h(displa)m(y)m(ed.)630 4861 y Fs(-a)384 -b Ft(App)s(end)35 b(the)i(new)g(history)f(lines)f(\(history)h(lines)f -(en)m(tered)j(since)e(the)h(b)s(e-)1110 4970 y(ginning)28 -b(of)j(the)f(curren)m(t)g(Bash)h(session\))f(to)h(the)g(history)e -(\014le.)630 5121 y Fs(-n)384 b Ft(App)s(end)32 b(the)i(history)e -(lines)g(not)i(already)f(read)h(from)f(the)h(history)e(\014le)h(to)1110 -5230 y(the)26 b(curren)m(t)f(history)f(list.)38 b(These)25 -b(are)h(lines)e(app)s(ended)g(to)i(the)f(history)g(\014le)1110 -5340 y(since)30 b(the)g(b)s(eginning)e(of)i(the)h(curren)m(t)f(Bash)h -(session.)p eop +4600 y Ft(Delete)25 b(the)f(history)f(en)m(try)h(at)g(p)s(osition)f +Fq(o\013set)p Ft(.)39 b Fq(o\013set)27 b Ft(should)22 +b(b)s(e)h(sp)s(eci\014ed)1110 4710 y(as)31 b(it)g(app)s(ears)e(when)h +(the)g(history)g(is)h(displa)m(y)m(ed.)630 4861 y Fs(-a)384 +b Ft(App)s(end)35 b(the)i(new)g(history)g(lines)g(\(history)g(lines)g +(en)m(tered)h(since)f(the)g(b)s(e-)1110 4970 y(ginning)30 +b(of)h(the)f(curren)m(t)g(Bash)h(session\))g(to)g(the)g(history)f +(\014le.)630 5121 y Fs(-n)384 b Ft(App)s(end)32 b(the)i(history)f +(lines)h(not)g(already)g(read)g(from)f(the)h(history)f(\014le)h(to)1110 +5230 y(the)26 b(curren)m(t)f(history)g(list.)40 b(These)25 +b(are)h(lines)g(app)s(ended)e(to)i(the)f(history)h(\014le)1110 +5340 y(since)31 b(the)f(b)s(eginning)g(of)g(the)h(curren)m(t)f(Bash)h +(session.)p eop end %%Page: 111 117 -111 116 bop 150 -116 a Ft(Chapter)30 b(9:)41 b(Using)29 -b(History)h(In)m(teractiv)m(ely)1923 b(111)630 299 y -Fs(-r)384 b Ft(Read)26 b(the)h(curren)m(t)f(history)f(\014le)g(and)h -(app)s(end)e(its)i(con)m(ten)m(ts)i(to)f(the)f(history)1110 -408 y(list.)630 571 y Fs(-w)384 b Ft(W)-8 b(rite)31 b(out)f(the)h -(curren)m(t)f(history)f(to)j(the)e(history)f(\014le.)630 -734 y Fs(-p)384 b Ft(P)m(erform)31 b(history)e(substitution)g(on)h(the) -h Fq(arg)8 b Ft(s)31 b(and)f(displa)m(y)f(the)h(result)g(on)1110 -843 y(the)e(standard)f(output,)i(without)e(storing)g(the)h(results)f -(in)g(the)h(history)f(list.)630 1006 y Fs(-s)384 b Ft(The)30 +TeXDict begin 111 116 bop 150 -116 a Ft(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(111)630 +299 y Fs(-r)384 b Ft(Read)26 b(the)h(curren)m(t)f(history)g(\014le)g +(and)g(app)s(end)e(its)j(con)m(ten)m(ts)h(to)f(the)f(history)1110 +408 y(list.)630 571 y Fs(-w)384 b Ft(W)-8 b(rite)32 b(out)e(the)h +(curren)m(t)f(history)g(to)i(the)e(history)g(\014le.)630 +734 y Fs(-p)384 b Ft(P)m(erform)31 b(history)f(substitution)h(on)f(the) +h Fq(arg)8 b Ft(s)31 b(and)f(displa)m(y)h(the)f(result)h(on)1110 +843 y(the)d(standard)f(output,)i(without)f(storing)g(the)g(results)g +(in)g(the)g(history)g(list.)630 1006 y Fs(-s)384 b Ft(The)30 b Fq(arg)8 b Ft(s)30 b(are)h(added)f(to)h(the)f(end)g(of)h(the)f -(history)g(list)f(as)h(a)h(single)e(en)m(try)-8 b(.)630 +(history)h(list)g(as)f(a)h(single)g(en)m(try)-8 b(.)630 1168 y(When)24 b(an)m(y)h(of)f(the)h(`)p Fs(-w)p Ft(',)h(`)p Fs(-r)p Ft(',)f(`)p Fs(-a)p Ft(',)h(or)f(`)p Fs(-n)p -Ft(')f(options)f(is)h(used,)h(if)e Fq(\014lename)29 b -Ft(is)23 b(giv)m(en,)j(then)630 1278 y(it)31 b(is)g(used)g(as)h(the)f -(history)g(\014le.)44 b(If)31 b(not,)h(then)g(the)f(v)-5 -b(alue)31 b(of)h(the)g Fs(HISTFILE)d Ft(v)-5 b(ariable)31 +Ft(')f(options)g(is)h(used,)g(if)f Fq(\014lename)30 b +Ft(is)24 b(giv)m(en,)j(then)630 1278 y(it)32 b(is)g(used)f(as)h(the)f +(history)h(\014le.)45 b(If)31 b(not,)h(then)g(the)f(v)-5 +b(alue)32 b(of)g(the)g Fs(HISTFILE)d Ft(v)-5 b(ariable)33 b(is)630 1388 y(used.)150 1653 y Fr(9.3)68 b(History)46 -b(Expansion)275 1900 y Ft(The)35 b(History)g(library)e(pro)m(vides)i(a) -h(history)e(expansion)h(feature)h(that)g(is)f(similar)e(to)j(the)g -(history)150 2010 y(expansion)21 b(pro)m(vided)f(b)m(y)i -Fs(csh)p Ft(.)37 b(This)21 b(section)h(describ)s(es)e(the)i(syn)m(tax)h -(used)e(to)h(manipulate)f(the)h(history)150 2120 y(information.)275 -2257 y(History)30 b(expansions)f(in)m(tro)s(duce)g(w)m(ords)h(from)g -(the)h(history)e(list)g(in)m(to)h(the)h(input)e(stream,)i(making)150 -2367 y(it)f(easy)h(to)g(rep)s(eat)g(commands,)f(insert)f(the)i(argumen) -m(ts)f(to)h(a)g(previous)e(command)h(in)m(to)h(the)f(curren)m(t)150 -2476 y(input)e(line,)h(or)i(\014x)f(errors)f(in)g(previous)g(commands)h -(quic)m(kly)-8 b(.)275 2614 y(History)26 b(expansion)f(tak)m(es)j -(place)e(in)f(t)m(w)m(o)j(parts.)39 b(The)26 b(\014rst)g(is)f(to)i -(determine)f(whic)m(h)f(line)g(from)h(the)150 2724 y(history)h(list)f -(should)g(b)s(e)h(used)g(during)f(substitution.)37 b(The)27 -b(second)h(is)f(to)i(select)f(p)s(ortions)e(of)i(that)h(line)150 -2833 y(for)d(inclusion)c(in)m(to)k(the)g(curren)m(t)f(one.)40 -b(The)25 b(line)f(selected)i(from)g(the)g(history)e(is)h(called)g(the)h -Fq(ev)m(en)m(t)p Ft(,)j(and)150 2943 y(the)21 b(p)s(ortions)f(of)h -(that)h(line)d(that)j(are)g(acted)g(up)s(on)e(are)h(called)f -Fq(w)m(ords)p Ft(.)38 b(V)-8 b(arious)20 b Fq(mo)s(di\014ers)j -Ft(are)f(a)m(v)-5 b(ailable)150 3052 y(to)35 b(manipulate)d(the)i -(selected)h(w)m(ords.)51 b(The)33 b(line)f(is)h(brok)m(en)h(in)m(to)g -(w)m(ords)f(in)g(the)h(same)h(fashion)d(that)150 3162 -y(Bash)j(do)s(es,)h(so)f(that)h(sev)m(eral)f(w)m(ords)f(surrounded)f(b) -m(y)i(quotes)g(are)g(considered)f(one)h(w)m(ord.)54 b(History)150 -3272 y(expansions)33 b(are)h(in)m(tro)s(duced)e(b)m(y)i(the)g(app)s -(earance)g(of)g(the)g(history)f(expansion)g(c)m(haracter,)j(whic)m(h)d -(is)150 3381 y(`)p Fs(!)p Ft(')e(b)m(y)f(default.)40 -b(Only)28 b(`)p Fs(\\)p Ft(')j(and)f(`)p Fs(')p Ft(')g(ma)m(y)h(b)s(e)f -(used)g(to)h(escap)s(e)g(the)f(history)f(expansion)h(c)m(haracter.)275 -3519 y(Sev)m(eral)39 b(shell)f(options)h(settable)h(with)e(the)i -Fs(shopt)e Ft(builtin)e(\(see)k(Section)g(4.2)g([Bash)g(Builtins],)150 -3629 y(page)32 b(39\))h(ma)m(y)f(b)s(e)f(used)g(to)i(tailor)e(the)g(b)s -(eha)m(vior)g(of)h(history)f(expansion.)43 b(If)31 b(the)h -Fs(histverify)d Ft(shell)150 3738 y(option)38 b(is)f(enabled,)i(and)f -(Readline)e(is)i(b)s(eing)e(used,)k(history)d(substitutions)f(are)i -(not)h(immediately)150 3848 y(passed)30 b(to)h(the)g(shell)e(parser.)40 -b(Instead,)30 b(the)h(expanded)f(line)f(is)g(reloaded)h(in)m(to)h(the)f -(Readline)f(editing)150 3957 y(bu\013er)g(for)i(further)e(mo)s -(di\014cation.)39 b(If)30 b(Readline)f(is)g(b)s(eing)g(used,)h(and)g -(the)g Fs(histreedit)e Ft(shell)g(option)150 4067 y(is)33 -b(enabled,)h(a)h(failed)e(history)g(expansion)g(will)e(b)s(e)j -(reloaded)f(in)m(to)h(the)h(Readline)d(editing)h(bu\013er)g(for)150 -4176 y(correction.)73 b(The)41 b(`)p Fs(-p)p Ft(')g(option)f(to)i(the)f -Fs(history)f Ft(builtin)d(command)k(ma)m(y)h(b)s(e)e(used)h(to)g(see)h -(what)150 4286 y(a)c(history)f(expansion)f(will)f(do)i(b)s(efore)h -(using)e(it.)62 b(The)37 b(`)p Fs(-s)p Ft(')g(option)g(to)i(the)f -Fs(history)d Ft(builtin)f(ma)m(y)150 4396 y(b)s(e)f(used)h(to)g(add)g -(commands)f(to)i(the)f(end)g(of)g(the)g(history)f(list)g(without)g -(actually)h(executing)g(them,)150 4505 y(so)k(that)h(they)f(are)g(a)m -(v)-5 b(ailable)37 b(for)h(subsequen)m(t)f(recall.)63 -b(This)36 b(is)h(most)h(useful)f(in)f(conjunction)h(with)150 -4615 y(Readline.)275 4753 y(The)29 b(shell)g(allo)m(ws)h(con)m(trol)h -(of)f(the)h(v)-5 b(arious)29 b(c)m(haracters)j(used)e(b)m(y)g(the)h -(history)e(expansion)h(mec)m(ha-)150 4862 y(nism)f(with)g(the)h +b(Expansion)275 1900 y Ft(The)35 b(History)h(library)f(pro)m(vides)h(a) +g(history)f(expansion)h(feature)g(that)g(is)g(similar)g(to)g(the)g +(history)150 2010 y(expansion)22 b(pro)m(vided)f(b)m(y)h +Fs(csh)p Ft(.)37 b(This)22 b(section)h(describ)s(es)e(the)h(syn)m(tax)h +(used)e(to)h(manipulate)h(the)f(history)150 2120 y(information.)275 +2257 y(History)31 b(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g +(the)h(history)f(list)h(in)m(to)g(the)g(input)f(stream,)h(making)150 +2367 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen) +m(ts)f(to)h(a)g(previous)f(command)g(in)m(to)i(the)e(curren)m(t)150 +2476 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g +(quic)m(kly)-8 b(.)275 2614 y(History)27 b(expansion)f(tak)m(es)i +(place)f(in)f(t)m(w)m(o)i(parts.)39 b(The)26 b(\014rst)g(is)g(to)h +(determine)g(whic)m(h)f(line)h(from)f(the)150 2724 y(history)i(list)g +(should)f(b)s(e)g(used)g(during)g(substitution.)39 b(The)27 +b(second)h(is)g(to)h(select)g(p)s(ortions)e(of)h(that)h(line)150 +2833 y(for)d(inclusion)f(in)m(to)i(the)f(curren)m(t)f(one.)40 +b(The)25 b(line)h(selected)h(from)f(the)g(history)f(is)h(called)h(the)f +Fq(ev)m(en)m(t)p Ft(,)j(and)150 2943 y(the)21 b(p)s(ortions)g(of)g +(that)h(line)f(that)h(are)g(acted)g(up)s(on)e(are)h(called)h +Fq(w)m(ords)p Ft(.)38 b(V)-8 b(arious)21 b Fq(mo)s(di\014ers)j +Ft(are)e(a)m(v)-5 b(ailable)150 3052 y(to)35 b(manipulate)f(the)g +(selected)i(w)m(ords.)51 b(The)33 b(line)h(is)g(brok)m(en)g(in)m(to)h +(w)m(ords)e(in)h(the)g(same)h(fashion)e(that)150 3162 +y(Bash)i(do)s(es,)h(so)f(that)h(sev)m(eral)g(w)m(ords)e(surrounded)f(b) +m(y)i(quotes)g(are)g(considered)g(one)g(w)m(ord.)54 b(History)150 +3272 y(expansions)34 b(are)g(in)m(tro)s(duced)f(b)m(y)h(the)g(app)s +(earance)g(of)g(the)g(history)g(expansion)g(c)m(haracter,)i(whic)m(h)e +(is)150 3381 y(`)p Fs(!)p Ft(')d(b)m(y)f(default.)41 +b(Only)29 b(`)p Fs(\\)p Ft(')i(and)f(`)p Fs(')p Ft(')g(ma)m(y)h(b)s(e)f +(used)g(to)h(escap)s(e)g(the)f(history)g(expansion)h(c)m(haracter.)275 +3519 y(Sev)m(eral)40 b(shell)g(options)g(settable)h(with)e(the)h +Fs(shopt)e Ft(builtin)h(\(see)h(Section)h(4.2)f([Bash)g(Builtins],)150 +3629 y(page)32 b(39\))h(ma)m(y)f(b)s(e)f(used)g(to)i(tailor)g(the)e(b)s +(eha)m(vior)h(of)g(history)g(expansion.)44 b(If)31 b(the)h +Fs(histverify)d Ft(shell)150 3738 y(option)39 b(is)f(enabled,)i(and)e +(Readline)g(is)h(b)s(eing)e(used,)j(history)e(substitutions)g(are)g +(not)h(immediately)150 3848 y(passed)30 b(to)h(the)g(shell)g(parser.)40 +b(Instead,)30 b(the)h(expanded)f(line)h(is)f(reloaded)h(in)m(to)h(the)e +(Readline)h(editing)150 3957 y(bu\013er)e(for)i(further)e(mo)s +(di\014cation.)41 b(If)30 b(Readline)h(is)f(b)s(eing)g(used,)g(and)g +(the)g Fs(histreedit)e Ft(shell)i(option)150 4067 y(is)k(enabled,)h(a)g +(failed)g(history)f(expansion)g(will)g(b)s(e)g(reloaded)g(in)m(to)h +(the)g(Readline)f(editing)h(bu\013er)e(for)150 4176 y(correction.)74 +b(The)41 b(`)p Fs(-p)p Ft(')g(option)g(to)h(the)f Fs(history)f +Ft(builtin)g(command)h(ma)m(y)h(b)s(e)e(used)h(to)g(see)h(what)150 +4286 y(a)c(history)g(expansion)f(will)h(do)f(b)s(efore)h(using)f(it.)63 +b(The)37 b(`)p Fs(-s)p Ft(')g(option)h(to)h(the)f Fs(history)d +Ft(builtin)i(ma)m(y)150 4396 y(b)s(e)c(used)h(to)g(add)g(commands)f(to) +i(the)f(end)g(of)g(the)g(history)g(list)h(without)f(actually)i +(executing)f(them,)150 4505 y(so)j(that)h(they)f(are)g(a)m(v)-5 +b(ailable)40 b(for)e(subsequen)m(t)f(recall.)65 b(This)37 +b(is)h(most)g(useful)g(in)f(conjunction)h(with)150 4615 +y(Readline.)275 4753 y(The)29 b(shell)i(allo)m(ws)h(con)m(trol)g(of)e +(the)h(v)-5 b(arious)30 b(c)m(haracters)i(used)e(b)m(y)g(the)h(history) +f(expansion)h(mec)m(ha-)150 4862 y(nism)f(with)g(the)g Fs(histchars)e Ft(v)-5 b(ariable.)150 5093 y Fk(9.3.1)63 b(Ev)m(en)m(t)39 b(Designators)275 5340 y Ft(An)30 b(ev)m(en)m(t)h -(designator)g(is)e(a)i(reference)g(to)g(a)f(command)h(line)d(en)m(try)j -(in)e(the)i(history)e(list.)p eop +(designator)h(is)e(a)h(reference)g(to)g(a)f(command)h(line)f(en)m(try)h +(in)f(the)h(history)f(list.)p eop end %%Page: 112 118 -112 117 bop 150 -116 a Ft(112)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fs(!)432 b Ft(Start)34 b(a)f(history)g(substitution,)f -(except)i(when)f(follo)m(w)m(ed)g(b)m(y)g(a)h(space,)h(tab,)f(the)g -(end)f(of)630 408 y(the)i(line,)e(`)p Fs(=)p Ft(')i(or)f(`)p -Fs(\()p Ft(')h(\(when)e(the)i Fs(extglob)d Ft(shell)h(option)g(is)h -(enabled)f(using)g(the)h Fs(shopt)630 518 y Ft(builtin\).)150 -674 y Fs(!)p Fj(n)384 b Ft(Refer)30 b(to)i(command)e(line)e -Fq(n)p Ft(.)150 830 y Fs(!-)p Fj(n)336 b Ft(Refer)30 -b(to)i(the)e(command)g Fq(n)g Ft(lines)f(bac)m(k.)150 -985 y Fs(!!)384 b Ft(Refer)30 b(to)i(the)e(previous)f(command.)40 -b(This)29 b(is)g(a)i(synon)m(ym)f(for)g(`)p Fs(!-1)p -Ft('.)150 1141 y Fs(!)p Fj(string)144 b Ft(Refer)30 b(to)i(the)e(most)h -(recen)m(t)g(command)f(starting)h(with)e Fq(string)p -Ft(.)150 1297 y Fs(!?)p Fj(string)11 b Fs([?])630 1406 -y Ft(Refer)34 b(to)g(the)f(most)h(recen)m(t)h(command)e(con)m(taining)g -Fq(string)p Ft(.)49 b(The)33 b(trailing)f(`)p Fs(?)p -Ft(')h(ma)m(y)i(b)s(e)630 1516 y(omitted)30 b(if)g(the)g -Fq(string)37 b Ft(is)30 b(follo)m(w)m(ed)g(immediately)f(b)m(y)h(a)h -(newline.)150 1672 y Fs(^)p Fj(string1)11 b Fs(^)p Fj(string2)g -Fs(^)630 1781 y Ft(Quic)m(k)31 b(Substitution.)42 b(Rep)s(eat)32 -b(the)g(last)g(command,)g(replacing)e Fq(string1)39 b -Ft(with)30 b Fq(string2)p Ft(.)630 1891 y(Equiv)-5 b(alen)m(t)29 -b(to)i Fs(!!:s/)p Fj(string1)11 b Fs(/)p Fj(string2)g -Fs(/)p Ft(.)150 2047 y Fs(!#)384 b Ft(The)30 b(en)m(tire)g(command)g -(line)f(t)m(yp)s(ed)h(so)h(far.)150 2265 y Fk(9.3.2)63 -b(W)-10 b(ord)41 b(Designators)275 2508 y Ft(W)-8 b(ord)35 -b(designators)f(are)h(used)f(to)h(select)g(desired)e(w)m(ords)i(from)f -(the)h(ev)m(en)m(t.)55 b(A)34 b(`)p Fs(:)p Ft(')h(separates)h(the)150 -2617 y(ev)m(en)m(t)41 b(sp)s(eci\014cation)d(from)i(the)f(w)m(ord)g -(designator.)68 b(It)40 b(ma)m(y)g(b)s(e)f(omitted)h(if)e(the)i(w)m -(ord)f(designator)150 2727 y(b)s(egins)32 b(with)h(a)i(`)p -Fs(^)p Ft(',)g(`)p Fs($)p Ft(',)g(`)p Fs(*)p Ft(',)h(`)p -Fs(-)p Ft(',)f(or)f(`)p Fs(\045)p Ft('.)52 b(W)-8 b(ords)35 -b(are)f(n)m(um)m(b)s(ered)f(from)g(the)i(b)s(eginning)c(of)j(the)g -(line,)150 2836 y(with)k(the)i(\014rst)f(w)m(ord)g(b)s(eing)f(denoted)i -(b)m(y)g(0)g(\(zero\).)70 b(W)-8 b(ords)39 b(are)h(inserted)f(in)m(to)g -(the)h(curren)m(t)g(line)150 2946 y(separated)31 b(b)m(y)f(single)f -(spaces.)275 3079 y(F)-8 b(or)31 b(example,)150 3234 -y Fs(!!)384 b Ft(designates)36 b(the)g(preceding)f(command.)57 -b(When)35 b(y)m(ou)i(t)m(yp)s(e)f(this,)g(the)g(preceding)f(com-)630 -3344 y(mand)30 b(is)f(rep)s(eated)h(in)f(toto.)150 3500 -y Fs(!!:$)288 b Ft(designates)22 b(the)h(last)f(argumen)m(t)h(of)f(the) -h(preceding)e(command.)38 b(This)21 b(ma)m(y)i(b)s(e)e(shortened)630 +TeXDict begin 112 117 bop 150 -116 a Ft(112)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(!)432 b Ft(Start)34 +b(a)f(history)h(substitution,)g(except)g(when)f(follo)m(w)m(ed)i(b)m(y) +e(a)h(space,)h(tab,)f(the)g(end)f(of)630 408 y(the)i(line,)g(`)p +Fs(=)p Ft(')g(or)f(`)p Fs(\()p Ft(')h(\(when)e(the)i +Fs(extglob)d Ft(shell)j(option)f(is)h(enabled)f(using)g(the)g +Fs(shopt)630 518 y Ft(builtin\).)150 674 y Fs(!)p Fj(n)384 +b Ft(Refer)30 b(to)i(command)e(line)g Fq(n)p Ft(.)150 +830 y Fs(!-)p Fj(n)336 b Ft(Refer)30 b(to)i(the)e(command)g +Fq(n)g Ft(lines)h(bac)m(k.)150 985 y Fs(!!)384 b Ft(Refer)30 +b(to)i(the)e(previous)g(command.)40 b(This)30 b(is)g(a)h(synon)m(ym)f +(for)g(`)p Fs(!-1)p Ft('.)150 1141 y Fs(!)p Fj(string)144 +b Ft(Refer)30 b(to)i(the)e(most)h(recen)m(t)g(command)f(starting)i +(with)e Fq(string)p Ft(.)150 1297 y Fs(!?)p Fj(string)11 +b Fs([?])630 1406 y Ft(Refer)34 b(to)g(the)f(most)h(recen)m(t)h +(command)e(con)m(taining)i Fq(string)p Ft(.)50 b(The)33 +b(trailing)i(`)p Fs(?)p Ft(')e(ma)m(y)i(b)s(e)630 1516 +y(omitted)c(if)g(the)f Fq(string)38 b Ft(is)31 b(follo)m(w)m(ed)h +(immediately)g(b)m(y)e(a)h(newline.)150 1672 y Fs(^)p +Fj(string1)11 b Fs(^)p Fj(string2)g Fs(^)630 1781 y Ft(Quic)m(k)32 +b(Substitution.)44 b(Rep)s(eat)32 b(the)g(last)h(command,)f(replacing)g +Fq(string1)40 b Ft(with)31 b Fq(string2)p Ft(.)630 1891 +y(Equiv)-5 b(alen)m(t)31 b(to)g Fs(!!:s/)p Fj(string1)11 +b Fs(/)p Fj(string2)g Fs(/)p Ft(.)150 2047 y Fs(!#)384 +b Ft(The)30 b(en)m(tire)h(command)f(line)h(t)m(yp)s(ed)f(so)h(far.)150 +2265 y Fk(9.3.2)63 b(W)-10 b(ord)41 b(Designators)275 +2508 y Ft(W)-8 b(ord)35 b(designators)g(are)g(used)f(to)h(select)h +(desired)e(w)m(ords)h(from)f(the)h(ev)m(en)m(t.)55 b(A)34 +b(`)p Fs(:)p Ft(')h(separates)h(the)150 2617 y(ev)m(en)m(t)41 +b(sp)s(eci\014cation)f(from)g(the)f(w)m(ord)g(designator.)69 +b(It)40 b(ma)m(y)g(b)s(e)f(omitted)i(if)e(the)h(w)m(ord)f(designator) +150 2727 y(b)s(egins)33 b(with)h(a)h(`)p Fs(^)p Ft(',)g(`)p +Fs($)p Ft(',)g(`)p Fs(*)p Ft(',)h(`)p Fs(-)p Ft(',)f(or)f(`)p +Fs(\045)p Ft('.)52 b(W)-8 b(ords)35 b(are)f(n)m(um)m(b)s(ered)f(from)g +(the)i(b)s(eginning)e(of)h(the)g(line,)150 2836 y(with)39 +b(the)h(\014rst)f(w)m(ord)g(b)s(eing)g(denoted)h(b)m(y)g(0)g(\(zero\).) +70 b(W)-8 b(ords)39 b(are)h(inserted)g(in)m(to)g(the)g(curren)m(t)g +(line)150 2946 y(separated)31 b(b)m(y)f(single)h(spaces.)275 +3079 y(F)-8 b(or)31 b(example,)150 3234 y Fs(!!)384 b +Ft(designates)37 b(the)f(preceding)g(command.)57 b(When)35 +b(y)m(ou)i(t)m(yp)s(e)f(this,)h(the)f(preceding)g(com-)630 +3344 y(mand)30 b(is)g(rep)s(eated)g(in)g(toto.)150 3500 +y Fs(!!:$)288 b Ft(designates)23 b(the)g(last)g(argumen)m(t)g(of)f(the) +h(preceding)f(command.)38 b(This)22 b(ma)m(y)h(b)s(e)e(shortened)630 3609 y(to)31 b Fs(!$)p Ft(.)150 3765 y Fs(!fi:2)240 b -Ft(designates)29 b(the)h(second)f(argumen)m(t)h(of)f(the)h(most)f -(recen)m(t)i(command)e(starting)g(with)f(the)630 3875 -y(letters)j Fs(fi)p Ft(.)275 4030 y(Here)f(are)h(the)g(w)m(ord)f +Ft(designates)30 b(the)g(second)f(argumen)m(t)h(of)f(the)h(most)f +(recen)m(t)i(command)e(starting)h(with)f(the)630 3875 +y(letters)j Fs(fi)p Ft(.)275 4030 y(Here)e(are)h(the)g(w)m(ord)f (designators:)150 4186 y Fs(0)g(\(zero\))114 b Ft(The)30 -b Fs(0)p Ft(th)g(w)m(ord.)40 b(F)-8 b(or)31 b(man)m(y)g(applications,)e -(this)g(is)g(the)i(command)f(w)m(ord.)150 4342 y Fj(n)432 +b Fs(0)p Ft(th)g(w)m(ord.)40 b(F)-8 b(or)31 b(man)m(y)g(applications,)h +(this)e(is)g(the)h(command)f(w)m(ord.)150 4342 y Fj(n)432 b Ft(The)30 b Fq(n)p Ft(th)g(w)m(ord.)150 4498 y Fs(^)432 -b Ft(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)e(w)m(ord)h(1.)150 -4654 y Fs($)432 b Ft(The)30 b(last)g(argumen)m(t.)150 +b Ft(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m(ord)g(1.)150 +4654 y Fs($)432 b Ft(The)30 b(last)h(argumen)m(t.)150 4809 y Fs(\045)432 b Ft(The)30 b(w)m(ord)g(matc)m(hed)h(b)m(y)f(the)h (most)g(recen)m(t)g(`)p Fs(?)p Fj(string)11 b Fs(?)p Ft(')28 b(searc)m(h.)150 4965 y Fj(x)p Fs(-)p Fj(y)336 b Ft(A)30 b(range)h(of)g(w)m(ords;)f(`)p Fs(-)p Fj(y)11 -b Ft(')30 b(abbreviates)g(`)p Fs(0-)p Fj(y)11 b Ft('.)150 -5121 y Fs(*)432 b Ft(All)26 b(of)i(the)g(w)m(ords,)g(except)h(the)e -Fs(0)p Ft(th.)40 b(This)26 b(is)g(a)i(synon)m(ym)f(for)h(`)p -Fs(1-$)p Ft('.)39 b(It)28 b(is)f(not)h(an)f(error)630 -5230 y(to)j(use)g(`)p Fs(*)p Ft(')f(if)g(there)h(is)f(just)g(one)h(w)m -(ord)f(in)f(the)i(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)d(is)h -(returned)f(in)630 5340 y(that)j(case.)p eop +b Ft(')30 b(abbreviates)h(`)p Fs(0-)p Fj(y)11 b Ft('.)150 +5121 y Fs(*)432 b Ft(All)28 b(of)g(the)g(w)m(ords,)g(except)h(the)e +Fs(0)p Ft(th.)40 b(This)27 b(is)g(a)h(synon)m(ym)f(for)h(`)p +Fs(1-$)p Ft('.)39 b(It)28 b(is)g(not)g(an)f(error)630 +5230 y(to)j(use)g(`)p Fs(*)p Ft(')f(if)h(there)g(is)g(just)f(one)h(w)m +(ord)f(in)g(the)h(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)e(is)h +(returned)e(in)630 5340 y(that)j(case.)p eop end %%Page: 113 119 -113 118 bop 150 -116 a Ft(Chapter)30 b(9:)41 b(Using)29 -b(History)h(In)m(teractiv)m(ely)1923 b(113)150 299 y -Fj(x)11 b Fs(*)373 b Ft(Abbreviates)30 b(`)p Fj(x)p Fs(-$)p -Ft(')150 458 y Fj(x)p Fs(-)384 b Ft(Abbreviates)30 b(`)p -Fj(x)p Fs(-$)p Ft(')g(lik)m(e)f(`)p Fj(x)11 b Fs(*)p -Ft(',)31 b(but)e(omits)h(the)h(last)f(w)m(ord.)275 618 -y(If)j(a)h(w)m(ord)g(designator)f(is)g(supplied)e(without)i(an)h(ev)m -(en)m(t)h(sp)s(eci\014cation,)f(the)g(previous)e(command)150 -727 y(is)d(used)h(as)h(the)f(ev)m(en)m(t.)150 951 y Fk(9.3.3)63 -b(Mo)s(di\014ers)275 1196 y Ft(After)20 b(the)h(optional)f(w)m(ord)h -(designator,)h(y)m(ou)f(can)g(add)f(a)h(sequence)g(of)g(one)g(or)g -(more)g(of)g(the)f(follo)m(wing)150 1305 y(mo)s(di\014ers,)28 -b(eac)m(h)k(preceded)e(b)m(y)g(a)h(`)p Fs(:)p Ft('.)150 -1465 y Fs(h)432 b Ft(Remo)m(v)m(e)32 b(a)f(trailing)d(pathname)j(comp)s -(onen)m(t,)g(lea)m(ving)f(only)f(the)i(head.)150 1624 -y Fs(t)432 b Ft(Remo)m(v)m(e)32 b(all)d(leading)h(pathname)g(comp)s -(onen)m(ts,)h(lea)m(ving)f(the)g(tail.)150 1783 y Fs(r)432 -b Ft(Remo)m(v)m(e)32 b(a)f(trailing)d(su\016x)i(of)g(the)h(form)f(`)p -Fs(.)p Fj(suffix)11 b Ft(',)28 b(lea)m(ving)j(the)f(basename.)150 -1943 y Fs(e)432 b Ft(Remo)m(v)m(e)32 b(all)d(but)h(the)h(trailing)d -(su\016x.)150 2102 y Fs(p)432 b Ft(Prin)m(t)29 b(the)i(new)f(command)g +TeXDict begin 113 118 bop 150 -116 a Ft(Chapter)30 b(9:)41 +b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(113)150 +299 y Fj(x)11 b Fs(*)373 b Ft(Abbreviates)31 b(`)p Fj(x)p +Fs(-$)p Ft(')150 458 y Fj(x)p Fs(-)384 b Ft(Abbreviates)31 +b(`)p Fj(x)p Fs(-$)p Ft(')f(lik)m(e)h(`)p Fj(x)11 b Fs(*)p +Ft(',)31 b(but)e(omits)i(the)g(last)g(w)m(ord.)275 618 +y(If)i(a)h(w)m(ord)g(designator)g(is)g(supplied)f(without)h(an)g(ev)m +(en)m(t)h(sp)s(eci\014cation,)h(the)e(previous)f(command)150 +727 y(is)d(used)g(as)h(the)f(ev)m(en)m(t.)150 951 y Fk(9.3.3)63 +b(Mo)s(di\014ers)275 1196 y Ft(After)20 b(the)h(optional)h(w)m(ord)f +(designator,)i(y)m(ou)e(can)g(add)f(a)h(sequence)g(of)g(one)g(or)g +(more)g(of)g(the)f(follo)m(wing)150 1305 y(mo)s(di\014ers,)29 +b(eac)m(h)j(preceded)e(b)m(y)g(a)h(`)p Fs(:)p Ft('.)150 +1465 y Fs(h)432 b Ft(Remo)m(v)m(e)32 b(a)f(trailing)g(pathname)g(comp)s +(onen)m(t,)g(lea)m(ving)h(only)e(the)h(head.)150 1624 +y Fs(t)432 b Ft(Remo)m(v)m(e)32 b(all)f(leading)h(pathname)e(comp)s +(onen)m(ts,)h(lea)m(ving)h(the)e(tail.)150 1783 y Fs(r)432 +b Ft(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g(the)h(form)f(`)p +Fs(.)p Fj(suffix)11 b Ft(',)28 b(lea)m(ving)33 b(the)d(basename.)150 +1943 y Fs(e)432 b Ft(Remo)m(v)m(e)32 b(all)f(but)f(the)h(trailing)g +(su\016x.)150 2102 y Fs(p)432 b Ft(Prin)m(t)30 b(the)h(new)f(command)g (but)g(do)g(not)g(execute)i(it.)150 2262 y Fs(q)432 b -Ft(Quote)31 b(the)f(substituted)f(w)m(ords,)h(escaping)g(further)f -(substitutions.)150 2421 y Fs(x)432 b Ft(Quote)32 b(the)f(substituted)f -(w)m(ords)g(as)i(with)e(`)p Fs(q)p Ft(',)i(but)e(break)h(in)m(to)h(w)m -(ords)e(at)i(spaces,)h(tabs,)630 2531 y(and)d(newlines.)150 +Ft(Quote)31 b(the)f(substituted)g(w)m(ords,)g(escaping)h(further)e +(substitutions.)150 2421 y Fs(x)432 b Ft(Quote)32 b(the)f(substituted)g +(w)m(ords)f(as)i(with)f(`)p Fs(q)p Ft(',)h(but)e(break)h(in)m(to)i(w)m +(ords)d(at)i(spaces,)h(tabs,)630 2531 y(and)d(newlines.)150 2690 y Fs(s/)p Fj(old)11 b Fs(/)p Fj(new)g Fs(/)630 2800 -y Ft(Substitute)31 b Fq(new)40 b Ft(for)32 b(the)h(\014rst)f(o)s -(ccurrence)h(of)f Fq(old)k Ft(in)31 b(the)i(ev)m(en)m(t)h(line.)46 -b(An)m(y)32 b(delimiter)630 2909 y(ma)m(y)25 b(b)s(e)g(used)f(in)f -(place)i(of)g(`)p Fs(/)p Ft('.)39 b(The)24 b(delimiter)e(ma)m(y)k(b)s -(e)e(quoted)h(in)e Fq(old)28 b Ft(and)c Fq(new)32 b Ft(with)24 -b(a)630 3019 y(single)j(bac)m(kslash.)39 b(If)28 b(`)p -Fs(&)p Ft(')g(app)s(ears)g(in)e Fq(new)p Ft(,)j(it)e(is)h(replaced)f(b) -m(y)h Fq(old)p Ft(.)39 b(A)28 b(single)f(bac)m(kslash)630 -3128 y(will)32 b(quote)j(the)g(`)p Fs(&)p Ft('.)54 b(The)34 -b(\014nal)f(delimiter)g(is)g(optional)h(if)g(it)g(is)f(the)i(last)g(c)m -(haracter)h(on)630 3238 y(the)31 b(input)d(line.)150 -3397 y Fs(&)432 b Ft(Rep)s(eat)31 b(the)f(previous)f(substitution.)150 -3557 y Fs(g)150 3666 y(a)432 b Ft(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f -(applied)f(o)m(v)m(er)j(the)f(en)m(tire)f(ev)m(en)m(t)i(line.)64 -b(Used)39 b(in)e(conjunction)630 3776 y(with)29 b(`)p -Fs(s)p Ft(',)i(as)f(in)g Fs(gs/)p Fj(old)11 b Fs(/)p -Fj(new)g Fs(/)p Ft(,)26 b(or)k(with)g(`)p Fs(&)p Ft('.)150 -3935 y Fs(G)432 b Ft(Apply)29 b(the)h(follo)m(wing)f(`)p -Fs(s)p Ft(')i(mo)s(di\014er)d(once)j(to)g(eac)m(h)h(w)m(ord)e(in)f(the) -h(ev)m(en)m(t.)p eop +y Ft(Substitute)32 b Fq(new)40 b Ft(for)32 b(the)h(\014rst)f(o)s +(ccurrence)h(of)f Fq(old)37 b Ft(in)32 b(the)h(ev)m(en)m(t)h(line.)48 +b(An)m(y)32 b(delimiter)630 2909 y(ma)m(y)25 b(b)s(e)g(used)f(in)g +(place)i(of)f(`)p Fs(/)p Ft('.)39 b(The)24 b(delimiter)h(ma)m(y)h(b)s +(e)e(quoted)h(in)f Fq(old)29 b Ft(and)24 b Fq(new)32 +b Ft(with)25 b(a)630 3019 y(single)k(bac)m(kslash.)40 +b(If)28 b(`)p Fs(&)p Ft(')g(app)s(ears)g(in)f Fq(new)p +Ft(,)i(it)f(is)h(replaced)f(b)m(y)g Fq(old)p Ft(.)40 +b(A)28 b(single)h(bac)m(kslash)630 3128 y(will)35 b(quote)g(the)g(`)p +Fs(&)p Ft('.)54 b(The)34 b(\014nal)g(delimiter)i(is)e(optional)i(if)f +(it)g(is)f(the)h(last)h(c)m(haracter)g(on)630 3238 y(the)31 +b(input)e(line.)150 3397 y Fs(&)432 b Ft(Rep)s(eat)31 +b(the)f(previous)g(substitution.)150 3557 y Fs(g)150 +3666 y(a)432 b Ft(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f(applied)h(o)m(v) +m(er)h(the)f(en)m(tire)g(ev)m(en)m(t)h(line.)66 b(Used)39 +b(in)f(conjunction)630 3776 y(with)30 b(`)p Fs(s)p Ft(',)h(as)f(in)h +Fs(gs/)p Fj(old)11 b Fs(/)p Fj(new)g Fs(/)p Ft(,)26 b(or)k(with)h(`)p +Fs(&)p Ft('.)150 3935 y Fs(G)432 b Ft(Apply)30 b(the)g(follo)m(wing)i +(`)p Fs(s)p Ft(')f(mo)s(di\014er)e(once)i(to)g(eac)m(h)h(w)m(ord)e(in)g +(the)g(ev)m(en)m(t.)p eop end %%Page: 114 120 -114 119 bop 150 -116 a Ft(114)2527 b(Bash)31 b(Reference)g(Man)m(ual)p -eop +TeXDict begin 114 119 bop 150 -116 a Ft(114)2527 b(Bash)31 +b(Reference)g(Man)m(ual)p eop end %%Page: 115 121 -115 120 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28 -b(Bash)2356 b(115)150 299 y Fo(10)80 b(Installing)55 -b(Bash)275 535 y Ft(This)38 b(c)m(hapter)j(pro)m(vides)e(basic)g -(instructions)f(for)i(installing)d(Bash)j(on)g(the)h(v)-5 -b(arious)39 b(supp)s(orted)150 645 y(platforms.)57 b(The)36 -b(distribution)d(supp)s(orts)h(the)j Fl(gnu)f Ft(op)s(erating)f -(systems,)k(nearly)c(ev)m(ery)i(v)m(ersion)f(of)150 754 -y(Unix,)g(and)f(sev)m(eral)h(non-Unix)f(systems)h(suc)m(h)f(as)h(BeOS)g -(and)f(In)m(terix.)56 b(Other)35 b(indep)s(enden)m(t)f(p)s(orts)150 -864 y(exist)c(for)g Fl(ms-dos)p Ft(,)g Fl(os/2)p Ft(,)g(and)g(Windo)m -(ws)g(platforms.)150 1123 y Fr(10.1)68 b(Basic)45 b(Installation)275 -1367 y Ft(These)30 b(are)g(installation)f(instructions)f(for)i(Bash.) -275 1503 y(The)f(simplest)g(w)m(a)m(y)i(to)g(compile)f(Bash)g(is:)199 -1638 y(1.)61 b Fs(cd)38 b Ft(to)h(the)f(directory)g(con)m(taining)g -(the)h(source)f(co)s(de)h(and)f(t)m(yp)s(e)g(`)p Fs(./configure)p +TeXDict begin 115 120 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(115)150 299 y Fo(10)80 +b(Installing)52 b(Bash)275 535 y Ft(This)39 b(c)m(hapter)i(pro)m(vides) +f(basic)g(instructions)g(for)g(installing)h(Bash)f(on)g(the)h(v)-5 +b(arious)40 b(supp)s(orted)150 645 y(platforms.)58 b(The)36 +b(distribution)g(supp)s(orts)e(the)j Fl(gnu)f Ft(op)s(erating)g +(systems,)j(nearly)d(ev)m(ery)h(v)m(ersion)g(of)150 754 +y(Unix,)g(and)e(sev)m(eral)i(non-Unix)f(systems)g(suc)m(h)f(as)h(BeOS)g +(and)f(In)m(terix.)57 b(Other)35 b(indep)s(enden)m(t)g(p)s(orts)150 +864 y(exist)c(for)f Fl(ms-dos)p Ft(,)g Fl(os/2)p Ft(,)g(and)g(Windo)m +(ws)h(platforms.)150 1123 y Fr(10.1)68 b(Basic)45 b(Installation)275 +1367 y Ft(These)30 b(are)g(installation)j(instructions)d(for)g(Bash.) +275 1503 y(The)f(simplest)i(w)m(a)m(y)g(to)g(compile)h(Bash)e(is:)199 +1638 y(1.)61 b Fs(cd)38 b Ft(to)h(the)f(directory)h(con)m(taining)h +(the)f(source)f(co)s(de)h(and)f(t)m(yp)s(e)g(`)p Fs(./configure)p Ft(')e(to)j(con\014gure)330 1747 y(Bash)c(for)f(y)m(our)h(system.)54 -b(If)34 b(y)m(ou're)h(using)e Fs(csh)h Ft(on)g(an)h(old)f(v)m(ersion)g -(of)h(System)f(V,)h(y)m(ou)g(migh)m(t)330 1857 y(need)21 +b(If)34 b(y)m(ou're)h(using)f Fs(csh)g Ft(on)g(an)h(old)g(v)m(ersion)g +(of)g(System)f(V,)h(y)m(ou)g(migh)m(t)330 1857 y(need)21 b(to)g(t)m(yp)s(e)g(`)p Fs(sh)30 b(./configure)p Ft(')18 -b(instead)i(to)h(prev)m(en)m(t)h Fs(csh)e Ft(from)g(trying)g(to)h +b(instead)j(to)g(prev)m(en)m(t)h Fs(csh)e Ft(from)g(trying)h(to)g (execute)h Fs(configure)330 1966 y Ft(itself.)330 2101 -y(Running)29 b Fs(configure)g Ft(tak)m(es)k(some)e(time.)44 -b(While)30 b(running,)f(it)i(prin)m(ts)f(messages)i(telling)e(whic)m(h) -330 2211 y(features)h(it)f(is)f(c)m(hec)m(king)i(for.)199 -2346 y(2.)61 b(T)m(yp)s(e)30 b(`)p Fs(make)p Ft(')g(to)h(compile)e -(Bash)i(and)e(build)f(the)i Fs(bashbug)f Ft(bug)g(rep)s(orting)g -(script.)199 2481 y(3.)61 b(Optionally)-8 b(,)29 b(t)m(yp)s(e)h(`)p +y(Running)30 b Fs(configure)f Ft(tak)m(es)k(some)e(time.)45 +b(While)32 b(running,)e(it)i(prin)m(ts)f(messages)h(telling)h(whic)m(h) +330 2211 y(features)e(it)g(is)f(c)m(hec)m(king)i(for.)199 +2346 y(2.)61 b(T)m(yp)s(e)30 b(`)p Fs(make)p Ft(')g(to)h(compile)g +(Bash)g(and)e(build)h(the)g Fs(bashbug)f Ft(bug)g(rep)s(orting)h +(script.)199 2481 y(3.)61 b(Optionally)-8 b(,)32 b(t)m(yp)s(e)e(`)p Fs(make)g(tests)p Ft(')f(to)i(run)e(the)h(Bash)h(test)g(suite.)199 2615 y(4.)61 b(T)m(yp)s(e)36 b(`)p Fs(make)29 b(install)p -Ft(')35 b(to)i(install)e Fs(bash)g Ft(and)h Fs(bashbug)p -Ft(.)57 b(This)34 b(will)g(also)j(install)d(the)j(man)m(ual)330 +Ft(')35 b(to)i(install)h Fs(bash)d Ft(and)h Fs(bashbug)p +Ft(.)57 b(This)35 b(will)i(also)h(install)f(the)g(man)m(ual)330 2725 y(pages)31 b(and)f(Info)g(\014le.)275 2885 y(The)20 -b Fs(configure)f Ft(shell)g(script)h(attempts)i(to)g(guess)f(correct)i -(v)-5 b(alues)20 b(for)h(v)-5 b(arious)20 b(system-dep)s(enden)m(t)150 -2995 y(v)-5 b(ariables)42 b(used)h(during)f(compilation.)79 -b(It)43 b(uses)h(those)g(v)-5 b(alues)43 b(to)h(create)h(a)g(`)p -Fs(Makefile)p Ft(')c(in)i(eac)m(h)150 3104 y(directory)24 -b(of)h(the)g(pac)m(k)-5 b(age)27 b(\(the)e(top)g(directory)-8 -b(,)26 b(the)f(`)p Fs(builtins)p Ft(',)f(`)p Fs(doc)p +b Fs(configure)f Ft(shell)i(script)g(attempts)h(to)g(guess)f(correct)i +(v)-5 b(alues)21 b(for)g(v)-5 b(arious)21 b(system-dep)s(enden)m(t)150 +2995 y(v)-5 b(ariables)44 b(used)f(during)g(compilation.)82 +b(It)43 b(uses)h(those)g(v)-5 b(alues)44 b(to)g(create)h(a)g(`)p +Fs(Makefile)p Ft(')c(in)j(eac)m(h)150 3104 y(directory)25 +b(of)g(the)g(pac)m(k)-5 b(age)27 b(\(the)e(top)g(directory)-8 +b(,)27 b(the)e(`)p Fs(builtins)p Ft(',)f(`)p Fs(doc)p Ft(',)i(and)e(`)p Fs(support)p Ft(')g(directories,)150 -3214 y(eac)m(h)32 b(directory)e(under)e(`)p Fs(lib)p -Ft(',)j(and)f(sev)m(eral)g(others\).)42 b(It)30 b(also)h(creates)g(a)g -(`)p Fs(config.h)p Ft(')e(\014le)g(con)m(taining)150 -3324 y(system-dep)s(enden)m(t)i(de\014nitions.)42 b(Finally)-8 -b(,)31 b(it)g(creates)i(a)f(shell)e(script)g(named)h -Fs(config.status)d Ft(that)150 3433 y(y)m(ou)k(can)g(run)e(in)g(the)h -(future)g(to)h(recreate)h(the)f(curren)m(t)f(con\014guration,)g(a)h -(\014le)f(`)p Fs(config.cache)p Ft(')d(that)150 3543 -y(sa)m(v)m(es)35 b(the)f(results)e(of)i(its)f(tests)i(to)f(sp)s(eed)f -(up)g(recon\014guring,)g(and)g(a)h(\014le)f(`)p Fs(config.log)p -Ft(')e(con)m(taining)150 3652 y(compiler)23 b(output)i(\(useful)e -(mainly)g(for)i(debugging)e Fs(configure)p Ft(\).)37 -b(If)24 b(at)i(some)f(p)s(oin)m(t)f(`)p Fs(config.cache)p -Ft(')150 3762 y(con)m(tains)31 b(results)e(y)m(ou)h(don't)h(w)m(an)m(t) -g(to)g(k)m(eep,)g(y)m(ou)g(ma)m(y)g(remo)m(v)m(e)h(or)e(edit)g(it.)275 -3897 y(T)-8 b(o)37 b(\014nd)f(out)i(more)f(ab)s(out)h(the)f(options)g -(and)g(argumen)m(ts)g(that)h(the)g Fs(configure)d Ft(script)h(under-) +3214 y(eac)m(h)32 b(directory)f(under)d(`)p Fs(lib)p +Ft(',)j(and)f(sev)m(eral)h(others\).)42 b(It)30 b(also)i(creates)f(a)g +(`)p Fs(config.h)p Ft(')e(\014le)h(con)m(taining)150 +3324 y(system-dep)s(enden)m(t)h(de\014nitions.)44 b(Finally)-8 +b(,)34 b(it)e(creates)h(a)f(shell)g(script)f(named)g +Fs(config.status)d Ft(that)150 3433 y(y)m(ou)k(can)g(run)e(in)h(the)g +(future)g(to)h(recreate)h(the)f(curren)m(t)f(con\014guration,)h(a)g +(\014le)g(`)p Fs(config.cache)p Ft(')c(that)150 3543 +y(sa)m(v)m(es)35 b(the)f(results)f(of)h(its)g(tests)h(to)f(sp)s(eed)f +(up)g(recon\014guring,)h(and)f(a)h(\014le)g(`)p Fs(config.log)p +Ft(')d(con)m(taining)150 3652 y(compiler)25 b(output)g(\(useful)f +(mainly)h(for)g(debugging)f Fs(configure)p Ft(\).)37 +b(If)24 b(at)i(some)f(p)s(oin)m(t)g(`)p Fs(config.cache)p +Ft(')150 3762 y(con)m(tains)32 b(results)e(y)m(ou)g(don't)h(w)m(an)m(t) +g(to)g(k)m(eep,)g(y)m(ou)g(ma)m(y)g(remo)m(v)m(e)h(or)e(edit)h(it.)275 +3897 y(T)-8 b(o)37 b(\014nd)f(out)i(more)f(ab)s(out)h(the)f(options)h +(and)f(argumen)m(ts)g(that)h(the)g Fs(configure)d Ft(script)i(under-) 150 4007 y(stands,)30 b(t)m(yp)s(e)390 4142 y Fs(bash-2.04$)45 -b(./configure)g(--help)150 4277 y Ft(at)31 b(the)g(Bash)f(prompt)g(in)f -(y)m(our)h(Bash)h(source)f(directory)-8 b(.)275 4412 -y(If)53 b(y)m(ou)h(need)f(to)i(do)e(un)m(usual)f(things)g(to)j(compile) -e(Bash,)59 b(please)54 b(try)f(to)i(\014gure)e(out)h(ho)m(w)150 -4522 y Fs(configure)47 b Ft(could)i(c)m(hec)m(k)i(whether)e(or)g(not)h -(to)h(do)e(them,)55 b(and)49 b(mail)f(di\013s)g(or)i(instructions)d(to) +b(./configure)g(--help)150 4277 y Ft(at)31 b(the)g(Bash)f(prompt)g(in)g +(y)m(our)g(Bash)h(source)f(directory)-8 b(.)275 4412 +y(If)53 b(y)m(ou)h(need)f(to)i(do)e(un)m(usual)g(things)g(to)i(compile) +g(Bash,)k(please)c(try)e(to)i(\014gure)e(out)h(ho)m(w)150 +4522 y Fs(configure)47 b Ft(could)j(c)m(hec)m(k)h(whether)e(or)g(not)h +(to)h(do)e(them,)55 b(and)49 b(mail)h(di\013s)f(or)h(instructions)f(to) 150 4631 y Fs(bash-maintainers@gnu.org)24 b Ft(so)30 -b(they)h(can)g(b)s(e)e(considered)h(for)g(the)g(next)h(release.)275 -4766 y(The)24 b(\014le)h(`)p Fs(configure.in)p Ft(')d(is)j(used)f(to)j -(create)g Fs(configure)22 b Ft(b)m(y)k(a)g(program)f(called)f(Auto)s -(conf.)39 b(Y)-8 b(ou)150 4876 y(only)30 b(need)g(`)p -Fs(configure.in)p Ft(')d(if)j(y)m(ou)g(w)m(an)m(t)i(to)f(c)m(hange)g -(it)f(or)g(regenerate)i Fs(configure)c Ft(using)h(a)i(new)m(er)150 -4986 y(v)m(ersion)24 b(of)g(Auto)s(conf.)39 b(If)24 b(y)m(ou)h(do)f -(this,)h(mak)m(e)g(sure)f(y)m(ou)h(are)f(using)f(Auto)s(conf)i(v)m -(ersion)e(2.50)j(or)f(new)m(er.)275 5121 y(Y)-8 b(ou)29 -b(can)f(remo)m(v)m(e)i(the)f(program)g(binaries)d(and)i(ob)5 -b(ject)29 b(\014les)f(from)g(the)h(source)f(co)s(de)h(directory)f(b)m -(y)150 5230 y(t)m(yping)j(`)p Fs(make)e(clean)p Ft('.)42 -b(T)-8 b(o)32 b(also)f(remo)m(v)m(e)h(the)g(\014les)e(that)h +b(they)h(can)g(b)s(e)e(considered)i(for)f(the)g(next)h(release.)275 +4766 y(The)24 b(\014le)i(`)p Fs(configure.in)p Ft(')c(is)k(used)e(to)j +(create)g Fs(configure)22 b Ft(b)m(y)k(a)g(program)f(called)h(Auto)s +(conf.)39 b(Y)-8 b(ou)150 4876 y(only)31 b(need)f(`)p +Fs(configure.in)p Ft(')d(if)k(y)m(ou)f(w)m(an)m(t)i(to)f(c)m(hange)g +(it)g(or)f(regenerate)i Fs(configure)c Ft(using)i(a)h(new)m(er)150 +4986 y(v)m(ersion)25 b(of)f(Auto)s(conf.)39 b(If)24 b(y)m(ou)h(do)f +(this,)i(mak)m(e)f(sure)f(y)m(ou)h(are)f(using)g(Auto)s(conf)h(v)m +(ersion)f(2.50)i(or)f(new)m(er.)275 5121 y(Y)-8 b(ou)29 +b(can)f(remo)m(v)m(e)i(the)f(program)g(binaries)f(and)g(ob)5 +b(ject)29 b(\014les)g(from)f(the)h(source)f(co)s(de)h(directory)g(b)m +(y)150 5230 y(t)m(yping)j(`)p Fs(make)d(clean)p Ft('.)42 +b(T)-8 b(o)32 b(also)g(remo)m(v)m(e)g(the)g(\014les)f(that)g Fs(configure)e Ft(created)j(\(so)g(y)m(ou)g(can)f(compile)150 -5340 y(Bash)g(for)f(a)g(di\013eren)m(t)g(kind)f(of)h(computer\),)h(t)m -(yp)s(e)g(`)p Fs(make)e(distclean)p Ft('.)p eop +5340 y(Bash)g(for)f(a)g(di\013eren)m(t)h(kind)f(of)g(computer\),)h(t)m +(yp)s(e)g(`)p Fs(make)e(distclean)p Ft('.)p eop end %%Page: 116 122 -116 121 bop 150 -116 a Ft(116)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fr(10.2)68 b(Compilers)46 b(and)f(Options)275 -560 y Ft(Some)40 b(systems)g(require)e(un)m(usual)g(options)h(for)h -(compilation)f(or)h(linking)d(that)j(the)g Fs(configure)150 -669 y Ft(script)29 b(do)s(es)i(not)g(kno)m(w)f(ab)s(out.)41 -b(Y)-8 b(ou)31 b(can)g(giv)m(e)g Fs(configure)d Ft(initial)g(v)-5 -b(alues)30 b(for)g(v)-5 b(ariables)29 b(b)m(y)i(setting)150 -779 y(them)21 b(in)e(the)i(en)m(vironmen)m(t.)37 b(Using)20 -b(a)h(Bourne-compatible)f(shell,)h(y)m(ou)g(can)g(do)f(that)i(on)e(the) -h(command)150 888 y(line)29 b(lik)m(e)g(this:)390 1039 -y Fs(CC=c89)46 b(CFLAGS=-O2)f(LIBS=-lposix)g(./configure)275 +TeXDict begin 116 121 bop 150 -116 a Ft(116)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(10.2)68 b(Compilers)46 +b(and)f(Options)275 560 y Ft(Some)40 b(systems)g(require)f(un)m(usual)g +(options)h(for)g(compilation)i(or)e(linking)g(that)g(the)g +Fs(configure)150 669 y Ft(script)30 b(do)s(es)h(not)g(kno)m(w)f(ab)s +(out.)41 b(Y)-8 b(ou)31 b(can)g(giv)m(e)h Fs(configure)c +Ft(initial)k(v)-5 b(alues)31 b(for)f(v)-5 b(ariables)31 +b(b)m(y)g(setting)150 779 y(them)21 b(in)f(the)h(en)m(vironmen)m(t.)38 +b(Using)21 b(a)g(Bourne-compatible)h(shell,)h(y)m(ou)e(can)g(do)f(that) +i(on)e(the)h(command)150 888 y(line)31 b(lik)m(e)g(this:)390 +1039 y Fs(CC=c89)46 b(CFLAGS=-O2)f(LIBS=-lposix)g(./configure)275 1191 y Ft(On)29 b(systems)h(that)h(ha)m(v)m(e)h(the)f -Fs(env)e Ft(program,)h(y)m(ou)h(can)g(do)f(it)g(lik)m(e)g(this:)390 +Fs(env)e Ft(program,)h(y)m(ou)h(can)g(do)f(it)h(lik)m(e)h(this:)390 1342 y Fs(env)47 b(CPPFLAGS=-I/usr/local/in)o(clud)o(e)42 -b(LDFLAGS=-s)j(./configure)275 1493 y Ft(The)29 b(con\014guration)h -(pro)s(cess)g(uses)g(GCC)g(to)h(build)c(Bash)k(if)e(it)h(is)g(a)m(v)-5 +b(LDFLAGS=-s)j(./configure)275 1493 y Ft(The)29 b(con\014guration)i +(pro)s(cess)f(uses)g(GCC)g(to)h(build)e(Bash)i(if)f(it)h(is)g(a)m(v)-5 b(ailable.)150 1792 y Fr(10.3)68 b(Compiling)46 b(F)-11 b(or)45 b(Multiple)g(Arc)l(hitectures)275 2052 y Ft(Y)-8 -b(ou)28 b(can)h(compile)e(Bash)i(for)f(more)g(than)g(one)h(kind)d(of)j -(computer)f(at)h(the)g(same)f(time,)h(b)m(y)f(placing)150 -2162 y(the)39 b(ob)5 b(ject)39 b(\014les)f(for)g(eac)m(h)i(arc)m -(hitecture)f(in)e(their)h(o)m(wn)g(directory)-8 b(.)66 -b(T)-8 b(o)39 b(do)f(this,)i(y)m(ou)f(m)m(ust)f(use)h(a)150 -2271 y(v)m(ersion)32 b(of)h Fs(make)f Ft(that)i(supp)s(orts)d(the)i -Fs(VPATH)e Ft(v)-5 b(ariable,)33 b(suc)m(h)f(as)i(GNU)f +b(ou)28 b(can)h(compile)g(Bash)g(for)f(more)g(than)g(one)h(kind)e(of)i +(computer)f(at)h(the)g(same)f(time,)i(b)m(y)e(placing)150 +2162 y(the)39 b(ob)5 b(ject)39 b(\014les)g(for)f(eac)m(h)i(arc)m +(hitecture)g(in)e(their)h(o)m(wn)f(directory)-8 b(.)67 +b(T)-8 b(o)39 b(do)f(this,)j(y)m(ou)e(m)m(ust)f(use)h(a)150 +2271 y(v)m(ersion)33 b(of)g Fs(make)f Ft(that)i(supp)s(orts)d(the)i +Fs(VPATH)e Ft(v)-5 b(ariable,)35 b(suc)m(h)d(as)i(GNU)f Fs(make)p Ft(.)47 b Fs(cd)33 b Ft(to)g(the)g(directory)150 2381 y(where)23 b(y)m(ou)g(w)m(an)m(t)h(the)f(ob)5 b(ject)24 -b(\014les)e(and)g(executables)i(to)g(go)f(and)g(run)f(the)h -Fs(configure)d Ft(script)i(from)h(the)150 2491 y(source)j(directory)-8 -b(.)39 b(Y)-8 b(ou)26 b(ma)m(y)g(need)g(to)g(supply)e(the)h(`)p -Fs(--srcdir=PATH)p Ft(')e(argumen)m(t)j(to)h(tell)d Fs(configure)150 -2600 y Ft(where)43 b(the)h(source)g(\014les)f(are.)82 -b Fs(configure)41 b Ft(automatically)j(c)m(hec)m(ks)h(for)f(the)g -(source)g(co)s(de)g(in)f(the)150 2710 y(directory)30 -b(that)h Fs(configure)d Ft(is)h(in)g(and)h(in)f(`..'.)275 +b(\014les)f(and)f(executables)j(to)f(go)f(and)g(run)f(the)h +Fs(configure)d Ft(script)j(from)g(the)150 2491 y(source)j(directory)-8 +b(.)40 b(Y)-8 b(ou)26 b(ma)m(y)g(need)g(to)g(supply)f(the)g(`)p +Fs(--srcdir=PATH)p Ft(')e(argumen)m(t)j(to)h(tell)f Fs(configure)150 +2600 y Ft(where)43 b(the)h(source)g(\014les)g(are.)82 +b Fs(configure)41 b Ft(automatically)47 b(c)m(hec)m(ks)e(for)f(the)g +(source)g(co)s(de)g(in)g(the)150 2710 y(directory)31 +b(that)g Fs(configure)d Ft(is)i(in)g(and)g(in)g(`..'.)275 2861 y(If)20 b(y)m(ou)h(ha)m(v)m(e)i(to)e(use)g(a)g Fs(make)f Ft(that)i(do)s(es)e(not)i(supp)s(orts)d(the)i Fs(VPATH)e -Ft(v)-5 b(ariable,)22 b(y)m(ou)g(can)f(compile)f(Bash)150 -2971 y(for)33 b(one)h(arc)m(hitecture)g(at)g(a)g(time)f(in)f(the)i -(source)g(co)s(de)f(directory)-8 b(.)50 b(After)34 b(y)m(ou)g(ha)m(v)m -(e)h(installed)c(Bash)150 3080 y(for)f(one)h(arc)m(hitecture,)g(use)f -(`)p Fs(make)g(distclean)p Ft(')e(b)s(efore)i(recon\014guring)f(for)h +Ft(v)-5 b(ariable,)24 b(y)m(ou)e(can)f(compile)h(Bash)150 +2971 y(for)33 b(one)h(arc)m(hitecture)h(at)f(a)g(time)g(in)f(the)h +(source)g(co)s(de)f(directory)-8 b(.)51 b(After)34 b(y)m(ou)g(ha)m(v)m +(e)h(installed)f(Bash)150 3080 y(for)c(one)h(arc)m(hitecture,)h(use)e +(`)p Fs(make)g(distclean)p Ft(')e(b)s(efore)i(recon\014guring)g(for)g (another)g(arc)m(hitecture.)275 3231 y(Alternativ)m(ely)-8 -b(,)23 b(if)d(y)m(our)i(system)g(supp)s(orts)d(sym)m(b)s(olic)h(links,) -i(y)m(ou)g(can)g(use)f(the)h(`)p Fs(support/mkclone)p -Ft(')150 3341 y(script)g(to)i(create)g(a)f(build)d(tree)k(whic)m(h)e -(has)g(sym)m(b)s(olic)g(links)e(bac)m(k)k(to)g(eac)m(h)g(\014le)e(in)g -(the)h(source)g(directory)-8 b(.)150 3450 y(Here's)41 -b(an)f(example)h(that)g(creates)h(a)e(build)e(directory)i(in)f(the)i -(curren)m(t)f(directory)g(from)g(a)h(source)150 3560 -y(directory)30 b(`)p Fs(/usr/gnu/src/bash-2.0)p Ft(':)390 +b(,)26 b(if)21 b(y)m(our)h(system)g(supp)s(orts)d(sym)m(b)s(olic)j +(links,)i(y)m(ou)e(can)g(use)f(the)h(`)p Fs(support/mkclone)p +Ft(')150 3341 y(script)h(to)h(create)g(a)f(build)f(tree)i(whic)m(h)f +(has)f(sym)m(b)s(olic)i(links)e(bac)m(k)i(to)g(eac)m(h)g(\014le)f(in)g +(the)g(source)g(directory)-8 b(.)150 3450 y(Here's)41 +b(an)f(example)i(that)f(creates)h(a)e(build)g(directory)h(in)f(the)h +(curren)m(t)f(directory)h(from)f(a)h(source)150 3560 +y(directory)31 b(`)p Fs(/usr/gnu/src/bash-2.0)p Ft(':)390 3711 y Fs(bash)47 b(/usr/gnu/src/bash-2.0/s)o(uppo)o(rt/)o(mkcl)o(one) 41 b(-s)47 b(/usr/gnu/src/bash-2.0)42 b(.)150 3862 y -Ft(The)c Fs(mkclone)e Ft(script)h(requires)g(Bash,)j(so)f(y)m(ou)f(m)m -(ust)h(ha)m(v)m(e)g(already)f(built)e(Bash)i(for)g(at)h(least)g(one)150 -3972 y(arc)m(hitecture)31 b(b)s(efore)f(y)m(ou)h(can)f(create)i(build)c -(directories)h(for)h(other)h(arc)m(hitectures.)150 4271 +Ft(The)c Fs(mkclone)e Ft(script)i(requires)g(Bash,)i(so)f(y)m(ou)f(m)m +(ust)h(ha)m(v)m(e)g(already)g(built)f(Bash)g(for)g(at)h(least)h(one)150 +3972 y(arc)m(hitecture)32 b(b)s(efore)e(y)m(ou)h(can)f(create)i(build)e +(directories)h(for)f(other)h(arc)m(hitectures.)150 4271 y Fr(10.4)68 b(Installation)47 b(Names)275 4531 y Ft(By)36 -b(default,)g(`)p Fs(make)29 b(install)p Ft(')34 b(will)g(install)f(in)m -(to)j(`)p Fs(/usr/local/bin)p Ft(',)e(`)p Fs(/usr/local/man)p -Ft(',)g(etc.)150 4641 y(Y)-8 b(ou)39 b(can)g(sp)s(ecify)e(an)i -(installation)d(pre\014x)h(other)i(than)g(`)p Fs(/usr/local)p -Ft(')d(b)m(y)i(giving)g Fs(configure)e Ft(the)150 4751 -y(option)k(`)p Fs(--prefix=)p Fj(PATH)11 b Ft(',)41 b(or)g(b)m(y)f(sp)s -(ecifying)f(a)j(v)-5 b(alue)40 b(for)h(the)g Fs(DESTDIR)e -Ft(`)p Fs(make)p Ft(')h(v)-5 b(ariable)40 b(when)150 -4860 y(running)28 b(`)p Fs(make)h(install)p Ft('.)275 -5011 y(Y)-8 b(ou)71 b(can)h(sp)s(ecify)e(separate)i(installation)d -(pre\014xes)h(for)h(arc)m(hitecture-sp)s(eci\014c)g(\014les)g(and)150 -5121 y(arc)m(hitecture-indep)s(enden)m(t)36 b(\014les.)61 -b(If)37 b(y)m(ou)h(giv)m(e)f Fs(configure)e Ft(the)j(option)f(`)p -Fs(--exec-prefix=)p Fj(PATH)11 b Ft(',)150 5230 y(`)p -Fs(make)29 b(install)p Ft(')63 b(will)e(use)i Fq(P)-8 -b(A)g(TH)75 b Ft(as)64 b(the)g(pre\014x)e(for)i(installing)d(programs)i -(and)h(libraries.)150 5340 y(Do)s(cumen)m(tation)31 b(and)f(other)h -(data)g(\014les)e(will)f(still)g(use)i(the)h(regular)e(pre\014x.)p -eop +b(default,)h(`)p Fs(make)29 b(install)p Ft(')34 b(will)j(install)f(in)m +(to)h(`)p Fs(/usr/local/bin)p Ft(',)d(`)p Fs(/usr/local/man)p +Ft(',)g(etc.)150 4641 y(Y)-8 b(ou)39 b(can)g(sp)s(ecify)f(an)h +(installation)h(pre\014x)d(other)i(than)g(`)p Fs(/usr/local)p +Ft(')d(b)m(y)i(giving)i Fs(configure)c Ft(the)150 4751 +y(option)41 b(`)p Fs(--prefix=)p Fj(PATH)11 b Ft(',)41 +b(or)g(b)m(y)f(sp)s(ecifying)h(a)h(v)-5 b(alue)41 b(for)g(the)g +Fs(DESTDIR)e Ft(`)p Fs(make)p Ft(')h(v)-5 b(ariable)42 +b(when)150 4860 y(running)29 b(`)p Fs(make)g(install)p +Ft('.)275 5011 y(Y)-8 b(ou)71 b(can)h(sp)s(ecify)f(separate)h +(installation)h(pre\014xes)d(for)h(arc)m(hitecture-sp)s(eci\014c)i +(\014les)f(and)150 5121 y(arc)m(hitecture-indep)s(enden)m(t)38 +b(\014les.)62 b(If)37 b(y)m(ou)h(giv)m(e)g Fs(configure)d +Ft(the)j(option)g(`)p Fs(--exec-prefix=)p Fj(PATH)11 +b Ft(',)150 5230 y(`)p Fs(make)29 b(install)p Ft(')63 +b(will)h(use)f Fq(P)-8 b(A)g(TH)75 b Ft(as)64 b(the)g(pre\014x)e(for)i +(installing)h(programs)e(and)h(libraries.)150 5340 y(Do)s(cumen)m +(tation)32 b(and)e(other)h(data)g(\014les)f(will)h(still)g(use)f(the)h +(regular)f(pre\014x.)p eop end %%Page: 117 123 -117 122 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28 -b(Bash)2356 b(117)150 299 y Fr(10.5)68 b(Sp)t(ecifying)45 -b(the)g(System)h(T)l(yp)t(e)275 539 y Ft(There)35 b(ma)m(y)h(b)s(e)f -(some)h(features)g Fs(configure)d Ft(can)j(not)g(\014gure)f(out)g -(automatically)-8 b(,)38 b(but)d(need)g(to)150 649 y(determine)g(b)m(y) -h(the)h(t)m(yp)s(e)f(of)g(host)h(Bash)f(will)e(run)g(on.)58 -b(Usually)35 b Fs(configure)f Ft(can)i(\014gure)g(that)g(out,)150 -758 y(but)c(if)g(it)g(prin)m(ts)g(a)h(message)h(sa)m(ying)f(it)f(can)i -(not)f(guess)g(the)g(host)g(t)m(yp)s(e,)h(giv)m(e)f(it)f(the)h(`)p -Fs(--host=TYPE)p Ft(')150 868 y(option.)38 b(`)p Fs(TYPE)p -Ft(')25 b(can)g(either)f(b)s(e)h(a)g(short)g(name)g(for)g(the)g(system) +TeXDict begin 117 122 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(117)150 299 y Fr(10.5)68 +b(Sp)t(ecifying)45 b(the)g(System)h(T)l(yp)t(e)275 539 +y Ft(There)35 b(ma)m(y)h(b)s(e)f(some)h(features)g Fs(configure)d +Ft(can)j(not)g(\014gure)f(out)g(automatically)-8 b(,)41 +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 +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 -(canonical)150 977 y(name)30 b(with)f(three)i(\014elds:)39 +(canonical)150 977 y(name)30 b(with)g(three)h(\014elds:)40 b(`)p Fs(CPU-COMPANY-SYSTEM)p Ft(')26 b(\(e.g.,)32 b(`)p -Fs(i386-unknown-freebsd4.2)p Ft('\).)275 1108 y(See)e(the)h(\014le)e(`) -p Fs(support/config.sub)p Ft(')d(for)k(the)h(p)s(ossible)d(v)-5 -b(alues)29 b(of)i(eac)m(h)g(\014eld.)150 1354 y Fr(10.6)68 +Fs(i386-unknown-freebsd4.2)p Ft('\).)275 1108 y(See)e(the)h(\014le)f(`) +p Fs(support/config.sub)p Ft(')c(for)k(the)h(p)s(ossible)f(v)-5 +b(alues)30 b(of)h(eac)m(h)g(\014eld.)150 1354 y Fr(10.6)68 b(Sharing)45 b(Defaults)275 1594 y Ft(If)34 b(y)m(ou)i(w)m(an)m(t)g(to) -g(set)g(default)e(v)-5 b(alues)35 b(for)g Fs(configure)e -Ft(scripts)h(to)i(share,)g(y)m(ou)g(can)g(create)g(a)g(site)150 -1704 y(shell)46 b(script)g(called)h Fs(config.site)d -Ft(that)k(giv)m(es)g(default)f(v)-5 b(alues)47 b(for)g(v)-5 -b(ariables)46 b(lik)m(e)h Fs(CC)p Ft(,)52 b Fs(cache_)150 +g(set)g(default)f(v)-5 b(alues)36 b(for)f Fs(configure)e +Ft(scripts)i(to)h(share,)g(y)m(ou)g(can)g(create)g(a)g(site)150 +1704 y(shell)48 b(script)f(called)i Fs(config.site)44 +b Ft(that)k(giv)m(es)h(default)f(v)-5 b(alues)48 b(for)f(v)-5 +b(ariables)48 b(lik)m(e)h Fs(CC)p Ft(,)j Fs(cache_)150 1813 y(file)p Ft(,)43 b(and)e Fs(prefix)p Ft(.)73 b Fs(configure)39 -b Ft(lo)s(oks)i(for)g(`)p Fs(PREFIX/share/config.site)p -Ft(')35 b(if)41 b(it)g(exists,)j(then)150 1923 y(`)p -Fs(PREFIX/etc/config.site)p Ft(')20 b(if)25 b(it)g(exists.)39 +b Ft(lo)s(oks)j(for)f(`)p Fs(PREFIX/share/config.site)p +Ft(')35 b(if)42 b(it)g(exists,)j(then)150 1923 y(`)p +Fs(PREFIX/etc/config.site)p Ft(')20 b(if)26 b(it)g(exists.)40 b(Or,)26 b(y)m(ou)g(can)g(set)g(the)g Fs(CONFIG_SITE)c -Ft(en)m(vironmen)m(t)j(v)-5 b(ari-)150 2033 y(able)39 -b(to)h(the)g(lo)s(cation)f(of)g(the)h(site)f(script.)66 -b(A)40 b(w)m(arning:)57 b(the)40 b(Bash)g Fs(configure)c -Ft(lo)s(oks)j(for)g(a)h(site)150 2142 y(script,)30 b(but)f(not)i(all)e -Fs(configure)f Ft(scripts)h(do.)150 2388 y Fr(10.7)68 +Ft(en)m(vironmen)m(t)k(v)-5 b(ari-)150 2033 y(able)40 +b(to)g(the)g(lo)s(cation)h(of)e(the)h(site)g(script.)67 +b(A)40 b(w)m(arning:)58 b(the)40 b(Bash)g Fs(configure)c +Ft(lo)s(oks)k(for)f(a)h(site)150 2142 y(script,)31 b(but)e(not)i(all)g +Fs(configure)d Ft(scripts)i(do.)150 2388 y Fr(10.7)68 b(Op)t(eration)46 b(Con)l(trols)275 2628 y Fs(configure)27 -b Ft(recognizes)k(the)g(follo)m(wing)e(options)h(to)h(con)m(trol)f(ho)m -(w)h(it)f(op)s(erates.)150 2780 y Fs(--cache-file=)p -Fj(file)630 2890 y Ft(Use)35 b(and)g(sa)m(v)m(e)h(the)f(results)f(of)h -(the)h(tests)f(in)f Fq(\014le)39 b Ft(instead)34 b(of)i(`)p -Fs(./config.cache)p Ft('.)51 b(Set)630 2999 y Fq(\014le)35 -b Ft(to)c(`)p Fs(/dev/null)p Ft(')d(to)j(disable)e(cac)m(hing,)i(for)f -(debugging)f Fs(configure)p Ft(.)150 3151 y Fs(--help)192 -b Ft(Prin)m(t)29 b(a)i(summary)e(of)i(the)f(options)g(to)h +b Ft(recognizes)32 b(the)f(follo)m(wing)h(options)f(to)g(con)m(trol)g +(ho)m(w)g(it)g(op)s(erates.)150 2780 y Fs(--cache-file=)p +Fj(file)630 2890 y Ft(Use)k(and)g(sa)m(v)m(e)h(the)f(results)g(of)g +(the)h(tests)f(in)g Fq(\014le)40 b Ft(instead)35 b(of)h(`)p +Fs(./config.cache)p Ft('.)51 b(Set)630 2999 y Fq(\014le)36 +b Ft(to)31 b(`)p Fs(/dev/null)p Ft(')d(to)j(disable)g(cac)m(hing,)h +(for)e(debugging)g Fs(configure)p Ft(.)150 3151 y Fs(--help)192 +b Ft(Prin)m(t)30 b(a)h(summary)e(of)i(the)f(options)h(to)g Fs(configure)p Ft(,)d(and)i(exit.)150 3303 y Fs(--quiet)150 -3412 y(--silent)150 3522 y(-q)384 b Ft(Do)31 b(not)g(prin)m(t)e -(messages)i(sa)m(ying)f(whic)m(h)g(c)m(hec)m(ks)h(are)g(b)s(eing)e -(made.)150 3674 y Fs(--srcdir=)p Fj(dir)630 3783 y Ft(Lo)s(ok)j(for)g -(the)g(Bash)g(source)h(co)s(de)f(in)f(directory)g Fq(dir)p -Ft(.)44 b(Usually)31 b Fs(configure)e Ft(can)j(deter-)630 -3893 y(mine)d(that)i(directory)f(automatically)-8 b(.)150 -4045 y Fs(--version)630 4154 y Ft(Prin)m(t)28 b(the)i(v)m(ersion)f(of)h +3412 y(--silent)150 3522 y(-q)384 b Ft(Do)31 b(not)g(prin)m(t)f +(messages)h(sa)m(ying)g(whic)m(h)g(c)m(hec)m(ks)g(are)g(b)s(eing)f +(made.)150 3674 y Fs(--srcdir=)p Fj(dir)630 3783 y Ft(Lo)s(ok)i(for)g +(the)g(Bash)g(source)h(co)s(de)f(in)g(directory)g Fq(dir)p +Ft(.)45 b(Usually)33 b Fs(configure)c Ft(can)j(deter-)630 +3893 y(mine)e(that)h(directory)g(automatically)-8 b(.)150 +4045 y Fs(--version)630 4154 y Ft(Prin)m(t)29 b(the)h(v)m(ersion)g(of)g (Auto)s(conf)f(used)g(to)h(generate)h(the)f Fs(configure)d -Ft(script,)i(and)g(exit.)275 4306 y Fs(configure)34 b -Ft(also)j(accepts)h(some)g(other,)h(not)e(widely)e(used,)j(b)s -(oilerplate)d(options.)60 b(`)p Fs(configure)150 4415 -y(--help)p Ft(')29 b(prin)m(ts)g(the)h(complete)h(list.)150 +Ft(script,)j(and)f(exit.)275 4306 y Fs(configure)34 b +Ft(also)k(accepts)g(some)g(other,)h(not)e(widely)g(used,)h(b)s +(oilerplate)g(options.)61 b(`)p Fs(configure)150 4415 +y(--help)p Ft(')29 b(prin)m(ts)h(the)g(complete)i(list.)150 4661 y Fr(10.8)68 b(Optional)46 b(F)-11 b(eatures)275 4902 y Ft(The)34 b(Bash)h Fs(configure)d Ft(has)j(a)g(n)m(um)m(b)s(er)f -(of)h(`)p Fs(--enable-)p Fj(feature)11 b Ft(')30 b(options,)36 -b(where)f Fq(feature)40 b Ft(in-)150 5011 y(dicates)32 -b(an)g(optional)f(part)h(of)g(Bash.)45 b(There)32 b(are)g(also)g(sev)m -(eral)g(`)p Fs(--with-)p Fj(package)11 b Ft(')29 b(options,)i(where)150 -5121 y Fq(pac)m(k)-5 b(age)35 b Ft(is)27 b(something)h(lik)m(e)g(`)p -Fs(bash-malloc)p Ft(')d(or)j(`)p Fs(purify)p Ft('.)39 -b(T)-8 b(o)29 b(turn)e(o\013)h(the)h(default)e(use)h(of)g(a)h(pac)m(k-) +(of)h(`)p Fs(--enable-)p Fj(feature)11 b Ft(')30 b(options,)37 +b(where)e Fq(feature)40 b Ft(in-)150 5011 y(dicates)33 +b(an)f(optional)h(part)f(of)g(Bash.)45 b(There)32 b(are)g(also)h(sev)m +(eral)g(`)p Fs(--with-)p Fj(package)11 b Ft(')29 b(options,)j(where)150 +5121 y Fq(pac)m(k)-5 b(age)35 b Ft(is)28 b(something)h(lik)m(e)h(`)p +Fs(bash-malloc)p Ft(')25 b(or)j(`)p Fs(purify)p Ft('.)39 +b(T)-8 b(o)29 b(turn)e(o\013)h(the)h(default)f(use)g(of)g(a)h(pac)m(k-) 150 5230 y(age,)43 b(use)d(`)p Fs(--without-)p Fj(package)11 -b Ft('.)63 b(T)-8 b(o)40 b(con\014gure)g(Bash)f(without)g(a)h(feature)g -(that)g(is)f(enabled)f(b)m(y)150 5340 y(default,)30 b(use)g(`)p -Fs(--disable-)p Fj(feature)11 b Ft('.)p eop +b Ft('.)63 b(T)-8 b(o)40 b(con\014gure)g(Bash)f(without)h(a)g(feature)g +(that)g(is)g(enabled)f(b)m(y)150 5340 y(default,)31 b(use)f(`)p +Fs(--disable-)p Fj(feature)11 b Ft('.)p eop end %%Page: 118 124 -118 123 bop 150 -116 a Ft(118)2527 b(Bash)31 b(Reference)g(Man)m(ual) -275 299 y(Here)21 b(is)f(a)h(complete)g(list)f(of)h(the)g(`)p -Fs(--enable-)p Ft(')e(and)h(`)p Fs(--with-)p Ft(')g(options)g(that)h -(the)g(Bash)g Fs(configure)150 408 y Ft(recognizes.)150 -589 y Fs(--with-afs)630 698 y Ft(De\014ne)31 b(if)e(y)m(ou)i(are)f -(using)f(the)i(Andrew)e(File)h(System)g(from)g(T)-8 b(ransarc.)150 -872 y Fs(--with-bash-malloc)630 981 y Ft(Use)40 b(the)f(Bash)h(v)m -(ersion)f(of)g Fs(malloc)f Ft(in)g(`)p Fs(lib/malloc/malloc.c)p -Ft('.)63 b(This)38 b(is)g(not)i(the)630 1091 y(same)34 -b Fs(malloc)f Ft(that)h(app)s(ears)f(in)g Fl(gnu)h Ft(lib)s(c,)f(but)g -(an)h(older)f(v)m(ersion)g(deriv)m(ed)g(from)h(the)630 -1200 y(4.2)45 b Fl(bsd)d Fs(malloc)p Ft(.)79 b(This)41 -b Fs(malloc)h Ft(is)h(v)m(ery)h(fast,)j(but)c(w)m(astes)h(some)g(space) -g(on)g(eac)m(h)630 1310 y(allo)s(cation.)39 b(This)27 -b(option)g(is)h(enabled)f(b)m(y)h(default.)39 b(The)28 -b(`)p Fs(NOTES)p Ft(')f(\014le)h(con)m(tains)g(a)h(list)e(of)630 -1419 y(systems)e(for)h(whic)m(h)e(this)g(should)f(b)s(e)i(turned)f -(o\013,)j(and)e Fs(configure)e Ft(disables)g(this)h(option)630 -1529 y(automatically)30 b(for)g(a)h(n)m(um)m(b)s(er)e(of)i(systems.)150 -1702 y Fs(--with-curses)630 1812 y Ft(Use)h(the)h(curses)e(library)f -(instead)h(of)i(the)f(termcap)g(library)-8 b(.)44 b(This)31 -b(should)f(b)s(e)h(supplied)630 1921 y(if)e(y)m(our)i(system)f(has)g -(an)h(inadequate)f(or)g(incomplete)g(termcap)g(database.)150 +TeXDict begin 118 123 bop 150 -116 a Ft(118)2527 b(Bash)31 +b(Reference)g(Man)m(ual)275 299 y(Here)21 b(is)g(a)g(complete)h(list)g +(of)f(the)g(`)p Fs(--enable-)p Ft(')e(and)h(`)p Fs(--with-)p +Ft(')g(options)h(that)g(the)g(Bash)g Fs(configure)150 +408 y Ft(recognizes.)150 589 y Fs(--with-afs)630 698 +y Ft(De\014ne)31 b(if)f(y)m(ou)h(are)f(using)g(the)h(Andrew)e(File)j +(System)e(from)g(T)-8 b(ransarc.)150 872 y Fs(--with-bash-malloc)630 +981 y Ft(Use)40 b(the)f(Bash)h(v)m(ersion)g(of)f Fs(malloc)f +Ft(in)h(`)p Fs(lib/malloc/malloc.c)p Ft('.)63 b(This)39 +b(is)g(not)h(the)630 1091 y(same)34 b Fs(malloc)f Ft(that)h(app)s(ears) +f(in)h Fl(gnu)g Ft(lib)s(c,)h(but)e(an)h(older)g(v)m(ersion)g(deriv)m +(ed)g(from)g(the)630 1200 y(4.2)45 b Fl(bsd)d Fs(malloc)p +Ft(.)79 b(This)42 b Fs(malloc)g Ft(is)i(v)m(ery)g(fast,)j(but)c(w)m +(astes)h(some)g(space)g(on)g(eac)m(h)630 1310 y(allo)s(cation.)e(This) +28 b(option)g(is)h(enabled)f(b)m(y)g(default.)40 b(The)28 +b(`)p Fs(NOTES)p Ft(')f(\014le)i(con)m(tains)g(a)g(list)g(of)630 +1419 y(systems)c(for)h(whic)m(h)f(this)g(should)f(b)s(e)h(turned)f +(o\013,)j(and)e Fs(configure)e Ft(disables)i(this)g(option)630 +1529 y(automatically)33 b(for)d(a)h(n)m(um)m(b)s(er)e(of)i(systems.)150 +1702 y Fs(--with-curses)630 1812 y Ft(Use)h(the)h(curses)e(library)h +(instead)g(of)h(the)f(termcap)g(library)-8 b(.)46 b(This)32 +b(should)f(b)s(e)g(supplied)630 1921 y(if)f(y)m(our)h(system)f(has)g +(an)h(inadequate)g(or)f(incomplete)i(termcap)e(database.)150 2095 y Fs(--with-gnu-malloc)630 2204 y Ft(A)g(synon)m(ym)g(for)g Fs(--with-bash-malloc)p Ft(.)150 2378 y Fs(--with-installed-readlin)o (e[=)p Fj(P)o(REFI)o(X)11 b Fs(])630 2487 y Ft(De\014ne)26 -b(this)e(to)i(mak)m(e)h(Bash)f(link)d(with)h(a)i(lo)s(cally-installed)c -(v)m(ersion)j(of)h(Readline)e(rather)630 2597 y(than)38 -b(the)h(v)m(ersion)f(in)g(`)p Fs(lib/readline)p Ft('.)62 -b(This)37 b(w)m(orks)i(only)e(with)h(Readline)f(4.3)j(and)630 -2706 y(later)28 b(v)m(ersions.)39 b(If)28 b Fq(PREFIX)37 -b Ft(is)27 b Fs(yes)g Ft(or)h(not)g(supplied,)d Fs(configure)h -Ft(uses)h(the)h(v)-5 b(alues)28 b(of)630 2816 y(the)d(mak)m(e)g(v)-5 -b(ariables)23 b Fs(includedir)f Ft(and)h Fs(libdir)p -Ft(,)h(whic)m(h)g(are)g(sub)s(directories)e(of)j Fs(prefix)630 -2926 y Ft(b)m(y)32 b(default,)f(to)i(\014nd)d(the)i(installed)e(v)m -(ersion)h(of)h(Readline)f(if)g(it)g(is)g(not)h(in)f(the)h(standard)630 -3035 y(system)j(include)d(and)i(library)e(directories.)52 -b(If)34 b Fq(PREFIX)43 b Ft(is)34 b Fs(no)p Ft(,)h(Bash)f(links)f(with) -g(the)630 3145 y(v)m(ersion)k(in)f(`)p Fs(lib/readline)p -Ft('.)58 b(If)37 b Fq(PREFIX)46 b Ft(is)37 b(set)h(to)g(an)m(y)f(other) -h(v)-5 b(alue,)38 b Fs(configure)630 3254 y Ft(treats)27 -b(it)f(as)g(a)h(directory)f(pathname)g(and)f(lo)s(oks)h(for)g(the)g -(installed)e(v)m(ersion)i(of)g(Readline)630 3364 y(in)33 -b(sub)s(directories)e(of)j(that)h(directory)f(\(include)e(\014les)h(in) +b(this)f(to)h(mak)m(e)h(Bash)f(link)f(with)g(a)h(lo)s(cally-installed)i +(v)m(ersion)e(of)g(Readline)g(rather)630 2597 y(than)38 +b(the)h(v)m(ersion)g(in)g(`)p Fs(lib/readline)p Ft('.)62 +b(This)38 b(w)m(orks)h(only)f(with)h(Readline)g(4.3)h(and)630 +2706 y(later)29 b(v)m(ersions.)40 b(If)28 b Fq(PREFIX)37 +b Ft(is)28 b Fs(yes)f Ft(or)h(not)g(supplied,)f Fs(configure)f +Ft(uses)h(the)h(v)-5 b(alues)29 b(of)630 2816 y(the)c(mak)m(e)g(v)-5 +b(ariables)25 b Fs(includedir)d Ft(and)h Fs(libdir)p +Ft(,)h(whic)m(h)h(are)f(sub)s(directories)g(of)h Fs(prefix)630 +2926 y Ft(b)m(y)32 b(default,)g(to)h(\014nd)d(the)i(installed)h(v)m +(ersion)f(of)g(Readline)h(if)f(it)g(is)g(not)g(in)g(the)g(standard)630 +3035 y(system)j(include)f(and)g(library)g(directories.)54 +b(If)34 b Fq(PREFIX)43 b Ft(is)35 b Fs(no)p Ft(,)g(Bash)f(links)h(with) +f(the)630 3145 y(v)m(ersion)k(in)f(`)p Fs(lib/readline)p +Ft('.)58 b(If)37 b Fq(PREFIX)46 b Ft(is)38 b(set)g(to)g(an)m(y)f(other) +h(v)-5 b(alue,)39 b Fs(configure)630 3254 y Ft(treats)27 +b(it)g(as)f(a)h(directory)g(pathname)f(and)f(lo)s(oks)i(for)f(the)g +(installed)h(v)m(ersion)g(of)f(Readline)630 3364 y(in)34 +b(sub)s(directories)f(of)h(that)h(directory)g(\(include)f(\014les)g(in) g Fq(PREFIX)9 b Ft(/)p Fs(include)32 b Ft(and)i(the)630 -3473 y(library)28 b(in)h Fq(PREFIX)9 b Ft(/)p Fs(lib)p -Ft(\).)150 3647 y Fs(--with-purify)630 3756 y Ft(De\014ne)23 -b(this)f(to)i(use)f(the)g(Purify)e(memory)i(allo)s(cation)f(c)m(hec)m -(k)m(er)j(from)e(Rational)g(Soft)m(w)m(are.)150 3930 -y Fs(--enable-minimal-config)630 4039 y Ft(This)f(pro)s(duces)g(a)i -(shell)e(with)g(minimal)f(features,)k(close)f(to)g(the)g(historical)e -(Bourne)h(shell.)275 4219 y(There)g(are)i(sev)m(eral)f(`)p -Fs(--enable-)p Ft(')e(options)i(that)g(alter)g(ho)m(w)h(Bash)f(is)f -(compiled)g(and)g(link)m(ed,)h(rather)150 4329 y(than)30 -b(c)m(hanging)g(run-time)f(features.)150 4509 y Fs(--enable-largefile) -630 4619 y Ft(Enable)75 b(supp)s(ort)g(for)h(large)g(\014les)f(\()p +3473 y(library)c(in)g Fq(PREFIX)9 b Ft(/)p Fs(lib)p Ft(\).)150 +3647 y Fs(--with-purify)630 3756 y Ft(De\014ne)23 b(this)g(to)h(use)f +(the)g(Purify)f(memory)h(allo)s(cation)i(c)m(hec)m(k)m(er)g(from)e +(Rational)i(Soft)m(w)m(are.)150 3930 y Fs(--enable-minimal-config)630 +4039 y Ft(This)e(pro)s(duces)f(a)i(shell)g(with)f(minimal)h(features,)h +(close)g(to)f(the)g(historical)h(Bourne)e(shell.)275 +4219 y(There)g(are)i(sev)m(eral)g(`)p Fs(--enable-)p +Ft(')d(options)j(that)f(alter)h(ho)m(w)g(Bash)f(is)g(compiled)h(and)e +(link)m(ed,)j(rather)150 4329 y(than)k(c)m(hanging)h(run-time)f +(features.)150 4509 y Fs(--enable-largefile)630 4619 +y Ft(Enable)76 b(supp)s(ort)f(for)h(large)h(\014les)f(\()p Fs(http://www.sas.com/standar)o(ds/l)o(arge)o(_)630 4728 -y(file/x_open.20Mar96.html)o Ft(\))23 b(if)k(the)h(op)s(erating)g -(system)g(requires)f(sp)s(ecial)f(compiler)630 4838 y(options)44 -b(to)h(build)c(programs)j(whic)m(h)f(can)h(access)i(large)e(\014les.)81 -b(This)43 b(is)g(enabled)g(b)m(y)630 4948 y(default,)30 -b(if)f(the)i(op)s(erating)f(system)g(pro)m(vides)f(large)i(\014le)e +y(file/x_open.20Mar96.html)o Ft(\))23 b(if)28 b(the)g(op)s(erating)h +(system)f(requires)g(sp)s(ecial)g(compiler)630 4838 y(options)45 +b(to)g(build)e(programs)h(whic)m(h)g(can)g(access)i(large)f(\014les.)82 +b(This)44 b(is)g(enabled)g(b)m(y)630 4948 y(default,)31 +b(if)f(the)h(op)s(erating)g(system)f(pro)m(vides)g(large)i(\014le)e (supp)s(ort.)150 5121 y Fs(--enable-profiling)630 5230 -y Ft(This)h(builds)e(a)k(Bash)g(binary)e(that)i(pro)s(duces)e -(pro\014ling)f(information)h(to)j(b)s(e)d(pro)s(cessed)630 -5340 y(b)m(y)g Fs(gprof)f Ft(eac)m(h)j(time)e(it)g(is)f(executed.)p -eop +y Ft(This)h(builds)f(a)i(Bash)g(binary)f(that)h(pro)s(duces)e +(pro\014ling)h(information)h(to)h(b)s(e)d(pro)s(cessed)630 +5340 y(b)m(y)g Fs(gprof)f Ft(eac)m(h)j(time)f(it)g(is)f(executed.)p +eop end %%Page: 119 125 -119 124 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28 -b(Bash)2356 b(119)150 299 y Fs(--enable-static-link)630 -408 y Ft(This)36 b(causes)i(Bash)f(to)h(b)s(e)f(link)m(ed)f(statically) --8 b(,)40 b(if)c Fs(gcc)h Ft(is)f(b)s(eing)g(used.)61 -b(This)36 b(could)h(b)s(e)630 518 y(used)30 b(to)h(build)c(a)k(v)m -(ersion)f(to)h(use)f(as)g(ro)s(ot's)h(shell.)275 663 -y(The)f(`)p Fs(minimal-config)p Ft(')d(option)j(can)h(b)s(e)f(used)f -(to)j(disable)c(all)i(of)h(the)f(follo)m(wing)f(options,)i(but)e(it)150 -772 y(is)g(pro)s(cessed)h(\014rst,)g(so)h(individual)26 -b(options)j(ma)m(y)i(b)s(e)f(enabled)f(using)g(`)p Fs(enable-)p -Fj(feature)11 b Ft('.)275 899 y(All)35 b(of)i(the)f(follo)m(wing)f -(options)h(except)i(for)e(`)p Fs(disabled-builtins)p -Ft(')d(and)j(`)p Fs(xpg-echo-default)p Ft(')150 1009 -y(are)26 b(enabled)f(b)m(y)h(default,)g(unless)f(the)h(op)s(erating)f -(system)h(do)s(es)g(not)g(pro)m(vide)f(the)h(necessary)g(supp)s(ort.) -150 1154 y Fs(--enable-alias)630 1263 y Ft(Allo)m(w)39 -b(alias)g(expansion)g(and)g(include)e(the)j Fs(alias)f -Ft(and)g Fs(unalias)e Ft(builtins)g(\(see)j(Sec-)630 -1373 y(tion)30 b(6.6)h([Aliases],)g(page)g(71\).)150 -1518 y Fs(--enable-arith-for-comma)o(nd)630 1627 y Ft(Include)20 -b(supp)s(ort)h(for)g(the)i(alternate)f(form)g(of)g(the)g -Fs(for)f Ft(command)h(that)h(b)s(eha)m(v)m(es)f(lik)m(e)g(the)630 -1737 y(C)30 b(language)h Fs(for)e Ft(statemen)m(t)j(\(see)g(Section)e -(3.2.4.1)j([Lo)s(oping)c(Constructs],)i(page)g(9\).)150 -1881 y Fs(--enable-array-variables)630 1991 y Ft(Include)g(supp)s(ort)h -(for)h(one-dimensional)e(arra)m(y)i(shell)f(v)-5 b(ariables)31 -b(\(see)j(Section)f(6.7)i([Ar-)630 2101 y(ra)m(ys],)c(page)g(72\).)150 -2245 y Fs(--enable-bang-history)630 2355 y Ft(Include)k(supp)s(ort)g -(for)h Fs(csh)p Ft(-lik)m(e)f(history)h(substitution)e(\(see)j(Section) -f(9.3)i([History)e(In-)630 2464 y(teraction],)c(page)f(111\).)150 -2609 y Fs(--enable-brace-expansion)630 2719 y Ft(Include)39 -b Fs(csh)p Ft(-lik)m(e)g(brace)h(expansion)f(\()i Fs(b{a,b}c)2445 -2715 y Fp(7!)2576 2719 y Fs(bac)30 b(bbc)39 b Ft(\).)71 -b(See)40 b(Section)g(3.5.1)630 2828 y([Brace)32 b(Expansion],)d(page)i -(17,)h(for)e(a)g(complete)h(description.)150 2973 y Fs -(--enable-command-timing)630 3082 y Ft(Include)42 b(supp)s(ort)g(for)h -(recognizing)g Fs(time)g Ft(as)g(a)h(reserv)m(ed)g(w)m(ord)f(and)g(for) -h(displa)m(ying)630 3192 y(timing)35 b(statistics)h(for)g(the)g(pip)s -(eline)d(follo)m(wing)i Fs(time)g Ft(\(see)i(Section)f(3.2.2)i([Pip)s -(elines],)630 3302 y(page)24 b(8\).)39 b(This)22 b(allo)m(ws)g(pip)s -(elines)e(as)k(w)m(ell)e(as)i(shell)d(builtins)f(and)j(functions)f(to)i -(b)s(e)e(timed.)150 3446 y Fs(--enable-cond-command)630 -3556 y Ft(Include)32 b(supp)s(ort)g(for)i(the)g Fs([[)f -Ft(conditional)f(command.)51 b(\(see)34 b(Section)g(3.2.4.2)i([Condi-) -630 3665 y(tional)30 b(Constructs],)g(page)h(10\).)150 -3810 y Fs(--enable-cond-regexp)630 3920 y Ft(Include)e(supp)s(ort)g -(for)i(matc)m(hing)g(POSIX)e(regular)h(expressions)g(using)f(the)i(`)p -Fs(=~)p Ft(')g(binary)630 4029 y(op)s(erator)25 b(in)e(the)i -Fs([[)f Ft(conditional)e(command.)39 b(\(see)25 b(Section)g(3.2.4.2)i -([Conditional)22 b(Con-)630 4139 y(structs],)31 b(page)g(10\).)150 -4284 y Fs(--enable-directory-stack)630 4393 y Ft(Include)h(supp)s(ort)h -(for)h(a)g Fs(csh)p Ft(-lik)m(e)f(directory)g(stac)m(k)j(and)d(the)i +TeXDict begin 119 124 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(119)150 299 y Fs(--enable-static-link)630 +408 y Ft(This)37 b(causes)h(Bash)f(to)h(b)s(e)f(link)m(ed)h(statically) +-8 b(,)43 b(if)37 b Fs(gcc)g Ft(is)g(b)s(eing)g(used.)61 +b(This)37 b(could)h(b)s(e)630 518 y(used)30 b(to)h(build)e(a)i(v)m +(ersion)g(to)g(use)f(as)g(ro)s(ot's)h(shell.)275 663 +y(The)f(`)p Fs(minimal-config)p Ft(')d(option)k(can)g(b)s(e)f(used)f +(to)j(disable)e(all)i(of)f(the)f(follo)m(wing)i(options,)g(but)d(it)150 +772 y(is)h(pro)s(cessed)g(\014rst,)g(so)h(individual)f(options)g(ma)m +(y)h(b)s(e)f(enabled)g(using)g(`)p Fs(enable-)p Fj(feature)11 +b Ft('.)275 899 y(All)37 b(of)g(the)f(follo)m(wing)i(options)f(except)h +(for)e(`)p Fs(disabled-builtins)p Ft(')d(and)j(`)p Fs(xpg-echo-default) +p Ft(')150 1009 y(are)26 b(enabled)g(b)m(y)g(default,)h(unless)f(the)g +(op)s(erating)g(system)g(do)s(es)g(not)g(pro)m(vide)g(the)g(necessary)g +(supp)s(ort.)150 1154 y Fs(--enable-alias)630 1263 y +Ft(Allo)m(w)41 b(alias)g(expansion)f(and)f(include)g(the)h +Fs(alias)f Ft(and)g Fs(unalias)e Ft(builtins)j(\(see)g(Sec-)630 +1373 y(tion)31 b(6.6)g([Aliases],)i(page)e(71\).)150 +1518 y Fs(--enable-arith-for-comma)o(nd)630 1627 y Ft(Include)21 +b(supp)s(ort)g(for)g(the)i(alternate)g(form)f(of)g(the)g +Fs(for)f Ft(command)h(that)h(b)s(eha)m(v)m(es)f(lik)m(e)i(the)630 +1737 y(C)30 b(language)i Fs(for)d Ft(statemen)m(t)j(\(see)g(Section)f +(3.2.4.1)i([Lo)s(oping)d(Constructs],)h(page)g(9\).)150 +1881 y Fs(--enable-array-variables)630 1991 y Ft(Include)h(supp)s(ort)g +(for)h(one-dimensional)h(arra)m(y)f(shell)h(v)-5 b(ariables)33 +b(\(see)h(Section)g(6.7)h([Ar-)630 2101 y(ra)m(ys],)c(page)g(72\).)150 +2245 y Fs(--enable-bang-history)630 2355 y Ft(Include)36 +b(supp)s(ort)f(for)h Fs(csh)p Ft(-lik)m(e)h(history)g(substitution)f +(\(see)h(Section)g(9.3)h([History)f(In-)630 2464 y(teraction],)c(page)e +(111\).)150 2609 y Fs(--enable-brace-expansion)630 2719 +y Ft(Include)40 b Fs(csh)p Ft(-lik)m(e)h(brace)f(expansion)g(\()h +Fs(b{a,b}c)2445 2715 y Fp(7!)2576 2719 y Fs(bac)30 b(bbc)39 +b Ft(\).)71 b(See)40 b(Section)h(3.5.1)630 2828 y([Brace)32 +b(Expansion],)e(page)h(17,)h(for)e(a)g(complete)i(description.)150 +2973 y Fs(--enable-command-timing)630 3082 y Ft(Include)43 +b(supp)s(ort)f(for)h(recognizing)i Fs(time)e Ft(as)g(a)h(reserv)m(ed)g +(w)m(ord)f(and)g(for)h(displa)m(ying)630 3192 y(timing)37 +b(statistics)h(for)e(the)g(pip)s(eline)g(follo)m(wing)i +Fs(time)d Ft(\(see)i(Section)g(3.2.2)h([Pip)s(elines],)630 +3302 y(page)24 b(8\).)39 b(This)23 b(allo)m(ws)h(pip)s(elines)f(as)h(w) +m(ell)g(as)g(shell)f(builtins)g(and)g(functions)g(to)h(b)s(e)e(timed.) +150 3446 y Fs(--enable-cond-command)630 3556 y Ft(Include)33 +b(supp)s(ort)f(for)i(the)g Fs([[)f Ft(conditional)i(command.)51 +b(\(see)34 b(Section)h(3.2.4.2)h([Condi-)630 3665 y(tional)c +(Constructs],)e(page)h(10\).)150 3810 y Fs(--enable-cond-regexp)630 +3920 y Ft(Include)f(supp)s(ort)f(for)i(matc)m(hing)h(POSIX)d(regular)i +(expressions)g(using)f(the)h(`)p Fs(=~)p Ft(')g(binary)630 +4029 y(op)s(erator)25 b(in)f(the)h Fs([[)f Ft(conditional)h(command.)39 +b(\(see)25 b(Section)h(3.2.4.2)h([Conditional)e(Con-)630 +4139 y(structs],)31 b(page)g(10\).)150 4284 y Fs +(--enable-directory-stack)630 4393 y Ft(Include)i(supp)s(ort)g(for)h(a) +g Fs(csh)p Ft(-lik)m(e)h(directory)f(stac)m(k)i(and)d(the)i Fs(pushd)p Ft(,)f Fs(popd)p Ft(,)g(and)f Fs(dirs)630 -4503 y Ft(builtins)27 b(\(see)k(Section)f(6.8)i([The)e(Directory)h -(Stac)m(k],)h(page)f(73\).)150 4647 y Fs(--enable-disabled-builti)o(ns) -630 4757 y Ft(Allo)m(w)38 b(builtin)d(commands)j(to)h(b)s(e)f(in)m(v)m -(ok)m(ed)h(via)f(`)p Fs(builtin)29 b(xxx)p Ft(')37 b(ev)m(en)j(after)f -Fs(xxx)e Ft(has)630 4867 y(b)s(een)31 b(disabled)e(using)h(`)p -Fs(enable)e(-n)i(xxx)p Ft('.)43 b(See)32 b(Section)f(4.2)i([Bash)e -(Builtins],)f(page)i(39,)630 4976 y(for)e(details)g(of)g(the)h -Fs(builtin)d Ft(and)i Fs(enable)e Ft(builtin)f(commands.)150 -5121 y Fs(--enable-dparen-arithmet)o(ic)630 5230 y Ft(Include)41 -b(supp)s(ort)g(for)h(the)h Fs(\(\(...)o(\)\))f Ft(command)g(\(see)i -(Section)e(3.2.4.2)j([Conditional)630 5340 y(Constructs],)30 -b(page)h(10\).)p eop +4503 y Ft(builtins)d(\(see)h(Section)g(6.8)h([The)e(Directory)i(Stac)m +(k],)g(page)f(73\).)150 4647 y Fs(--enable-disabled-builti)o(ns)630 +4757 y Ft(Allo)m(w)40 b(builtin)e(commands)g(to)h(b)s(e)f(in)m(v)m(ok)m +(ed)i(via)f(`)p Fs(builtin)29 b(xxx)p Ft(')37 b(ev)m(en)j(after)f +Fs(xxx)e Ft(has)630 4867 y(b)s(een)31 b(disabled)g(using)g(`)p +Fs(enable)d(-n)i(xxx)p Ft('.)43 b(See)32 b(Section)g(4.2)h([Bash)e +(Builtins],)i(page)f(39,)630 4976 y(for)e(details)i(of)e(the)h +Fs(builtin)d Ft(and)i Fs(enable)e Ft(builtin)i(commands.)150 +5121 y Fs(--enable-dparen-arithmet)o(ic)630 5230 y Ft(Include)42 +b(supp)s(ort)f(for)h(the)h Fs(\(\(...)o(\)\))f Ft(command)g(\(see)i +(Section)f(3.2.4.2)i([Conditional)630 5340 y(Constructs],)30 +b(page)h(10\).)p eop end %%Page: 120 126 -120 125 bop 150 -116 a Ft(120)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fs(--enable-extended-glob)630 408 y Ft(Include)39 -b(supp)s(ort)f(for)i(the)h(extended)f(pattern)h(matc)m(hing)f(features) -h(describ)s(ed)d(ab)s(o)m(v)m(e)630 518 y(under)29 b(Section)h(3.5.8.1) -j([P)m(attern)e(Matc)m(hing],)h(page)f(23.)150 682 y -Fs(--enable-help-builtin)630 792 y Ft(Include)23 b(the)i -Fs(help)f Ft(builtin,)e(whic)m(h)i(displa)m(ys)e(help)i(on)g(shell)f -(builtins)e(and)k(v)-5 b(ariables)23 b(\(see)630 902 -y(Section)30 b(4.2)i([Bash)e(Builtins],)f(page)i(39\).)150 -1066 y Fs(--enable-history)630 1176 y Ft(Include)d(command)h(history)g -(and)g(the)h Fs(fc)f Ft(and)g Fs(history)e Ft(builtin)g(commands)i -(\(see)h(Sec-)630 1285 y(tion)g(9.1)h([Bash)g(History)f(F)-8 -b(acilities],)30 b(page)h(109\).)150 1450 y Fs(--enable-job-control)630 -1559 y Ft(This)d(enables)i(the)g(job)g(con)m(trol)g(features)h(\(see)g -(Chapter)f(7)g([Job)g(Con)m(trol],)g(page)h(79\),)h(if)630 -1669 y(the)f(op)s(erating)e(system)i(supp)s(orts)d(them.)150 -1833 y Fs(--enable-multibyte)630 1943 y Ft(This)g(enables)i(supp)s(ort) -e(for)i(m)m(ultib)m(yte)f(c)m(haracters)i(if)e(the)h(op)s(erating)g -(system)g(pro)m(vides)630 2052 y(the)h(necessary)f(supp)s(ort.)150 -2217 y Fs(--enable-net-redirection)o(s)630 2326 y Ft(This)20 -b(enables)h(the)h(sp)s(ecial)f(handling)e(of)j(\014lenames)f(of)h(the)g -(form)f Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630 -2436 y Ft(and)29 b Fs(/dev/udp/)p Fj(host)11 b Fs(/)p -Fj(port)34 b Ft(when)28 b(used)g(in)g(redirections)g(\(see)i(Section)f -(3.6)h([Redirec-)630 2545 y(tions],)g(page)h(24\).)150 -2710 y Fs(--enable-process-substit)o(utio)o(n)630 2819 -y Ft(This)48 b(enables)i(pro)s(cess)g(substitution)e(\(see)j(Section)f -(3.5.6)i([Pro)s(cess)e(Substitution],)630 2929 y(page)31 -b(22\))h(if)d(the)i(op)s(erating)e(system)i(pro)m(vides)e(the)i -(necessary)g(supp)s(ort.)150 3093 y Fs(--enable-prompt-string-d)o(ecod) -o(ing)630 3203 y Ft(T)-8 b(urn)46 b(on)h(the)h(in)m(terpretation)e(of)i -(a)g(n)m(um)m(b)s(er)e(of)h(bac)m(kslash-escap)s(ed)g(c)m(haracters)i -(in)630 3313 y(the)39 b Fs($PS1)p Ft(,)g Fs($PS2)p Ft(,)h -Fs($PS3)p Ft(,)f(and)f Fs($PS4)f Ft(prompt)h(strings.)63 -b(See)39 b(Section)f(6.9)i([Prin)m(ting)d(a)630 3422 -y(Prompt],)30 b(page)h(75,)h(for)e(a)h(complete)g(list)e(of)h(prompt)g -(string)f(escap)s(e)i(sequences.)150 3587 y Fs(--enable-progcomp)630 -3696 y Ft(Enable)c(the)h(programmable)f(completion)h(facilities)e -(\(see)j(Section)f(8.6)h([Programmable)630 3806 y(Completion],)g(page)j -(103\).)42 b(If)30 b(Readline)f(is)g(not)i(enabled,)e(this)h(option)g -(has)g(no)g(e\013ect.)150 3970 y Fs(--enable-readline)630 -4080 y Ft(Include)d(supp)s(ort)g(for)h(command-line)f(editing)g(and)h -(history)f(with)g(the)i(Bash)g(v)m(ersion)f(of)630 4189 -y(the)j(Readline)e(library)f(\(see)j(Chapter)f(8)g([Command)g(Line)f -(Editing],)g(page)i(83\).)150 4354 y Fs(--enable-restricted)630 -4463 y Ft(Include)40 b(supp)s(ort)g(for)i(a)g Fq(restricted)f(shell)p -Ft(.)73 b(If)42 b(this)e(is)h(enabled,)j(Bash,)h(when)c(called)630 -4573 y(as)f Fs(rbash)p Ft(,)h(en)m(ters)f(a)g(restricted)g(mo)s(de.)68 -b(See)40 b(Section)g(6.10)h([The)f(Restricted)g(Shell],)630 -4682 y(page)31 b(76,)h(for)e(a)g(description)f(of)h(restricted)g(mo)s -(de.)150 4847 y Fs(--enable-select)630 4956 y Ft(Include)k(the)h -Fs(select)f Ft(builtin,)f(whic)m(h)h(allo)m(ws)h(the)h(generation)f(of) -h(simple)d(men)m(us)i(\(see)630 5066 y(Section)30 b(3.2.4.2)j -([Conditional)28 b(Constructs],)j(page)g(10\).)150 5230 +TeXDict begin 120 125 bop 150 -116 a Ft(120)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fs(--enable-extended-glob)630 +408 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 +518 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i +(page)e(23.)150 682 y Fs(--enable-help-builtin)630 792 +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 902 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f(39\).) +150 1066 y Fs(--enable-history)630 1176 y Ft(Include)e(command)g +(history)h(and)f(the)h Fs(fc)f Ft(and)g Fs(history)e +Ft(builtin)j(commands)f(\(see)h(Sec-)630 1285 y(tion)h(9.1)g([Bash)g +(History)g(F)-8 b(acilities],)34 b(page)d(109\).)150 +1450 y Fs(--enable-job-control)630 1559 y Ft(This)e(enables)i(the)f +(job)g(con)m(trol)h(features)g(\(see)g(Chapter)f(7)g([Job)g(Con)m +(trol],)h(page)g(79\),)h(if)630 1669 y(the)f(op)s(erating)f(system)h +(supp)s(orts)d(them.)150 1833 y Fs(--enable-multibyte)630 +1943 y Ft(This)h(enables)i(supp)s(ort)d(for)i(m)m(ultib)m(yte)h(c)m +(haracters)g(if)f(the)g(op)s(erating)h(system)f(pro)m(vides)630 +2052 y(the)h(necessary)f(supp)s(ort.)150 2217 y Fs +(--enable-net-redirection)o(s)630 2326 y Ft(This)21 b(enables)h(the)g +(sp)s(ecial)h(handling)e(of)h(\014lenames)g(of)g(the)g(form)f +Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630 2436 y +Ft(and)29 b Fs(/dev/udp/)p Fj(host)11 b Fs(/)p Fj(port)34 +b Ft(when)28 b(used)g(in)h(redirections)h(\(see)g(Section)g(3.6)g +([Redirec-)630 2545 y(tions],)h(page)g(24\).)150 2710 +y Fs(--enable-process-substit)o(utio)o(n)630 2819 y Ft(This)49 +b(enables)i(pro)s(cess)f(substitution)g(\(see)h(Section)g(3.5.6)h([Pro) +s(cess)e(Substitution],)630 2929 y(page)31 b(22\))h(if)e(the)h(op)s +(erating)f(system)h(pro)m(vides)f(the)h(necessary)g(supp)s(ort.)150 +3093 y Fs(--enable-prompt-string-d)o(ecod)o(ing)630 3203 +y Ft(T)-8 b(urn)46 b(on)h(the)h(in)m(terpretation)g(of)g(a)g(n)m(um)m +(b)s(er)e(of)h(bac)m(kslash-escap)s(ed)h(c)m(haracters)h(in)630 +3313 y(the)39 b Fs($PS1)p Ft(,)g Fs($PS2)p Ft(,)h Fs($PS3)p +Ft(,)f(and)f Fs($PS4)f Ft(prompt)h(strings.)64 b(See)39 +b(Section)g(6.9)h([Prin)m(ting)f(a)630 3422 y(Prompt],)30 +b(page)h(75,)h(for)e(a)h(complete)h(list)f(of)f(prompt)g(string)g +(escap)s(e)h(sequences.)150 3587 y Fs(--enable-progcomp)630 +3696 y Ft(Enable)d(the)g(programmable)g(completion)i(facilities)g +(\(see)f(Section)g(8.6)g([Programmable)630 3806 y(Completion],)i(page)h +(103\).)42 b(If)30 b(Readline)h(is)f(not)h(enabled,)f(this)h(option)g +(has)f(no)g(e\013ect.)150 3970 y Fs(--enable-readline)630 +4080 y Ft(Include)e(supp)s(ort)f(for)h(command-line)h(editing)g(and)f +(history)g(with)g(the)h(Bash)g(v)m(ersion)g(of)630 4189 +y(the)i(Readline)g(library)f(\(see)h(Chapter)f(8)g([Command)g(Line)g +(Editing],)h(page)g(83\).)150 4354 y Fs(--enable-restricted)630 +4463 y Ft(Include)41 b(supp)s(ort)f(for)i(a)g Fq(restricted)g(shell)p +Ft(.)75 b(If)42 b(this)f(is)h(enabled,)j(Bash,)g(when)c(called)630 +4573 y(as)f Fs(rbash)p Ft(,)h(en)m(ters)f(a)g(restricted)h(mo)s(de.)68 +b(See)40 b(Section)h(6.10)g([The)f(Restricted)h(Shell],)630 +4682 y(page)31 b(76,)h(for)e(a)g(description)h(of)f(restricted)h(mo)s +(de.)150 4847 y Fs(--enable-select)630 4956 y Ft(Include)k(the)g +Fs(select)f Ft(builtin,)i(whic)m(h)f(allo)m(ws)i(the)f(generation)g(of) +g(simple)f(men)m(us)g(\(see)630 5066 y(Section)c(3.2.4.2)i +([Conditional)e(Constructs],)g(page)g(10\).)150 5230 y Fs(--enable-usg-echo-defaul)o(t)630 5340 y Ft(A)f(synon)m(ym)g(for)g -Fs(--enable-xpg-echo-default)p Ft(.)p eop +Fs(--enable-xpg-echo-default)p Ft(.)p eop end %%Page: 121 127 -121 126 bop 150 -116 a Ft(Chapter)30 b(10:)41 b(Installing)28 -b(Bash)2356 b(121)150 299 y Fs(--enable-xpg-echo-defaul)o(t)630 -408 y Ft(Mak)m(e)26 b(the)f Fs(echo)e Ft(builtin)f(expand)i(bac)m -(kslash-escap)s(ed)g(c)m(haracters)i(b)m(y)f(default,)g(without)630 -518 y(requiring)39 b(the)i(`)p Fs(-e)p Ft(')g(option.)72 -b(This)40 b(sets)h(the)g(default)g(v)-5 b(alue)40 b(of)i(the)f -Fs(xpg_echo)e Ft(shell)630 628 y(option)25 b(to)h Fs(on)p -Ft(,)g(whic)m(h)f(mak)m(es)h(the)g(Bash)g Fs(echo)e Ft(b)s(eha)m(v)m(e) -i(more)g(lik)m(e)f(the)h(v)m(ersion)f(sp)s(eci\014ed)630 -737 y(in)40 b(the)i(Single)e(Unix)g(Sp)s(eci\014cation,)j(v)m(ersion)f -(2.)74 b(See)42 b(Section)f(4.2)i([Bash)f(Builtins],)630 -847 y(page)31 b(39,)h(for)e(a)g(description)f(of)h(the)h(escap)s(e)g -(sequences)f(that)h Fs(echo)f Ft(recognizes.)275 1006 -y(The)23 b(\014le)h(`)p Fs(config-top.h)p Ft(')d(con)m(tains)k(C)f -(Prepro)s(cessor)g(`)p Fs(#define)p Ft(')e(statemen)m(ts)k(for)f -(options)e(whic)m(h)150 1116 y(are)35 b(not)g(settable)h(from)e +TeXDict begin 121 126 bop 150 -116 a Ft(Chapter)30 b(10:)41 +b(Installing)31 b(Bash)2356 b(121)150 299 y Fs +(--enable-xpg-echo-defaul)o(t)630 408 y Ft(Mak)m(e)26 +b(the)f Fs(echo)e Ft(builtin)i(expand)f(bac)m(kslash-escap)s(ed)h(c)m +(haracters)h(b)m(y)f(default,)h(without)630 518 y(requiring)41 +b(the)g(`)p Fs(-e)p Ft(')g(option.)73 b(This)41 b(sets)g(the)g(default) +h(v)-5 b(alue)41 b(of)h(the)f Fs(xpg_echo)e Ft(shell)630 +628 y(option)26 b(to)g Fs(on)p Ft(,)g(whic)m(h)g(mak)m(es)g(the)g(Bash) +g Fs(echo)e Ft(b)s(eha)m(v)m(e)i(more)g(lik)m(e)h(the)f(v)m(ersion)g +(sp)s(eci\014ed)630 737 y(in)41 b(the)h(Single)g(Unix)f(Sp)s +(eci\014cation,)k(v)m(ersion)e(2.)74 b(See)42 b(Section)g(4.2)h([Bash)f +(Builtins],)630 847 y(page)31 b(39,)h(for)e(a)g(description)h(of)f(the) +h(escap)s(e)g(sequences)f(that)h Fs(echo)f Ft(recognizes.)275 +1006 y(The)23 b(\014le)i(`)p Fs(config-top.h)p Ft(')c(con)m(tains)26 +b(C)e(Prepro)s(cessor)g(`)p Fs(#define)p Ft(')e(statemen)m(ts)k(for)f +(options)f(whic)m(h)150 1116 y(are)35 b(not)g(settable)i(from)d Fs(configure)p Ft(.)51 b(Some)35 b(of)g(these)g(are)h(not)f(mean)m(t)g (to)h(b)s(e)e(c)m(hanged;)k(b)s(ew)m(are)d(of)150 1225 -y(the)h(consequences)g(if)e(y)m(ou)i(do.)55 b(Read)36 -b(the)g(commen)m(ts)g(asso)s(ciated)g(with)e(eac)m(h)j(de\014nition)c -(for)i(more)150 1335 y(information)29 b(ab)s(out)h(its)g(e\013ect.)p -eop +y(the)h(consequences)g(if)f(y)m(ou)h(do.)55 b(Read)36 +b(the)g(commen)m(ts)g(asso)s(ciated)h(with)e(eac)m(h)i(de\014nition)e +(for)g(more)150 1335 y(information)c(ab)s(out)f(its)h(e\013ect.)p +eop end %%Page: 122 128 -122 127 bop 150 -116 a Ft(122)2527 b(Bash)31 b(Reference)g(Man)m(ual)p -eop +TeXDict begin 122 127 bop 150 -116 a Ft(122)2527 b(Bash)31 +b(Reference)g(Man)m(ual)p eop end %%Page: 123 129 -123 128 bop 150 -116 a Ft(App)s(endix)28 b(A:)i(Rep)s(orting)g(Bugs) -2299 b(123)150 299 y Fo(App)t(endix)53 b(A)121 b(Rep)t(orting)53 -b(Bugs)275 533 y Ft(Please)34 b(rep)s(ort)f(all)g(bugs)h(y)m(ou)g -(\014nd)f(in)g(Bash.)52 b(But)34 b(\014rst,)h(y)m(ou)f(should)e(mak)m -(e)j(sure)f(that)g(it)g(really)150 643 y(is)h(a)h(bug,)h(and)e(that)h -(it)g(app)s(ears)f(in)f(the)i(latest)h(v)m(ersion)e(of)h(Bash.)57 -b(The)35 b(latest)i(v)m(ersion)e(of)h(Bash)g(is)150 752 -y(alw)m(a)m(ys)31 b(a)m(v)-5 b(ailable)30 b(for)g(FTP)g(from)g -Fs(ftp://ftp.gnu.org/pub/ba)o(sh/)o Ft(.)275 887 y(Once)41 -b(y)m(ou)g(ha)m(v)m(e)h(determined)e(that)i(a)f(bug)g(actually)f -(exists,)k(use)d(the)g Fs(bashbug)e Ft(command)i(to)150 -996 y(submit)24 b(a)i(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)f(that)h(as)g -(w)m(ell!)38 b(Suggestions)150 1106 y(and)20 b(`philosophical')f(bug)h -(rep)s(orts)g(ma)m(y)i(b)s(e)f(mailed)e(to)j 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)g(bug)g(rep)s(orts)h(should)e -(include:)225 1484 y Fp(\017)60 b Ft(The)30 b(v)m(ersion)g(n)m(um)m(b)s -(er)f(of)h(Bash.)225 1619 y Fp(\017)60 b Ft(The)30 b(hardw)m(are)g(and) -g(op)s(erating)f(system.)225 1753 y Fp(\017)60 b Ft(The)30 -b(compiler)f(used)g(to)i(compile)f(Bash.)225 1888 y Fp(\017)60 -b Ft(A)30 b(description)f(of)h(the)h(bug)f(b)s(eha)m(viour.)225 -2022 y Fp(\017)60 b Ft(A)30 b(short)h(script)e(or)h(`recip)s(e')g(whic) -m(h)f(exercises)i(the)f(bug)g(and)g(ma)m(y)h(b)s(e)f(used)f(to)i(repro) -s(duce)e(it.)150 2182 y Fs(bashbug)d Ft(inserts)h(the)i(\014rst)f -(three)g(items)g(automatically)g(in)m(to)h(the)f(template)h(it)f(pro)m -(vides)f(for)h(\014ling)f(a)150 2291 y(bug)j(rep)s(ort.)275 -2426 y(Please)g(send)g(all)f(rep)s(orts)h(concerning)f(this)h(man)m -(ual)f(to)i Fs(chet@po.CWRU.Edu)p Ft(.)p eop +TeXDict begin 123 128 bop 150 -116 a Ft(App)s(endix)29 +b(A:)h(Rep)s(orting)h(Bugs)2299 b(123)150 299 y Fo(App)t(endix)52 +b(A)121 b(Rep)t(orting)52 b(Bugs)275 533 y Ft(Please)35 +b(rep)s(ort)e(all)i(bugs)f(y)m(ou)g(\014nd)f(in)h(Bash.)52 +b(But)34 b(\014rst,)h(y)m(ou)f(should)f(mak)m(e)i(sure)f(that)g(it)h +(really)150 643 y(is)h(a)g(bug,)h(and)e(that)h(it)h(app)s(ears)e(in)g +(the)h(latest)i(v)m(ersion)e(of)g(Bash.)57 b(The)35 b(latest)j(v)m +(ersion)e(of)g(Bash)g(is)150 752 y(alw)m(a)m(ys)c(a)m(v)-5 +b(ailable)33 b(for)d(FTP)g(from)g Fs(ftp://ftp.gnu.org/pub/ba)o(sh/)o +Ft(.)275 887 y(Once)41 b(y)m(ou)g(ha)m(v)m(e)h(determined)f(that)h(a)f +(bug)g(actually)h(exists,)j(use)c(the)g Fs(bashbug)e +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 +(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 +(Bash.)225 1619 y Fp(\017)60 b Ft(The)30 b(hardw)m(are)g(and)g(op)s +(erating)g(system.)225 1753 y Fp(\017)60 b Ft(The)30 +b(compiler)h(used)e(to)i(compile)h(Bash.)225 1888 y Fp(\017)60 +b Ft(A)30 b(description)h(of)f(the)h(bug)f(b)s(eha)m(viour.)225 +2022 y Fp(\017)60 b Ft(A)30 b(short)h(script)f(or)g(`recip)s(e')h(whic) +m(h)f(exercises)i(the)e(bug)g(and)g(ma)m(y)h(b)s(e)f(used)f(to)i(repro) +s(duce)e(it.)150 2182 y Fs(bashbug)d Ft(inserts)i(the)h(\014rst)f +(three)g(items)h(automatically)i(in)m(to)f(the)e(template)i(it)f(pro)m +(vides)f(for)g(\014ling)h(a)150 2291 y(bug)h(rep)s(ort.)275 +2426 y(Please)h(send)f(all)h(rep)s(orts)f(concerning)g(this)h(man)m +(ual)f(to)h Fs(chet@po.CWRU.Edu)p Ft(.)p eop end %%Page: 124 130 -124 129 bop 150 -116 a Ft(124)2527 b(Bash)31 b(Reference)g(Man)m(ual)p -eop +TeXDict begin 124 129 bop 150 -116 a Ft(124)2527 b(Bash)31 +b(Reference)g(Man)m(ual)p eop end %%Page: 125 131 -125 130 bop 150 -116 a Ft(App)s(endix)28 b(B:)j(Ma)5 -b(jor)31 b(Di\013erences)f(F)-8 b(rom)31 b(The)f(Bourne)g(Shell)1256 -b(125)150 141 y Fo(App)t(endix)53 b(B)128 b(Ma)9 b(jor)54 -b(Di\013erences)e(F)-13 b(rom)53 b(The)g(Bourne)1135 -299 y(Shell)275 524 y Ft(Bash)25 b(implemen)m(ts)e(essen)m(tially)h -(the)i(same)f(grammar,)i(parameter)e(and)g(v)-5 b(ariable)24 -b(expansion,)h(redi-)150 633 y(rection,)j(and)e(quoting)g(as)h(the)h -(Bourne)e(Shell.)38 b(Bash)27 b(uses)f(the)h Fl(posix)f -Ft(1003.2)k(standard)c(as)h(the)g(sp)s(ec-)150 743 y(i\014cation)k(of)g -(ho)m(w)h(these)g(features)g(are)g(to)g(b)s(e)f(implemen)m(ted.)43 -b(There)31 b(are)h(some)g(di\013erences)f(b)s(et)m(w)m(een)150 -853 y(the)h(traditional)e(Bourne)h(shell)e(and)i(Bash;)i(this)d -(section)i(quic)m(kly)e(details)h(the)g(di\013erences)g(of)h(signif-) -150 962 y(icance.)51 b(A)34 b(n)m(um)m(b)s(er)e(of)i(these)h -(di\013erences)e(are)h(explained)e(in)g(greater)j(depth)e(in)f -(previous)h(sections.)150 1072 y(This)c(section)h(uses)g(the)h(v)m -(ersion)e(of)i Fs(sh)f Ft(included)d(in)i(SVR4.2)j(as)e(the)h(baseline) -e(reference.)225 1204 y Fp(\017)60 b Ft(Bash)32 b(is)g -Fl(posix)p Ft(-conforman)m(t,)h(ev)m(en)g(where)f(the)g -Fl(posix)g Ft(sp)s(eci\014cation)f(di\013ers)g(from)h(traditional)330 -1314 y Fs(sh)e Ft(b)s(eha)m(vior)f(\(see)j(Section)e(6.11)i([Bash)e -(POSIX)g(Mo)s(de],)h(page)g(76\).)225 1447 y Fp(\017)60 -b Ft(Bash)26 b(has)g(m)m(ulti-c)m(haracter)g(in)m(v)m(o)s(cation)g -(options)g(\(see)g(Section)g(6.1)h([In)m(v)m(oking)f(Bash],)i(page)e -(63\).)225 1579 y Fp(\017)60 b Ft(Bash)28 b(has)g(command-line)f -(editing)f(\(see)j(Chapter)f(8)g([Command)f(Line)g(Editing],)h(page)g -(83\))i(and)330 1689 y(the)h Fs(bind)e Ft(builtin.)225 -1822 y Fp(\017)60 b Ft(Bash)46 b(pro)m(vides)f(a)h(programmable)f(w)m -(ord)g(completion)g(mec)m(hanism)g(\(see)i(Section)f(8.6)h([Pro-)330 -1931 y(grammable)20 b(Completion],)h(page)g(103\),)k(and)19 -b(t)m(w)m(o)j(builtin)17 b(commands,)22 b Fs(complete)c -Ft(and)i Fs(compgen)p Ft(,)330 2041 y(to)31 b(manipulate)e(it.)225 -2173 y Fp(\017)60 b Ft(Bash)26 b(has)f(command)h(history)e(\(see)j -(Section)e(9.1)i([Bash)f(History)g(F)-8 b(acilities],)26 -b(page)g(109\))i(and)d(the)330 2283 y Fs(history)k Ft(and)h -Fs(fc)g Ft(builtins)d(to)k(manipulate)e(it.)41 b(The)30 -b(Bash)h(history)f(list)f(main)m(tains)g(timestamp)330 -2393 y(information)g(and)g(uses)h(the)h(v)-5 b(alue)30 -b(of)g(the)h Fs(HISTTIMEFORMAT)26 b Ft(v)-5 b(ariable)30 -b(to)h(displa)m(y)d(it.)225 2525 y Fp(\017)60 b Ft(Bash)48 -b(implemen)m(ts)f Fs(csh)p Ft(-lik)m(e)g(history)g(expansion)g(\(see)i -(Section)f(9.3)i([History)e(In)m(teraction],)330 2635 +TeXDict begin 125 130 bop 150 -116 a Ft(App)s(endix)29 +b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 +b(The)f(Bourne)g(Shell)1258 b(125)150 141 y Fo(App)t(endix)52 +b(B)128 b(Ma)9 b(jor)54 b(Di\013erences)d(F)-13 b(rom)54 +b(The)f(Bourne)1135 299 y(Shell)275 524 y Ft(Bash)25 +b(implemen)m(ts)g(essen)m(tially)i(the)f(same)f(grammar,)i(parameter)e +(and)g(v)-5 b(ariable)26 b(expansion,)g(redi-)150 633 +y(rection,)j(and)d(quoting)h(as)g(the)h(Bourne)e(Shell.)40 +b(Bash)27 b(uses)f(the)h Fl(posix)f Ft(1003.2)k(standard)c(as)h(the)g +(sp)s(ec-)150 743 y(i\014cation)33 b(of)e(ho)m(w)h(these)g(features)g +(are)g(to)g(b)s(e)f(implemen)m(ted.)45 b(There)31 b(are)h(some)g +(di\013erences)g(b)s(et)m(w)m(een)150 853 y(the)g(traditional)h(Bourne) +e(shell)g(and)g(Bash;)i(this)e(section)i(quic)m(kly)f(details)h(the)e +(di\013erences)h(of)g(signif-)150 962 y(icance.)52 b(A)34 +b(n)m(um)m(b)s(er)e(of)i(these)h(di\013erences)f(are)g(explained)g(in)f +(greater)i(depth)e(in)g(previous)h(sections.)150 1072 +y(This)c(section)h(uses)f(the)h(v)m(ersion)f(of)h Fs(sh)f +Ft(included)f(in)h(SVR4.2)i(as)e(the)h(baseline)g(reference.)225 +1204 y Fp(\017)60 b Ft(Bash)32 b(is)h Fl(posix)p Ft(-conforman)m(t,)g +(ev)m(en)g(where)f(the)g Fl(posix)g Ft(sp)s(eci\014cation)h(di\013ers)f +(from)g(traditional)330 1314 y Fs(sh)e Ft(b)s(eha)m(vior)g(\(see)i +(Section)f(6.11)h([Bash)e(POSIX)g(Mo)s(de],)h(page)g(76\).)225 +1447 y Fp(\017)60 b Ft(Bash)26 b(has)g(m)m(ulti-c)m(haracter)i(in)m(v)m +(o)s(cation)g(options)f(\(see)f(Section)h(6.1)g([In)m(v)m(oking)g +(Bash],)h(page)e(63\).)225 1579 y Fp(\017)60 b Ft(Bash)28 +b(has)g(command-line)h(editing)f(\(see)h(Chapter)f(8)g([Command)f(Line) +h(Editing],)i(page)e(83\))i(and)330 1689 y(the)h Fs(bind)e +Ft(builtin.)225 1822 y Fp(\017)60 b Ft(Bash)46 b(pro)m(vides)g(a)g +(programmable)g(w)m(ord)f(completion)i(mec)m(hanism)f(\(see)h(Section)g +(8.6)g([Pro-)330 1931 y(grammable)21 b(Completion],)i(page)e(103\),)k +(and)19 b(t)m(w)m(o)j(builtin)e(commands,)i Fs(complete)c +Ft(and)i Fs(compgen)p Ft(,)330 2041 y(to)31 b(manipulate)g(it.)225 +2173 y Fp(\017)60 b Ft(Bash)26 b(has)f(command)h(history)f(\(see)i +(Section)f(9.1)h([Bash)f(History)h(F)-8 b(acilities],)30 +b(page)c(109\))i(and)d(the)330 2283 y Fs(history)k Ft(and)h +Fs(fc)g Ft(builtins)g(to)h(manipulate)g(it.)42 b(The)30 +b(Bash)h(history)g(list)g(main)m(tains)g(timestamp)330 +2393 y(information)g(and)e(uses)h(the)h(v)-5 b(alue)31 +b(of)f(the)h Fs(HISTTIMEFORMAT)26 b Ft(v)-5 b(ariable)32 +b(to)f(displa)m(y)f(it.)225 2525 y Fp(\017)60 b Ft(Bash)48 +b(implemen)m(ts)h Fs(csh)p Ft(-lik)m(e)g(history)f(expansion)g(\(see)h +(Section)g(9.3)h([History)f(In)m(teraction],)330 2635 y(page)31 b(111\).)225 2768 y Fp(\017)60 b Ft(Bash)33 -b(has)g(one-dimensional)e(arra)m(y)i(v)-5 b(ariables)32 -b(\(see)i(Section)f(6.7)h([Arra)m(ys],)g(page)g(72\),)h(and)e(the)330 -2877 y(appropriate)38 b(v)-5 b(ariable)38 b(expansions)g(and)h -(assignmen)m(t)g(syn)m(tax)h(to)g(use)f(them.)67 b(Sev)m(eral)39 -b(of)h(the)330 2987 y(Bash)32 b(builtins)c(tak)m(e)34 -b(options)d(to)i(act)g(on)e(arra)m(ys.)46 b(Bash)32 b(pro)m(vides)f(a)h -(n)m(um)m(b)s(er)f(of)h(built-in)c(arra)m(y)330 3096 -y(v)-5 b(ariables.)225 3229 y Fp(\017)60 b Ft(The)37 -b Fs($'...)n(')g Ft(quoting)f(syn)m(tax,)k(whic)m(h)c(expands)g(ANSI-C) -h(bac)m(kslash-escap)s(ed)g(c)m(haracters)h(in)330 3339 -y(the)26 b(text)h(b)s(et)m(w)m(een)g(the)g(single)d(quotes,)k(is)d -(supp)s(orted)g(\(see)i(Section)f(3.1.2.4)i([ANSI-C)e(Quoting],)330 -3448 y(page)31 b(6\).)225 3581 y Fp(\017)60 b Ft(Bash)69 -b(supp)s(orts)e(the)i Fs($"...)n(")g Ft(quoting)f(syn)m(tax)h(to)h(do)e -(lo)s(cale-sp)s(eci\014c)g(translation)g(of)330 3690 -y(the)d(c)m(haracters)i(b)s(et)m(w)m(een)f(the)f(double)f(quotes.)145 -b(The)65 b(`)p Fs(-D)p Ft(',)74 b(`)p Fs(--dump-strings)p -Ft(',)d(and)330 3800 y(`)p Fs(--dump-po-strings)p Ft(')27 -b(in)m(v)m(o)s(cation)k(options)f(list)g(the)h(translatable)f(strings)g -(found)g(in)g(a)h(script)330 3910 y(\(see)g(Section)g(3.1.2.5)h([Lo)s -(cale)f(T)-8 b(ranslation],)30 b(page)h(7\).)225 4042 -y Fp(\017)60 b Ft(Bash)44 b(implemen)m(ts)e(the)h Fs(!)h -Ft(k)m(eyw)m(ord)g(to)g(negate)h(the)f(return)e(v)-5 -b(alue)43 b(of)h(a)g(pip)s(eline)c(\(see)k(Sec-)330 4152 -y(tion)32 b(3.2.2)j([Pip)s(elines],)c(page)j(8\).)49 -b(V)-8 b(ery)33 b(useful)e(when)h(an)h Fs(if)f Ft(statemen)m(t)j(needs) -d(to)i(act)g(only)e(if)330 4261 y(a)f(test)g(fails.)225 +b(has)g(one-dimensional)h(arra)m(y)f(v)-5 b(ariables)34 +b(\(see)g(Section)g(6.7)g([Arra)m(ys],)g(page)g(72\),)h(and)e(the)330 +2877 y(appropriate)39 b(v)-5 b(ariable)40 b(expansions)f(and)g +(assignmen)m(t)h(syn)m(tax)g(to)g(use)f(them.)67 b(Sev)m(eral)40 +b(of)g(the)330 2987 y(Bash)32 b(builtins)f(tak)m(e)j(options)e(to)h +(act)g(on)e(arra)m(ys.)46 b(Bash)32 b(pro)m(vides)g(a)g(n)m(um)m(b)s +(er)f(of)h(built-in)f(arra)m(y)330 3096 y(v)-5 b(ariables.)225 +3229 y Fp(\017)60 b Ft(The)37 b Fs($'...)n(')g Ft(quoting)g(syn)m(tax,) +j(whic)m(h)d(expands)f(ANSI-C)h(bac)m(kslash-escap)s(ed)h(c)m +(haracters)g(in)330 3339 y(the)26 b(text)h(b)s(et)m(w)m(een)g(the)g +(single)f(quotes,)i(is)e(supp)s(orted)f(\(see)i(Section)g(3.1.2.4)h +([ANSI-C)e(Quoting],)330 3448 y(page)31 b(6\).)225 3581 +y Fp(\017)60 b Ft(Bash)69 b(supp)s(orts)e(the)i Fs($"...)n(")g +Ft(quoting)g(syn)m(tax)g(to)h(do)e(lo)s(cale-sp)s(eci\014c)j +(translation)f(of)330 3690 y(the)65 b(c)m(haracters)i(b)s(et)m(w)m(een) +f(the)f(double)g(quotes.)145 b(The)65 b(`)p Fs(-D)p Ft(',)74 +b(`)p Fs(--dump-strings)p Ft(',)d(and)330 3800 y(`)p +Fs(--dump-po-strings)p Ft(')27 b(in)m(v)m(o)s(cation)33 +b(options)e(list)h(the)f(translatable)h(strings)f(found)f(in)h(a)g +(script)330 3910 y(\(see)g(Section)h(3.1.2.5)g([Lo)s(cale)g(T)-8 +b(ranslation],)32 b(page)f(7\).)225 4042 y Fp(\017)60 +b Ft(Bash)44 b(implemen)m(ts)g(the)f Fs(!)h Ft(k)m(eyw)m(ord)g(to)g +(negate)h(the)f(return)e(v)-5 b(alue)44 b(of)g(a)g(pip)s(eline)f(\(see) +h(Sec-)330 4152 y(tion)33 b(3.2.2)i([Pip)s(elines],)f(page)g(8\).)49 +b(V)-8 b(ery)33 b(useful)f(when)g(an)h Fs(if)f Ft(statemen)m(t)j(needs) +d(to)i(act)g(only)f(if)330 4261 y(a)e(test)g(fails.)225 4394 y Fp(\017)60 b Ft(Bash)34 b(has)g(the)g Fs(time)f -Ft(reserv)m(ed)h(w)m(ord)g(and)f(command)h(timing)f(\(see)i(Section)f -(3.2.2)h([Pip)s(elines],)330 4504 y(page)g(8\).)52 b(The)33 -b(displa)m(y)g(of)h(the)g(timing)e(statistics)i(ma)m(y)h(b)s(e)e(con)m -(trolled)h(with)f(the)h Fs(TIMEFORMAT)330 4613 y Ft(v)-5 -b(ariable.)225 4746 y Fp(\017)60 b Ft(Bash)23 b(implemen)m(ts)e(the)j +Ft(reserv)m(ed)h(w)m(ord)g(and)f(command)h(timing)h(\(see)g(Section)g +(3.2.2)g([Pip)s(elines],)330 4504 y(page)g(8\).)52 b(The)33 +b(displa)m(y)i(of)f(the)g(timing)g(statistics)i(ma)m(y)f(b)s(e)e(con)m +(trolled)j(with)e(the)g Fs(TIMEFORMAT)330 4613 y Ft(v)-5 +b(ariable.)225 4746 y Fp(\017)60 b Ft(Bash)23 b(implemen)m(ts)g(the)h Fs(for)29 b(\(\()h Fj(expr1)39 b Fs(;)30 b Fj(expr2)40 -b Fs(;)30 b Fj(expr3)39 b Fs(\)\))23 b Ft(arithmetic)f(for)g(command,)j -(sim-)330 4855 y(ilar)k(to)i(the)g(C)f(language)g(\(see)i(Section)e -(3.2.4.1)j([Lo)s(oping)c(Constructs],)i(page)g(9\).)225 -4988 y Fp(\017)60 b Ft(Bash)31 b(includes)d(the)i Fs(select)f -Ft(comp)s(ound)g(command,)i(whic)m(h)e(allo)m(ws)h(the)h(generation)f -(of)h(simple)330 5098 y(men)m(us)f(\(see)h(Section)f(3.2.4.2)j -([Conditional)28 b(Constructs],)j(page)g(10\).)225 5230 -y Fp(\017)60 b Ft(Bash)26 b(includes)e(the)j Fs([[)f -Ft(comp)s(ound)f(command,)i(whic)m(h)e(mak)m(es)i(conditional)e -(testing)h(part)g(of)h(the)330 5340 y(shell)i(grammar)h(\(see)h -(Section)f(3.2.4.2)j([Conditional)c(Constructs],)h(page)h(10\).)p -eop +b Fs(;)30 b Fj(expr3)39 b Fs(\)\))23 b Ft(arithmetic)h(for)e(command,)j +(sim-)330 4855 y(ilar)31 b(to)g(the)g(C)f(language)h(\(see)h(Section)f +(3.2.4.1)i([Lo)s(oping)d(Constructs],)h(page)g(9\).)225 +4988 y Fp(\017)60 b Ft(Bash)31 b(includes)f(the)g Fs(select)f +Ft(comp)s(ound)g(command,)i(whic)m(h)f(allo)m(ws)i(the)f(generation)g +(of)g(simple)330 5098 y(men)m(us)f(\(see)h(Section)g(3.2.4.2)i +([Conditional)e(Constructs],)g(page)g(10\).)225 5230 +y Fp(\017)60 b Ft(Bash)26 b(includes)g(the)h Fs([[)f +Ft(comp)s(ound)f(command,)i(whic)m(h)f(mak)m(es)h(conditional)h +(testing)f(part)f(of)h(the)330 5340 y(shell)k(grammar)f(\(see)h +(Section)g(3.2.4.2)i([Conditional)f(Constructs],)e(page)h(10\).)p +eop end %%Page: 126 132 -126 131 bop 150 -116 a Ft(126)2527 b(Bash)31 b(Reference)g(Man)m(ual) -225 299 y Fp(\017)60 b Ft(Bash)27 b(includes)e(brace)j(expansion)e -(\(see)i(Section)f(3.5.1)j([Brace)e(Expansion],)f(page)h(17\))h(and)d -(tilde)330 408 y(expansion)j(\(see)j(Section)e(3.5.2)i([Tilde)d -(Expansion],)g(page)i(18\).)225 537 y Fp(\017)60 b Ft(Bash)24 -b(implemen)m(ts)f(command)g(aliases)h(and)f(the)i Fs(alias)d -Ft(and)i Fs(unalias)e Ft(builtins)e(\(see)25 b(Section)f(6.6)330 -647 y([Aliases],)30 b(page)h(71\).)225 776 y Fp(\017)60 -b Ft(Bash)32 b(pro)m(vides)f(shell)f(arithmetic,)i(the)g -Fs(\(\()g Ft(comp)s(ound)e(command)i(\(see)h(Section)e(3.2.4.2)k([Con-) -330 886 y(ditional)29 b(Constructs],)h(page)i(10\),)g(and)e(arithmetic) -g(expansion)f(\(see)j(Section)e(6.5)i([Shell)d(Arith-)330 -995 y(metic],)i(page)g(70\).)225 1124 y Fp(\017)60 b -Ft(V)-8 b(ariables)29 b(presen)m(t)g(in)f(the)h(shell's)f(initial)e(en) -m(vironmen)m(t)j(are)h(automatically)f(exp)s(orted)g(to)h(c)m(hild)330 -1234 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)e(do)s(es)i(not)g -(normally)e(do)i(this)f(unless)g(the)h(v)-5 b(ariables)22 -b(are)h(explicitly)330 1343 y(mark)m(ed)30 b(using)f(the)i +TeXDict begin 126 131 bop 150 -116 a Ft(126)2527 b(Bash)31 +b(Reference)g(Man)m(ual)225 299 y Fp(\017)60 b Ft(Bash)27 +b(includes)g(brace)h(expansion)f(\(see)h(Section)g(3.5.1)i([Brace)e +(Expansion],)g(page)g(17\))h(and)d(tilde)330 408 y(expansion)k(\(see)i +(Section)f(3.5.2)h([Tilde)f(Expansion],)f(page)h(18\).)225 +537 y Fp(\017)60 b Ft(Bash)24 b(implemen)m(ts)h(command)e(aliases)j +(and)d(the)i Fs(alias)d Ft(and)i Fs(unalias)e Ft(builtins)h(\(see)i +(Section)g(6.6)330 647 y([Aliases],)32 b(page)f(71\).)225 +776 y Fp(\017)60 b Ft(Bash)32 b(pro)m(vides)g(shell)g(arithmetic,)i +(the)e Fs(\(\()g Ft(comp)s(ound)e(command)i(\(see)h(Section)f(3.2.4.2)j +([Con-)330 886 y(ditional)d(Constructs],)e(page)i(10\),)g(and)e +(arithmetic)i(expansion)e(\(see)i(Section)f(6.5)h([Shell)f(Arith-)330 +995 y(metic],)h(page)f(70\).)225 1124 y Fp(\017)60 b +Ft(V)-8 b(ariables)31 b(presen)m(t)e(in)g(the)g(shell's)h(initial)g(en) +m(vironmen)m(t)g(are)g(automatically)i(exp)s(orted)d(to)h(c)m(hild)330 +1234 y(pro)s(cesses.)38 b(The)23 b(Bourne)g(shell)g(do)s(es)g(not)g +(normally)g(do)g(this)g(unless)g(the)g(v)-5 b(ariables)24 +b(are)f(explicitly)330 1343 y(mark)m(ed)30 b(using)g(the)h Fs(export)e Ft(command.)225 1472 y Fp(\017)60 b Ft(Bash)36 -b(includes)e(the)i Fl(posix)f Ft(pattern)h(remo)m(v)-5 -b(al)36 b(`)p Fs(\045)p Ft(',)i(`)p Fs(#)p Ft(',)g(`)p -Fs(\045\045)p Ft(')e(and)f(`)p Fs(##)p Ft(')h(expansions)f(to)h(remo)m -(v)m(e)330 1582 y(leading)d(or)h(trailing)e(substrings)g(from)h(v)-5 -b(ariable)33 b(v)-5 b(alues)34 b(\(see)h(Section)f(3.5.3)h([Shell)e(P)m -(arameter)330 1691 y(Expansion],)c(page)i(18\).)225 1820 -y Fp(\017)60 b Ft(The)46 b(expansion)f Fs(${#xx})p Ft(,)k(whic)m(h)c -(returns)g(the)i(length)e(of)i Fs(${xx})p Ft(,)i(is)d(supp)s(orted)e -(\(see)j(Sec-)330 1930 y(tion)30 b(3.5.3)i([Shell)d(P)m(arameter)i -(Expansion],)e(page)j(18\).)225 2059 y Fp(\017)60 b Ft(The)30 -b(expansion)f Fs(${var:)p Fq(o\013set)r Fs([:)p Fq(length)p -Fs(]})p Ft(,)g(whic)m(h)g(expands)h(to)h(the)g(substring)d(of)j -Fs(var)p Ft('s)e(v)-5 b(alue)330 2168 y(of)43 b(length)f -Fq(length)p Ft(,)k(b)s(eginning)40 b(at)k Fq(o\013set)p -Ft(,)j(is)42 b(presen)m(t)h(\(see)g(Section)g(3.5.3)i([Shell)c(P)m -(arameter)330 2278 y(Expansion],)29 b(page)i(18\).)225 -2407 y Fp(\017)60 b Ft(The)21 b(expansion)e Fs(${var/[/])p +b(includes)g(the)g Fl(posix)f Ft(pattern)h(remo)m(v)-5 +b(al)37 b(`)p Fs(\045)p Ft(',)h(`)p Fs(#)p Ft(',)g(`)p +Fs(\045\045)p Ft(')e(and)f(`)p Fs(##)p Ft(')h(expansions)g(to)g(remo)m +(v)m(e)330 1582 y(leading)f(or)f(trailing)h(substrings)e(from)g(v)-5 +b(ariable)35 b(v)-5 b(alues)35 b(\(see)g(Section)g(3.5.3)g([Shell)g(P)m +(arameter)330 1691 y(Expansion],)30 b(page)h(18\).)225 +1820 y Fp(\017)60 b Ft(The)46 b(expansion)g Fs(${#xx})p +Ft(,)j(whic)m(h)d(returns)f(the)i(length)f(of)h Fs(${xx})p +Ft(,)i(is)e(supp)s(orted)d(\(see)j(Sec-)330 1930 y(tion)31 +b(3.5.3)h([Shell)f(P)m(arameter)g(Expansion],)f(page)i(18\).)225 +2059 y Fp(\017)60 b Ft(The)30 b(expansion)g Fs(${var:)p +Fq(o\013set)r Fs([:)p Fq(length)p Fs(]})p Ft(,)g(whic)m(h)g(expands)g +(to)h(the)g(substring)e(of)i Fs(var)p Ft('s)e(v)-5 b(alue)330 +2168 y(of)43 b(length)g Fq(length)p Ft(,)k(b)s(eginning)42 +b(at)i Fq(o\013set)p Ft(,)j(is)c(presen)m(t)g(\(see)g(Section)h(3.5.3)h +([Shell)e(P)m(arameter)330 2278 y(Expansion],)30 b(page)h(18\).)225 +2407 y Fp(\017)60 b Ft(The)21 b(expansion)f Fs(${var/[/])p Fq(pattern)p Fs([/)p Fq(replacemen)m(t)r Fs(]})p Ft(,)i(whic)m(h)e -(matc)m(hes)k Fq(pattern)e Ft(and)f(replaces)330 2516 -y(it)28 b(with)e Fq(replacemen)m(t)31 b Ft(in)c(the)h(v)-5 -b(alue)28 b(of)g Fs(var)p Ft(,)g(is)f(a)m(v)-5 b(ailable)28 -b(\(see)h(Section)e(3.5.3)j([Shell)d(P)m(arameter)330 -2626 y(Expansion],)i(page)i(18\).)225 2755 y Fp(\017)60 -b Ft(The)32 b(expansion)f Fs(${!)p Fj(prefix)p Fs(})p -Fj(*)40 b Ft(expansion,)31 b(whic)m(h)g(expands)h(to)h(the)f(names)g -(of)h(all)e(shell)f(v)-5 b(ari-)330 2865 y(ables)35 b(whose)h(names)g -(b)s(egin)f(with)g Fq(pre\014x)p Ft(,)h(is)f(a)m(v)-5 -b(ailable)36 b(\(see)h(Section)f(3.5.3)h([Shell)e(P)m(arameter)330 -2974 y(Expansion],)29 b(page)i(18\).)225 3103 y Fp(\017)60 -b Ft(Bash)22 b(has)f Fq(indirect)h Ft(v)-5 b(ariable)20 -b(expansion)h(using)f Fs(${!word})f Ft(\(see)k(Section)e(3.5.3)j -([Shell)c(P)m(arameter)330 3213 y(Expansion],)29 b(page)i(18\).)225 -3342 y Fp(\017)60 b Ft(Bash)31 b(can)f(expand)g(p)s(ositional)e -(parameters)j(b)s(ey)m(ond)e Fs($9)h Ft(using)f Fs(${)p +(matc)m(hes)j Fq(pattern)e Ft(and)f(replaces)330 2516 +y(it)29 b(with)e Fq(replacemen)m(t)32 b Ft(in)c(the)g(v)-5 +b(alue)29 b(of)f Fs(var)p Ft(,)g(is)g(a)m(v)-5 b(ailable)31 +b(\(see)e(Section)f(3.5.3)i([Shell)f(P)m(arameter)330 +2626 y(Expansion],)h(page)h(18\).)225 2755 y Fp(\017)60 +b Ft(The)32 b(expansion)g Fs(${!)p Fj(prefix)p Fs(})p +Fj(*)40 b Ft(expansion,)32 b(whic)m(h)g(expands)g(to)h(the)f(names)g +(of)h(all)g(shell)f(v)-5 b(ari-)330 2865 y(ables)36 b(whose)g(names)g +(b)s(egin)g(with)g Fq(pre\014x)p Ft(,)g(is)g(a)m(v)-5 +b(ailable)39 b(\(see)e(Section)g(3.5.3)g([Shell)g(P)m(arameter)330 +2974 y(Expansion],)30 b(page)h(18\).)225 3103 y Fp(\017)60 +b Ft(Bash)22 b(has)f Fq(indirect)j Ft(v)-5 b(ariable)22 +b(expansion)g(using)f Fs(${!word})e Ft(\(see)k(Section)f(3.5.3)i +([Shell)e(P)m(arameter)330 3213 y(Expansion],)30 b(page)h(18\).)225 +3342 y Fp(\017)60 b Ft(Bash)31 b(can)f(expand)g(p)s(ositional)h +(parameters)g(b)s(ey)m(ond)e Fs($9)h Ft(using)g Fs(${)p Fj(num)11 b Fs(})p Ft(.)225 3471 y Fp(\017)60 b Ft(The)27 -b Fl(posix)g Fs($\(\))g Ft(form)g(of)h(command)g(substitution)d(is)i -(implemen)m(ted)f(\(see)j(Section)e(3.5.4)j([Com-)330 -3580 y(mand)38 b(Substitution],)i(page)g(21\),)j(and)38 -b(preferred)g(to)i(the)g(Bourne)f(shell's)f Fs(``)g Ft(\(whic)m(h)h(is) -f(also)330 3690 y(implemen)m(ted)29 b(for)h(bac)m(kw)m(ards)h +b Fl(posix)g Fs($\(\))g Ft(form)g(of)h(command)g(substitution)f(is)h +(implemen)m(ted)g(\(see)h(Section)f(3.5.4)i([Com-)330 +3580 y(mand)38 b(Substitution],)k(page)e(21\),)j(and)38 +b(preferred)g(to)i(the)g(Bourne)f(shell's)h Fs(``)e Ft(\(whic)m(h)i(is) +f(also)330 3690 y(implemen)m(ted)31 b(for)f(bac)m(kw)m(ards)h (compatibilit)m(y\).)225 3819 y Fp(\017)60 b Ft(Bash)31 -b(has)f(pro)s(cess)g(substitution)e(\(see)j(Section)f(3.5.6)i([Pro)s -(cess)f(Substitution],)d(page)j(22\).)225 3948 y Fp(\017)60 -b Ft(Bash)55 b(automatically)g(assigns)g(v)-5 b(ariables)53 -b(that)j(pro)m(vide)e(information)g(ab)s(out)h(the)g(curren)m(t)330 +b(has)f(pro)s(cess)g(substitution)g(\(see)h(Section)g(3.5.6)h([Pro)s +(cess)f(Substitution],)f(page)h(22\).)225 3948 y Fp(\017)60 +b Ft(Bash)55 b(automatically)j(assigns)e(v)-5 b(ariables)55 +b(that)h(pro)m(vide)f(information)h(ab)s(out)f(the)g(curren)m(t)330 4057 y(user)40 b(\()p Fs(UID)p Ft(,)i Fs(EUID)p Ft(,)g(and)e Fs(GROUPS)p Ft(\),)h(the)g(curren)m(t)f(host)g(\()p Fs(HOSTTYPE)p Ft(,)h Fs(OSTYPE)p Ft(,)h Fs(MACHTYPE)p Ft(,)f(and)330 -4167 y Fs(HOSTNAME)p Ft(\),)55 b(and)c(the)g(instance)g(of)h(Bash)f -(that)h(is)e(running)f(\()p Fs(BASH)p Ft(,)56 b Fs(BASH_VERSION)p +4167 y Fs(HOSTNAME)p Ft(\),)55 b(and)c(the)g(instance)h(of)g(Bash)f +(that)h(is)f(running)f(\()p Fs(BASH)p Ft(,)56 b Fs(BASH_VERSION)p Ft(,)e(and)330 4276 y Fs(BASH_VERSINFO)p Ft(\).)37 b(See)31 -b(Section)f(5.2)i([Bash)e(V)-8 b(ariables],)31 b(page)g(55,)g(for)f +b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 b(page)e(55,)g(for)f (details.)225 4405 y Fp(\017)60 b Ft(The)44 b Fs(IFS)f -Ft(v)-5 b(ariable)43 b(is)g(used)g(to)i(split)d(only)h(the)h(results)f -(of)i(expansion,)h(not)e(all)f(w)m(ords)h(\(see)330 4515 -y(Section)28 b(3.5.7)i([W)-8 b(ord)29 b(Splitting],)e(page)i(22\).)41 -b(This)27 b(closes)h(a)h(longstanding)e(shell)f(securit)m(y)i(hole.)225 -4644 y Fp(\017)60 b Ft(Bash)33 b(implemen)m(ts)f(the)h(full)e(set)j(of) -f Fl(posix)f Ft(1003.2)k(\014lename)c(expansion)g(op)s(erators,)i +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 4515 +y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f(22\).)41 +b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h(hole.)225 +4644 y Fp(\017)60 b Ft(Bash)33 b(implemen)m(ts)h(the)f(full)g(set)h(of) +f Fl(posix)f Ft(1003.2)k(\014lename)d(expansion)g(op)s(erators,)h (including)330 4753 y Fq(c)m(haracter)23 b(classes)p -Ft(,)g Fq(equiv)-5 b(alence)21 b(classes)p Ft(,)i(and)e -Fq(collating)f(sym)m(b)s(ols)k Ft(\(see)e(Section)f(3.5.8)i([Filename) -330 4863 y(Expansion],)29 b(page)i(22\).)225 4992 y Fp(\017)60 -b Ft(Bash)35 b(implemen)m(ts)e(extended)i(pattern)g(matc)m(hing)g -(features)g(when)f(the)h Fs(extglob)d Ft(shell)h(option)330 -5101 y(is)c(enabled)h(\(see)h(Section)f(3.5.8.1)j([P)m(attern)f(Matc)m -(hing],)f(page)g(23\).)225 5230 y Fp(\017)60 b Ft(It)22 -b(is)f(p)s(ossible)f(to)j(ha)m(v)m(e)g(a)f(v)-5 b(ariable)21 -b(and)h(a)g(function)f(with)g(the)h(same)g(name;)j Fs(sh)d -Ft(do)s(es)g(not)g(separate)330 5340 y(the)31 b(t)m(w)m(o)g(name)g -(spaces.)p eop +Ft(,)h Fq(equiv)-5 b(alence)23 b(classes)p Ft(,)h(and)d +Fq(collating)i(sym)m(b)s(ols)i Ft(\(see)d(Section)g(3.5.8)h([Filename) +330 4863 y(Expansion],)30 b(page)h(22\).)225 4992 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 +5101 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 5230 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 5340 y(the)31 +b(t)m(w)m(o)g(name)g(spaces.)p eop end %%Page: 127 133 -127 132 bop 150 -116 a Ft(App)s(endix)28 b(B:)j(Ma)5 -b(jor)31 b(Di\013erences)f(F)-8 b(rom)31 b(The)f(Bourne)g(Shell)1256 -b(127)225 299 y Fp(\017)60 b Ft(Bash)30 b(functions)d(are)j(p)s -(ermitted)e(to)i(ha)m(v)m(e)h(lo)s(cal)e(v)-5 b(ariables)28 -b(using)g(the)h Fs(local)f Ft(builtin,)f(and)h(th)m(us)330 -408 y(useful)h(recursiv)m(e)g(functions)g(ma)m(y)i(b)s(e)f(written)f -(\(see)j(Section)e(4.2)h([Bash)g(Builtins],)d(page)k(39\).)225 -537 y Fp(\017)60 b Ft(V)-8 b(ariable)23 b(assignmen)m(ts)h(preceding)e -(commands)i(a\013ect)h(only)e(that)h(command,)h(ev)m(en)f(builtins)d -(and)330 647 y(functions)35 b(\(see)i(Section)f(3.7.4)i([En)m(vironmen) -m(t],)g(page)f(30\).)60 b(In)35 b Fs(sh)p Ft(,)j(all)d(v)-5 -b(ariable)35 b(assignmen)m(ts)330 757 y(preceding)29 -b(commands)h(are)h(global)f(unless)e(the)j(command)f(is)g(executed)h -(from)f(the)g(\014le)g(system.)225 886 y Fp(\017)60 b -Ft(Bash)44 b(p)s(erforms)e(\014lename)h(expansion)f(on)i(\014lenames)f -(sp)s(eci\014ed)f(as)i(op)s(erands)e(to)j(input)d(and)330 -995 y(output)30 b(redirection)f(op)s(erators)i(\(see)g(Section)f(3.6)i -([Redirections],)e(page)h(24\).)225 1124 y Fp(\017)60 -b Ft(Bash)29 b(con)m(tains)g(the)g(`)p Fs(<>)p Ft(')f(redirection)g(op) -s(erator,)h(allo)m(wing)f(a)h(\014le)f(to)h(b)s(e)f(op)s(ened)g(for)h -(b)s(oth)f(read-)330 1234 y(ing)34 b(and)g(writing,)g(and)g(the)h(`)p -Fs(&>)p Ft(')g(redirection)e(op)s(erator,)j(for)f(directing)e(standard) -h(output)h(and)330 1343 y(standard)30 b(error)g(to)h(the)f(same)h -(\014le)e(\(see)j(Section)e(3.6)h([Redirections],)f(page)i(24\).)225 -1472 y Fp(\017)60 b Ft(Bash)25 b(treats)h(a)f(n)m(um)m(b)s(er)e(of)i -(\014lenames)f(sp)s(ecially)e(when)i(they)h(are)g(used)f(in)f -(redirection)h(op)s(erators)330 1582 y(\(see)31 b(Section)g(3.6)g -([Redirections],)f(page)h(24\).)225 1711 y Fp(\017)60 -b Ft(Bash)33 b(can)f(op)s(en)g(net)m(w)m(ork)i(connections)e(to)i -(arbitrary)d(mac)m(hines)h(and)g(services)g(with)f(the)i(redi-)330 -1820 y(rection)d(op)s(erators)h(\(see)g(Section)f(3.6)i -([Redirections],)e(page)h(24\).)225 1949 y Fp(\017)60 -b Ft(The)29 b Fs(noclobber)e Ft(option)i(is)g(a)m(v)-5 -b(ailable)29 b(to)h(a)m(v)m(oid)g(o)m(v)m(erwriting)f(existing)g -(\014les)f(with)h(output)g(redi-)330 2059 y(rection)g(\(see)i(Section)e -(4.3)h([The)g(Set)f(Builtin],)f(page)i(50\).)41 b(The)29 -b(`)p Fs(>|)p Ft(')h(redirection)e(op)s(erator)h(ma)m(y)330 -2168 y(b)s(e)h(used)f(to)i(o)m(v)m(erride)g Fs(noclobber)p +TeXDict begin 127 132 bop 150 -116 a Ft(App)s(endix)29 +b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 +b(The)f(Bourne)g(Shell)1258 b(127)225 299 y Fp(\017)60 +b Ft(Bash)30 b(functions)e(are)i(p)s(ermitted)f(to)h(ha)m(v)m(e)h(lo)s +(cal)g(v)-5 b(ariables)30 b(using)f(the)g Fs(local)f +Ft(builtin,)i(and)e(th)m(us)330 408 y(useful)i(recursiv)m(e)g +(functions)g(ma)m(y)h(b)s(e)f(written)g(\(see)i(Section)f(4.2)g([Bash)g +(Builtins],)g(page)h(39\).)225 537 y Fp(\017)60 b Ft(V)-8 +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 647 +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 +b(assignmen)m(ts)330 757 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 886 y Fp(\017)60 b Ft(Bash)44 b(p)s(erforms)e(\014lename)i +(expansion)f(on)h(\014lenames)g(sp)s(eci\014ed)f(as)h(op)s(erands)e(to) +j(input)e(and)330 995 y(output)30 b(redirection)h(op)s(erators)g(\(see) +g(Section)g(3.6)h([Redirections],)g(page)f(24\).)225 +1124 y Fp(\017)60 b Ft(Bash)29 b(con)m(tains)h(the)f(`)p +Fs(<>)p Ft(')f(redirection)i(op)s(erator,)f(allo)m(wing)i(a)e(\014le)g +(to)g(b)s(e)f(op)s(ened)g(for)h(b)s(oth)f(read-)330 1234 +y(ing)35 b(and)f(writing,)i(and)e(the)h(`)p Fs(&>)p Ft(')g(redirection) +g(op)s(erator,)h(for)f(directing)g(standard)f(output)h(and)330 +1343 y(standard)30 b(error)g(to)h(the)f(same)h(\014le)f(\(see)i +(Section)f(3.6)g([Redirections],)h(page)g(24\).)225 1472 +y Fp(\017)60 b Ft(Bash)25 b(treats)h(a)f(n)m(um)m(b)s(er)e(of)i +(\014lenames)g(sp)s(ecially)g(when)f(they)h(are)g(used)f(in)g +(redirection)i(op)s(erators)330 1582 y(\(see)31 b(Section)h(3.6)f +([Redirections],)h(page)f(24\).)225 1711 y Fp(\017)60 +b Ft(Bash)33 b(can)f(op)s(en)g(net)m(w)m(ork)i(connections)f(to)h +(arbitrary)e(mac)m(hines)h(and)f(services)h(with)f(the)h(redi-)330 +1820 y(rection)e(op)s(erators)g(\(see)g(Section)g(3.6)h +([Redirections],)g(page)f(24\).)225 1949 y Fp(\017)60 +b Ft(The)29 b Fs(noclobber)e Ft(option)j(is)g(a)m(v)-5 +b(ailable)32 b(to)e(a)m(v)m(oid)h(o)m(v)m(erwriting)g(existing)g +(\014les)e(with)h(output)f(redi-)330 2059 y(rection)h(\(see)h(Section)f +(4.3)g([The)g(Set)f(Builtin],)i(page)f(50\).)41 b(The)29 +b(`)p Fs(>|)p Ft(')h(redirection)g(op)s(erator)f(ma)m(y)330 +2168 y(b)s(e)h(used)f(to)i(o)m(v)m(erride)h Fs(noclobber)p Ft(.)225 2297 y Fp(\017)60 b Ft(The)34 b(Bash)g Fs(cd)g -Ft(and)f Fs(pwd)g Ft(builtins)e(\(see)k(Section)f(4.1)h([Bourne)g -(Shell)d(Builtins],)g(page)j(33\))h(eac)m(h)330 2407 -y(tak)m(e)c(`)p Fs(-L)p Ft(')e(and)g(`)p Fs(-P)p Ft(')g(options)g(to)h -(switc)m(h)f(b)s(et)m(w)m(een)h(logical)f(and)f(ph)m(ysical)g(mo)s -(des.)225 2536 y Fp(\017)60 b Ft(Bash)25 b(allo)m(ws)f(a)i(function)d -(to)j(o)m(v)m(erride)f(a)h(builtin)21 b(with)j(the)h(same)g(name,)i -(and)d(pro)m(vides)g(access)i(to)330 2645 y(that)34 b(builtin's)c -(functionalit)m(y)h(within)g(the)i(function)f(via)h(the)g +Ft(and)f Fs(pwd)g Ft(builtins)h(\(see)h(Section)g(4.1)g([Bourne)g +(Shell)f(Builtins],)h(page)g(33\))h(eac)m(h)330 2407 +y(tak)m(e)c(`)p Fs(-L)p Ft(')e(and)g(`)p Fs(-P)p Ft(')g(options)h(to)g +(switc)m(h)g(b)s(et)m(w)m(een)g(logical)i(and)c(ph)m(ysical)i(mo)s +(des.)225 2536 y Fp(\017)60 b Ft(Bash)25 b(allo)m(ws)h(a)g(function)e +(to)i(o)m(v)m(erride)g(a)g(builtin)e(with)h(the)g(same)g(name,)i(and)d +(pro)m(vides)h(access)h(to)330 2645 y(that)34 b(builtin's)f +(functionalit)m(y)h(within)f(the)g(function)g(via)h(the)f Fs(builtin)f Ft(and)g Fs(command)g Ft(builtins)330 2755 -y(\(see)f(Section)g(4.2)g([Bash)g(Builtins],)d(page)j(39\).)225 -2884 y Fp(\017)60 b Ft(The)35 b Fs(command)e Ft(builtin)f(allo)m(ws)j -(selectiv)m(e)h(disabling)d(of)i(functions)f(when)h(command)g(lo)s -(okup)f(is)330 2993 y(p)s(erformed)29 b(\(see)i(Section)f(4.2)i([Bash)f -(Builtins],)d(page)j(39\).)225 3122 y Fp(\017)60 b Ft(Individual)20 -b(builtins)g(ma)m(y)25 b(b)s(e)e(enabled)g(or)h(disabled)e(using)g(the) -i Fs(enable)f Ft(builtin)d(\(see)25 b(Section)f(4.2)330 -3232 y([Bash)31 b(Builtins],)d(page)j(39\).)225 3361 -y Fp(\017)60 b Ft(The)26 b(Bash)h Fs(exec)e Ft(builtin)e(tak)m(es)28 -b(additional)c(options)i(that)h(allo)m(w)f(users)f(to)j(con)m(trol)f -(the)f(con)m(ten)m(ts)330 3471 y(of)35 b(the)f(en)m(vironmen)m(t)g -(passed)g(to)h(the)g(executed)g(command,)h(and)d(what)i(the)f(zeroth)h -(argumen)m(t)330 3580 y(to)c(the)g(command)f(is)f(to)i(b)s(e)f(\(see)h -(Section)g(4.1)g([Bourne)f(Shell)f(Builtins],)f(page)j(33\).)225 -3709 y Fp(\017)60 b Ft(Shell)27 b(functions)h(ma)m(y)i(b)s(e)f(exp)s -(orted)g(to)h(c)m(hildren)d(via)i(the)h(en)m(vironmen)m(t)f(using)f -Fs(export)g(-f)h Ft(\(see)330 3819 y(Section)h(3.3)i([Shell)c(F)-8 -b(unctions],)31 b(page)g(13\).)225 3948 y Fp(\017)60 +y(\(see)f(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(39\).)225 +2884 y Fp(\017)60 b Ft(The)35 b Fs(command)e Ft(builtin)i(allo)m(ws)i +(selectiv)m(e)h(disabling)e(of)f(functions)g(when)g(command)g(lo)s +(okup)g(is)330 2993 y(p)s(erformed)29 b(\(see)i(Section)g(4.2)h([Bash)f +(Builtins],)g(page)g(39\).)225 3122 y Fp(\017)60 b Ft(Individual)23 +b(builtins)g(ma)m(y)i(b)s(e)e(enabled)h(or)g(disabled)g(using)f(the)h +Fs(enable)f Ft(builtin)g(\(see)i(Section)g(4.2)330 3232 +y([Bash)31 b(Builtins],)g(page)g(39\).)225 3361 y Fp(\017)60 +b Ft(The)26 b(Bash)h Fs(exec)e Ft(builtin)h(tak)m(es)i(additional)f +(options)g(that)g(allo)m(w)h(users)d(to)j(con)m(trol)g(the)e(con)m(ten) +m(ts)330 3471 y(of)35 b(the)f(en)m(vironmen)m(t)h(passed)f(to)h(the)g +(executed)g(command,)h(and)d(what)i(the)f(zeroth)h(argumen)m(t)330 +3580 y(to)c(the)g(command)f(is)g(to)h(b)s(e)f(\(see)h(Section)h(4.1)f +([Bourne)f(Shell)h(Builtins],)g(page)g(33\).)225 3709 +y Fp(\017)60 b Ft(Shell)29 b(functions)g(ma)m(y)h(b)s(e)f(exp)s(orted)g +(to)h(c)m(hildren)f(via)h(the)g(en)m(vironmen)m(t)g(using)f +Fs(export)f(-f)h Ft(\(see)330 3819 y(Section)i(3.3)h([Shell)e(F)-8 +b(unctions],)32 b(page)f(13\).)225 3948 y Fp(\017)60 b Ft(The)37 b(Bash)g Fs(export)p Ft(,)h Fs(readonly)p -Ft(,)f(and)f Fs(declare)g Ft(builtins)e(can)j(tak)m(e)i(a)f(`)p -Fs(-f)p Ft(')f(option)g(to)h(act)g(on)330 4057 y(shell)24 -b(functions,)h(a)i(`)p Fs(-p)p Ft(')e(option)g(to)i(displa)m(y)d(v)-5 -b(ariables)24 b(with)h(v)-5 b(arious)24 b(attributes)i(set)g(in)e(a)j -(format)330 4167 y(that)g(can)f(b)s(e)f(used)h(as)g(shell)e(input,)i(a) -g(`)p Fs(-n)p Ft(')g(option)f(to)i(remo)m(v)m(e)h(v)-5 -b(arious)25 b(v)-5 b(ariable)25 b(attributes,)i(and)330 -4276 y(`)p Fs(name=value)p Ft(')h(argumen)m(ts)j(to)g(set)g(v)-5 -b(ariable)29 b(attributes)h(and)g(v)-5 b(alues)29 b(sim)m(ultaneously) +Ft(,)f(and)f Fs(declare)g Ft(builtins)h(can)g(tak)m(e)i(a)f(`)p +Fs(-f)p Ft(')f(option)h(to)g(act)g(on)330 4057 y(shell)26 +b(functions,)g(a)h(`)p Fs(-p)p Ft(')e(option)h(to)h(displa)m(y)f(v)-5 +b(ariables)26 b(with)g(v)-5 b(arious)25 b(attributes)i(set)f(in)f(a)i +(format)330 4167 y(that)g(can)f(b)s(e)f(used)h(as)g(shell)g(input,)h(a) +f(`)p Fs(-n)p Ft(')g(option)g(to)h(remo)m(v)m(e)h(v)-5 +b(arious)26 b(v)-5 b(ariable)27 b(attributes,)h(and)330 +4276 y(`)p Fs(name=value)p Ft(')g(argumen)m(ts)j(to)g(set)g(v)-5 +b(ariable)31 b(attributes)g(and)f(v)-5 b(alues)30 b(sim)m(ultaneously) -8 b(.)225 4405 y Fp(\017)60 b Ft(The)42 b(Bash)h Fs(hash)f -Ft(builtin)d(allo)m(ws)k(a)g(name)g(to)g(b)s(e)f(asso)s(ciated)i(with)d -(an)i(arbitrary)e(\014lename,)330 4515 y(ev)m(en)30 b(when)e(that)h -(\014lename)f(cannot)i(b)s(e)e(found)g(b)m(y)h(searc)m(hing)f(the)h -Fs($PATH)p Ft(,)g(using)e(`)p Fs(hash)i(-p)p Ft(')g(\(see)330 -4624 y(Section)h(4.1)i([Bourne)e(Shell)e(Builtins],)g(page)k(33\).)225 -4753 y Fp(\017)60 b Ft(Bash)27 b(includes)d(a)k Fs(help)d -Ft(builtin)f(for)i(quic)m(k)g(reference)i(to)f(shell)e(facilities)g -(\(see)j(Section)f(4.2)h([Bash)330 4863 y(Builtins],)g(page)j(39\).)225 -4992 y Fp(\017)60 b Ft(The)42 b Fs(printf)g Ft(builtin)d(is)j(a)m(v)-5 -b(ailable)42 b(to)i(displa)m(y)d(formatted)i(output)g(\(see)h(Section)f -(4.2)h([Bash)330 5101 y(Builtins],)28 b(page)j(39\).)225 -5230 y Fp(\017)60 b Ft(The)26 b(Bash)h Fs(read)f Ft(builtin)d(\(see)28 -b(Section)f(4.2)h([Bash)f(Builtins],)e(page)j(39\))g(will)c(read)j(a)g -(line)e(ending)330 5340 y(in)g(`)p Fs(\\)p Ft(')i(with)e(the)h(`)p -Fs(-r)p Ft(')h(option,)g(and)e(will)f(use)i(the)h Fs(REPLY)e -Ft(v)-5 b(ariable)25 b(as)i(a)f(default)g(if)f(no)i(non-option)p -eop +Ft(builtin)g(allo)m(ws)j(a)e(name)g(to)g(b)s(e)f(asso)s(ciated)j(with)d +(an)h(arbitrary)f(\014lename,)330 4515 y(ev)m(en)30 b(when)e(that)h +(\014lename)g(cannot)h(b)s(e)e(found)g(b)m(y)h(searc)m(hing)g(the)g +Fs($PATH)p Ft(,)g(using)f(`)p Fs(hash)h(-p)p Ft(')g(\(see)330 +4624 y(Section)i(4.1)h([Bourne)e(Shell)g(Builtins],)h(page)h(33\).)225 +4753 y Fp(\017)60 b Ft(Bash)27 b(includes)f(a)i Fs(help)d +Ft(builtin)i(for)f(quic)m(k)h(reference)h(to)f(shell)g(facilities)i +(\(see)f(Section)g(4.2)g([Bash)330 4863 y(Builtins],)j(page)g(39\).)225 +4992 y Fp(\017)60 b Ft(The)42 b Fs(printf)g Ft(builtin)g(is)h(a)m(v)-5 +b(ailable)45 b(to)f(displa)m(y)f(formatted)g(output)g(\(see)h(Section)g +(4.2)g([Bash)330 5101 y(Builtins],)31 b(page)g(39\).)225 +5230 y Fp(\017)60 b Ft(The)26 b(Bash)h Fs(read)f Ft(builtin)g(\(see)i +(Section)g(4.2)g([Bash)f(Builtins],)h(page)g(39\))g(will)f(read)g(a)g +(line)g(ending)330 5340 y(in)f(`)p Fs(\\)p Ft(')h(with)f(the)g(`)p +Fs(-r)p Ft(')h(option,)h(and)d(will)i(use)f(the)h Fs(REPLY)e +Ft(v)-5 b(ariable)27 b(as)g(a)f(default)h(if)f(no)h(non-option)p +eop end %%Page: 128 134 -128 133 bop 150 -116 a Ft(128)2527 b(Bash)31 b(Reference)g(Man)m(ual) -330 299 y(argumen)m(ts)g(are)h(supplied.)40 b(The)30 -b(Bash)i Fs(read)e Ft(builtin)d(also)32 b(accepts)g(a)g(prompt)e -(string)g(with)g(the)330 408 y(`)p Fs(-p)p Ft(')35 b(option)f(and)g -(will)e(use)j(Readline)e(to)j(obtain)e(the)h(line)e(when)h(giv)m(en)h -(the)g(`)p Fs(-e)p Ft(')g(option.)53 b(The)330 518 y -Fs(read)31 b Ft(builtin)e(also)k(has)f(additional)e(options)i(to)h(con) -m(trol)g(input:)43 b(the)32 b(`)p Fs(-s)p Ft(')h(option)e(will)f(turn)i -(o\013)330 628 y(ec)m(hoing)37 b(of)f(input)e(c)m(haracters)k(as)e -(they)h(are)f(read,)i(the)e(`)p Fs(-t)p Ft(')g(option)g(will)e(allo)m -(w)h Fs(read)g Ft(to)i(time)330 737 y(out)c(if)f(input)f(do)s(es)h(not) -h(arriv)m(e)f(within)f(a)i(sp)s(eci\014ed)e(n)m(um)m(b)s(er)g(of)i -(seconds,)h(the)f(`)p Fs(-n)p Ft(')f(option)h(will)330 -847 y(allo)m(w)27 b(reading)f(only)h(a)h(sp)s(eci\014ed)d(n)m(um)m(b)s -(er)h(of)i(c)m(haracters)h(rather)e(than)g(a)h(full)d(line,)i(and)f -(the)i(`)p Fs(-d)p Ft(')330 956 y(option)i(will)e(read)i(un)m(til)e(a)j -(particular)e(c)m(haracter)j(rather)e(than)g(newline.)225 -1096 y Fp(\017)60 b Ft(The)33 b Fs(return)e Ft(builtin)f(ma)m(y)j(b)s -(e)g(used)f(to)i(ab)s(ort)f(execution)g(of)g(scripts)f(executed)i(with) -e(the)h Fs(.)g Ft(or)330 1205 y Fs(source)c Ft(builtins)d(\(see)32 -b(Section)e(4.1)h([Bourne)g(Shell)d(Builtins],)g(page)j(33\).)225 -1345 y Fp(\017)60 b Ft(Bash)43 b(includes)e(the)i Fs(shopt)f -Ft(builtin,)h(for)g(\014ner)f(con)m(trol)i(of)f(shell)f(optional)g -(capabilities)f(\(see)330 1455 y(Section)33 b(4.2)h([Bash)f(Builtins],) -f(page)h(39\),)i(and)e(allo)m(ws)f(these)h(options)g(to)g(b)s(e)g(set)g -(and)g(unset)f(at)330 1564 y(shell)d(in)m(v)m(o)s(cation)h(\(see)h -(Section)f(6.1)i([In)m(v)m(oking)e(Bash],)h(page)h(63\).)225 -1704 y Fp(\017)60 b Ft(Bash)23 b(has)f(m)m(uc)m(h)g(more)h(optional)f -(b)s(eha)m(vior)f(con)m(trollable)h(with)f(the)i Fs(set)e -Ft(builtin)e(\(see)24 b(Section)e(4.3)330 1813 y([The)30 -b(Set)h(Builtin],)d(page)j(50\).)225 1953 y Fp(\017)60 -b Ft(The)31 b(`)p Fs(-x)p Ft(')g(\()p Fs(xtrace)p Ft(\))g(option)g -(displa)m(ys)e(commands)j(other)f(than)h(simple)d(commands)i(when)g(p)s -(er-)330 2062 y(forming)e(an)h(execution)h(trace)g(\(see)h(Section)e -(4.3)h([The)g(Set)f(Builtin],)e(page)k(50\).)225 2202 -y Fp(\017)60 b Ft(The)28 b Fs(test)g Ft(builtin)e(\(see)k(Section)e -(4.1)i([Bourne)f(Shell)e(Builtins],)g(page)j(33\))g(is)e(sligh)m(tly)f -(di\013eren)m(t,)330 2311 y(as)c(it)f(implemen)m(ts)e(the)j -Fl(posix)f Ft(algorithm,)h(whic)m(h)e(sp)s(eci\014es)g(the)i(b)s(eha)m -(vior)e(based)h(on)h(the)f(n)m(um)m(b)s(er)330 2421 y(of)31 -b(argumen)m(ts.)225 2560 y Fp(\017)60 b Ft(Bash)31 b(includes)e(the)j -Fs(caller)d Ft(builtin,)g(whic)m(h)h(displa)m(ys)f(the)i(con)m(text)i -(of)f(an)m(y)g(activ)m(e)g(subroutine)330 2670 y(call)26 -b(\(a)h(shell)d(function)i(or)g(a)h(script)e(executed)i(with)e(the)i -Fs(.)f Ft(or)g Fs(source)f Ft(builtins\).)36 b(This)25 +TeXDict begin 128 133 bop 150 -116 a Ft(128)2527 b(Bash)31 +b(Reference)g(Man)m(ual)330 299 y(argumen)m(ts)g(are)h(supplied.)42 +b(The)30 b(Bash)i Fs(read)e Ft(builtin)g(also)j(accepts)f(a)g(prompt)e +(string)h(with)g(the)330 408 y(`)p Fs(-p)p Ft(')k(option)g(and)f(will)h +(use)g(Readline)g(to)h(obtain)f(the)g(line)g(when)f(giv)m(en)i(the)f(`) +p Fs(-e)p Ft(')g(option.)54 b(The)330 518 y Fs(read)31 +b Ft(builtin)h(also)i(has)e(additional)h(options)g(to)g(con)m(trol)h +(input:)44 b(the)32 b(`)p Fs(-s)p Ft(')h(option)f(will)h(turn)f(o\013) +330 628 y(ec)m(hoing)38 b(of)e(input)f(c)m(haracters)j(as)e(they)h(are) +f(read,)i(the)e(`)p Fs(-t)p Ft(')g(option)h(will)g(allo)m(w)g +Fs(read)e Ft(to)i(time)330 737 y(out)c(if)g(input)f(do)s(es)g(not)h +(arriv)m(e)g(within)g(a)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)f(of)i +(seconds,)h(the)f(`)p Fs(-n)p Ft(')f(option)i(will)330 +847 y(allo)m(w)29 b(reading)e(only)h(a)g(sp)s(eci\014ed)e(n)m(um)m(b)s +(er)g(of)i(c)m(haracters)h(rather)e(than)g(a)h(full)f(line,)i(and)d +(the)i(`)p Fs(-d)p Ft(')330 956 y(option)j(will)g(read)f(un)m(til)g(a)h +(particular)g(c)m(haracter)h(rather)e(than)g(newline.)225 +1096 y Fp(\017)60 b Ft(The)33 b Fs(return)e Ft(builtin)i(ma)m(y)g(b)s +(e)g(used)f(to)i(ab)s(ort)f(execution)h(of)f(scripts)g(executed)h(with) +f(the)g Fs(.)g Ft(or)330 1205 y Fs(source)c Ft(builtins)g(\(see)j +(Section)f(4.1)g([Bourne)g(Shell)f(Builtins],)h(page)g(33\).)225 +1345 y Fp(\017)60 b Ft(Bash)43 b(includes)g(the)g Fs(shopt)f +Ft(builtin,)k(for)d(\014ner)f(con)m(trol)j(of)e(shell)h(optional)g +(capabilities)h(\(see)330 1455 y(Section)34 b(4.2)g([Bash)f(Builtins],) +i(page)e(39\),)i(and)e(allo)m(ws)h(these)f(options)h(to)f(b)s(e)g(set)g +(and)g(unset)f(at)330 1564 y(shell)f(in)m(v)m(o)s(cation)h(\(see)f +(Section)g(6.1)h([In)m(v)m(oking)f(Bash],)g(page)h(63\).)225 +1704 y Fp(\017)60 b Ft(Bash)23 b(has)f(m)m(uc)m(h)g(more)h(optional)h +(b)s(eha)m(vior)e(con)m(trollable)j(with)d(the)h Fs(set)e +Ft(builtin)h(\(see)i(Section)f(4.3)330 1813 y([The)30 +b(Set)h(Builtin],)g(page)g(50\).)225 1953 y Fp(\017)60 +b Ft(The)31 b(`)p Fs(-x)p Ft(')g(\()p Fs(xtrace)p Ft(\))g(option)h +(displa)m(ys)f(commands)h(other)f(than)h(simple)f(commands)g(when)g(p)s +(er-)330 2062 y(forming)f(an)g(execution)i(trace)f(\(see)h(Section)f +(4.3)g([The)g(Set)f(Builtin],)h(page)h(50\).)225 2202 +y Fp(\017)60 b Ft(The)28 b Fs(test)g Ft(builtin)h(\(see)h(Section)f +(4.1)h([Bourne)f(Shell)g(Builtins],)h(page)g(33\))g(is)f(sligh)m(tly)h +(di\013eren)m(t,)330 2311 y(as)23 b(it)g(implemen)m(ts)f(the)h +Fl(posix)f Ft(algorithm,)j(whic)m(h)d(sp)s(eci\014es)g(the)h(b)s(eha)m +(vior)f(based)g(on)h(the)f(n)m(um)m(b)s(er)330 2421 y(of)31 +b(argumen)m(ts.)225 2560 y Fp(\017)60 b Ft(Bash)31 b(includes)g(the)h +Fs(caller)d Ft(builtin,)j(whic)m(h)f(displa)m(ys)g(the)g(con)m(text)i +(of)f(an)m(y)g(activ)m(e)h(subroutine)330 2670 y(call)28 +b(\(a)f(shell)f(function)h(or)f(a)h(script)f(executed)h(with)f(the)h +Fs(.)f Ft(or)g Fs(source)f Ft(builtins\).)39 b(This)26 b(supp)s(orts)330 2780 y(the)31 b(bash)e(debugger.)225 -2919 y Fp(\017)60 b Ft(The)42 b Fs(trap)f Ft(builtin)e(\(see)44 -b(Section)e(4.1)i([Bourne)e(Shell)e(Builtins],)k(page)f(33\))h(allo)m -(ws)e(a)g Fs(DEBUG)330 3029 y Ft(pseudo-signal)36 b(sp)s -(eci\014cation,)i(similar)d(to)j Fs(EXIT)p Ft(.)62 b(Commands)36 -b(sp)s(eci\014ed)g(with)g(a)i Fs(DEBUG)e Ft(trap)330 -3138 y(are)k(executed)g(b)s(efore)f(ev)m(ery)h(simple)d(command,)42 -b Fs(for)c Ft(command,)k Fs(case)c Ft(command,)k Fs(select)330 -3248 y Ft(command,)35 b(ev)m(ery)g(arithmetic)e Fs(for)g -Ft(command,)i(and)f(b)s(efore)g(the)g(\014rst)f(command)h(executes)h -(in)330 3357 y(a)29 b(shell)e(function.)39 b(The)28 b -Fs(DEBUG)g Ft(trap)g(is)g(not)h(inherited)d(b)m(y)j(shell)e(functions)g -(unless)g(the)i(function)330 3467 y(has)35 b(b)s(een)g(giv)m(en)h(the)g -Fs(trace)e Ft(attribute)h(or)h(the)g Fs(functrace)d Ft(option)i(has)g -(b)s(een)g(enabled)f(using)330 3577 y(the)28 b Fs(shopt)e -Ft(builtin.)36 b(The)27 b Fs(extdebug)f Ft(shell)g(option)h(has)g -(additional)e(e\013ects)k(on)f(the)g Fs(DEBUG)e Ft(trap.)330 -3716 y(The)21 b Fs(trap)e Ft(builtin)f(\(see)k(Section)f(4.1)h([Bourne) -f(Shell)e(Builtins],)i(page)h(33\))g(allo)m(ws)e(an)h -Fs(ERR)f Ft(pseudo-)330 3826 y(signal)28 b(sp)s(eci\014cation,)h -(similar)e(to)j Fs(EXIT)f Ft(and)g Fs(DEBUG)p Ft(.)39 -b(Commands)28 b(sp)s(eci\014ed)g(with)g(an)h Fs(ERR)g -Ft(trap)330 3935 y(are)40 b(executed)g(after)g(a)f(simple)f(command)h -(fails,)h(with)e(a)i(few)f(exceptions.)67 b(The)39 b -Fs(ERR)g Ft(trap)g(is)330 4045 y(not)g(inherited)d(b)m(y)j(shell)e -(functions)g(unless)g(the)i Fs(-o)29 b(errtrace)37 b -Ft(option)h(to)h(the)g Fs(set)f Ft(builtin)d(is)330 4154 -y(enabled.)330 4294 y(The)j Fs(trap)g Ft(builtin)e(\(see)j(Section)g -(4.1)h([Bourne)f(Shell)e(Builtins],)h(page)i(33\))g(allo)m(ws)e(a)i -Fs(RETURN)330 4403 y Ft(pseudo-signal)33 b(sp)s(eci\014cation,)j -(similar)c(to)k Fs(EXIT)e Ft(and)g Fs(DEBUG)p Ft(.)54 -b(Commands)34 b(sp)s(eci\014ed)f(with)h(an)330 4513 y -Fs(RETURN)39 b Ft(trap)i(are)g(executed)h(b)s(efore)e(execution)h -(resumes)f(after)h(a)g(shell)e(function)h(or)h(a)g(shell)330 -4623 y(script)35 b(executed)h(with)f Fs(.)g Ft(or)h Fs(source)e -Ft(returns.)56 b(The)35 b Fs(RETURN)f Ft(trap)i(is)f(not)h(inherited)d -(b)m(y)j(shell)330 4732 y(functions.)225 4872 y Fp(\017)60 -b Ft(The)30 b(Bash)g Fs(type)f Ft(builtin)e(is)i(more)h(extensiv)m(e)h -(and)e(giv)m(es)i(more)f(information)f(ab)s(out)h(the)g(names)330 -4981 y(it)g(\014nds)f(\(see)i(Section)f(4.2)i([Bash)e(Builtins],)f -(page)i(39\).)225 5121 y Fp(\017)60 b Ft(The)34 b(Bash)h -Fs(umask)e Ft(builtin)e(p)s(ermits)i(a)h(`)p Fs(-p)p -Ft(')h(option)f(to)h(cause)g(the)g(output)f(to)h(b)s(e)f(displa)m(y)m -(ed)f(in)330 5230 y(the)i(form)g(of)g(a)h Fs(umask)e -Ft(command)h(that)g(ma)m(y)h(b)s(e)f(reused)f(as)h(input)f(\(see)i -(Section)f(4.1)h([Bourne)330 5340 y(Shell)28 b(Builtins],)g(page)k -(33\).)p eop +2919 y Fp(\017)60 b Ft(The)42 b Fs(trap)f Ft(builtin)h(\(see)i(Section) +f(4.1)h([Bourne)e(Shell)g(Builtins],)47 b(page)c(33\))h(allo)m(ws)g(a)e +Fs(DEBUG)330 3029 y Ft(pseudo-signal)c(sp)s(eci\014cation,)i(similar)e +(to)g Fs(EXIT)p Ft(.)62 b(Commands)36 b(sp)s(eci\014ed)h(with)g(a)h +Fs(DEBUG)e Ft(trap)330 3138 y(are)k(executed)g(b)s(efore)f(ev)m(ery)h +(simple)f(command,)j Fs(for)c Ft(command,)k Fs(case)c +Ft(command,)k Fs(select)330 3248 y Ft(command,)35 b(ev)m(ery)g +(arithmetic)g Fs(for)e Ft(command,)i(and)f(b)s(efore)g(the)g(\014rst)f +(command)h(executes)h(in)330 3357 y(a)29 b(shell)g(function.)40 +b(The)28 b Fs(DEBUG)g Ft(trap)g(is)h(not)g(inherited)f(b)m(y)h(shell)g +(functions)f(unless)g(the)h(function)330 3467 y(has)35 +b(b)s(een)g(giv)m(en)i(the)f Fs(trace)e Ft(attribute)i(or)g(the)g +Fs(functrace)d Ft(option)j(has)f(b)s(een)g(enabled)g(using)330 +3577 y(the)28 b Fs(shopt)e Ft(builtin.)39 b(The)27 b +Fs(extdebug)f Ft(shell)i(option)g(has)f(additional)h(e\013ects)h(on)f +(the)g Fs(DEBUG)e Ft(trap.)330 3716 y(The)21 b Fs(trap)e +Ft(builtin)i(\(see)h(Section)g(4.1)g([Bourne)f(Shell)g(Builtins],)j +(page)e(33\))g(allo)m(ws)g(an)f Fs(ERR)f Ft(pseudo-)330 +3826 y(signal)30 b(sp)s(eci\014cation,)h(similar)f(to)g +Fs(EXIT)f Ft(and)g Fs(DEBUG)p Ft(.)39 b(Commands)28 b(sp)s(eci\014ed)h +(with)g(an)g Fs(ERR)g Ft(trap)330 3935 y(are)40 b(executed)g(after)g(a) +f(simple)h(command)f(fails,)j(with)d(a)h(few)f(exceptions.)68 +b(The)39 b Fs(ERR)g Ft(trap)g(is)330 4045 y(not)g(inherited)f(b)m(y)h +(shell)g(functions)f(unless)g(the)h Fs(-o)29 b(errtrace)37 +b Ft(option)i(to)g(the)g Fs(set)f Ft(builtin)g(is)330 +4154 y(enabled.)330 4294 y(The)g Fs(trap)g Ft(builtin)h(\(see)g +(Section)h(4.1)g([Bourne)f(Shell)g(Builtins],)i(page)f(33\))g(allo)m +(ws)g(a)g Fs(RETURN)330 4403 y Ft(pseudo-signal)35 b(sp)s +(eci\014cation,)j(similar)d(to)h Fs(EXIT)e Ft(and)g Fs(DEBUG)p +Ft(.)54 b(Commands)34 b(sp)s(eci\014ed)g(with)h(an)330 +4513 y Fs(RETURN)k Ft(trap)i(are)g(executed)h(b)s(efore)e(execution)i +(resumes)e(after)h(a)g(shell)g(function)g(or)g(a)g(shell)330 +4623 y(script)36 b(executed)g(with)g Fs(.)f Ft(or)h Fs(source)e +Ft(returns.)56 b(The)35 b Fs(RETURN)f Ft(trap)i(is)g(not)g(inherited)f +(b)m(y)h(shell)330 4732 y(functions.)225 4872 y Fp(\017)60 +b Ft(The)30 b(Bash)g Fs(type)f Ft(builtin)h(is)g(more)g(extensiv)m(e)i +(and)d(giv)m(es)j(more)e(information)h(ab)s(out)f(the)g(names)330 +4981 y(it)h(\014nds)e(\(see)i(Section)g(4.2)h([Bash)e(Builtins],)i +(page)f(39\).)225 5121 y Fp(\017)60 b Ft(The)34 b(Bash)h +Fs(umask)e Ft(builtin)h(p)s(ermits)g(a)g(`)p Fs(-p)p +Ft(')h(option)g(to)g(cause)g(the)g(output)f(to)h(b)s(e)f(displa)m(y)m +(ed)h(in)330 5230 y(the)g(form)g(of)g(a)h Fs(umask)e +Ft(command)h(that)g(ma)m(y)h(b)s(e)f(reused)f(as)h(input)g(\(see)h +(Section)g(4.1)g([Bourne)330 5340 y(Shell)30 b(Builtins],)h(page)h +(33\).)p eop end %%Page: 129 135 -129 134 bop 150 -116 a Ft(App)s(endix)28 b(B:)j(Ma)5 -b(jor)31 b(Di\013erences)f(F)-8 b(rom)31 b(The)f(Bourne)g(Shell)1256 -b(129)225 299 y Fp(\017)60 b Ft(Bash)34 b(implemen)m(ts)f(a)i -Fs(csh)p Ft(-lik)m(e)e(directory)g(stac)m(k,)k(and)d(pro)m(vides)f(the) -h Fs(pushd)p Ft(,)g Fs(popd)p Ft(,)g(and)g Fs(dirs)330 -408 y Ft(builtins)d(to)36 b(manipulate)d(it)i(\(see)g(Section)g(6.8)h -([The)f(Directory)g(Stac)m(k],)j(page)d(73\).)56 b(Bash)35 -b(also)330 518 y(mak)m(es)c(the)g(directory)f(stac)m(k)h(visible)d(as)j -(the)f(v)-5 b(alue)30 b(of)h(the)f Fs(DIRSTACK)f Ft(shell)f(v)-5 -b(ariable.)225 646 y Fp(\017)60 b Ft(Bash)28 b(in)m(terprets)g(sp)s -(ecial)f(bac)m(kslash-escap)s(ed)h(c)m(haracters)h(in)e(the)i(prompt)e -(strings)g(when)g(in)m(ter-)330 756 y(activ)m(e)32 b(\(see)f(Section)f -(6.9)i([Prin)m(ting)c(a)j(Prompt],)g(page)g(75\).)225 -885 y Fp(\017)60 b Ft(The)46 b(Bash)h(restricted)f(mo)s(de)g(is)g(more) -g(useful)f(\(see)i(Section)g(6.10)h([The)e(Restricted)h(Shell],)330 -994 y(page)31 b(76\);)h(the)f(SVR4.2)g(shell)d(restricted)i(mo)s(de)g -(is)g(to)s(o)h(limited.)225 1123 y Fp(\017)60 b Ft(The)30 -b Fs(disown)f Ft(builtin)e(can)k(remo)m(v)m(e)h(a)f(job)f(from)g(the)h -(in)m(ternal)e(shell)g(job)h(table)h(\(see)g(Section)g(7.2)330 -1232 y([Job)i(Con)m(trol)g(Builtins],)e(page)j(80\))h(or)e(suppress)e -(the)i(sending)f(of)h Fs(SIGHUP)e Ft(to)j(a)g(job)f(when)f(the)330 -1342 y(shell)d(exits)h(as)g(the)h(result)e(of)i(a)f Fs(SIGHUP)p -Ft(.)225 1470 y Fp(\017)60 b Ft(The)28 b(SVR4.2)h(shell)d(has)i(t)m(w)m -(o)i(privilege-related)c(builtins)f(\()p Fs(mldmode)h +TeXDict begin 129 134 bop 150 -116 a Ft(App)s(endix)29 +b(B:)i(Ma)5 b(jor)31 b(Di\013erences)g(F)-8 b(rom)31 +b(The)f(Bourne)g(Shell)1258 b(129)225 299 y Fp(\017)60 +b Ft(Bash)34 b(implemen)m(ts)h(a)g Fs(csh)p Ft(-lik)m(e)g(directory)f +(stac)m(k,)j(and)d(pro)m(vides)g(the)g Fs(pushd)p Ft(,)g +Fs(popd)p Ft(,)g(and)g Fs(dirs)330 408 y Ft(builtins)g(to)i(manipulate) +f(it)h(\(see)f(Section)h(6.8)g([The)f(Directory)h(Stac)m(k],)i(page)d +(73\).)56 b(Bash)35 b(also)330 518 y(mak)m(es)c(the)g(directory)g(stac) +m(k)g(visible)g(as)g(the)f(v)-5 b(alue)31 b(of)g(the)f +Fs(DIRSTACK)f Ft(shell)h(v)-5 b(ariable.)225 646 y Fp(\017)60 +b Ft(Bash)28 b(in)m(terprets)h(sp)s(ecial)g(bac)m(kslash-escap)s(ed)g +(c)m(haracters)g(in)f(the)h(prompt)e(strings)h(when)f(in)m(ter-)330 +756 y(activ)m(e)33 b(\(see)e(Section)g(6.9)h([Prin)m(ting)e(a)h +(Prompt],)g(page)g(75\).)225 885 y Fp(\017)60 b Ft(The)46 +b(Bash)h(restricted)g(mo)s(de)f(is)h(more)f(useful)g(\(see)h(Section)h +(6.10)g([The)e(Restricted)i(Shell],)330 994 y(page)31 +b(76\);)h(the)f(SVR4.2)g(shell)f(restricted)h(mo)s(de)f(is)h(to)s(o)g +(limited.)225 1123 y Fp(\017)60 b Ft(The)30 b Fs(disown)f +Ft(builtin)h(can)h(remo)m(v)m(e)h(a)f(job)f(from)g(the)h(in)m(ternal)g +(shell)g(job)f(table)i(\(see)f(Section)h(7.2)330 1232 +y([Job)h(Con)m(trol)h(Builtins],)g(page)g(80\))h(or)e(suppress)e(the)i +(sending)g(of)g Fs(SIGHUP)e Ft(to)j(a)g(job)f(when)f(the)330 +1342 y(shell)f(exits)g(as)f(the)h(result)f(of)h(a)f Fs(SIGHUP)p +Ft(.)225 1470 y Fp(\017)60 b Ft(The)28 b(SVR4.2)h(shell)f(has)g(t)m(w)m +(o)i(privilege-related)g(builtins)e(\()p Fs(mldmode)e Ft(and)i Fs(priv)p Ft(\))f(not)i(presen)m(t)f(in)330 1580 y(Bash.)225 1708 y Fp(\017)60 b Ft(Bash)31 b(do)s(es)f(not)g(ha)m (v)m(e)i(the)e Fs(stop)g Ft(or)g Fs(newgrp)f Ft(builtins.)225 1837 y Fp(\017)60 b Ft(Bash)31 b(do)s(es)f(not)g(use)g(the)h -Fs(SHACCT)d Ft(v)-5 b(ariable)30 b(or)g(p)s(erform)f(shell)g(accoun)m +Fs(SHACCT)d Ft(v)-5 b(ariable)32 b(or)e(p)s(erform)f(shell)i(accoun)m (ting.)225 1965 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h Fs(sh)f -Ft(uses)g(a)g Fs(TIMEOUT)f Ft(v)-5 b(ariable)29 b(lik)m(e)h(Bash)g -(uses)g Fs(TMOUT)p Ft(.)150 2112 y(More)h(features)g(unique)d(to)j -(Bash)g(ma)m(y)g(b)s(e)f(found)f(in)g(Chapter)g(6)i([Bash)g(F)-8 +Ft(uses)g(a)g Fs(TIMEOUT)f Ft(v)-5 b(ariable)31 b(lik)m(e)h(Bash)e +(uses)g Fs(TMOUT)p Ft(.)150 2112 y(More)h(features)g(unique)e(to)i +(Bash)g(ma)m(y)g(b)s(e)f(found)f(in)h(Chapter)f(6)i([Bash)g(F)-8 b(eatures],)32 b(page)f(63.)150 2351 y Fr(B.1)67 b(Implemen)l(tation)48 b(Di\013erences)e(F)-11 b(rom)44 b(The)h(SVR4.2)g(Shell)275 -2589 y Ft(Since)38 b(Bash)i(is)e(a)i(completely)g(new)f(implemen)m -(tation,)h(it)f(do)s(es)h(not)f(su\013er)g(from)g(man)m(y)h(of)g(the) -150 2699 y(limitations)28 b(of)j(the)f(SVR4.2)h(shell.)39 +2589 y Ft(Since)39 b(Bash)h(is)f(a)h(completely)i(new)d(implemen)m +(tation,)k(it)d(do)s(es)g(not)f(su\013er)g(from)g(man)m(y)h(of)g(the) +150 2699 y(limitations)32 b(of)f(the)f(SVR4.2)h(shell.)41 b(F)-8 b(or)31 b(instance:)225 2827 y Fp(\017)60 b Ft(Bash)32 -b(do)s(es)f(not)h(fork)f(a)h(subshell)c(when)j(redirecting)f(in)m(to)i -(or)f(out)h(of)g(a)g(shell)d(con)m(trol)j(structure)330 -2937 y(suc)m(h)e(as)h(an)f Fs(if)g Ft(or)g Fs(while)f +b(do)s(es)f(not)h(fork)f(a)h(subshell)e(when)h(redirecting)h(in)m(to)h +(or)e(out)h(of)g(a)g(shell)f(con)m(trol)i(structure)330 +2937 y(suc)m(h)d(as)h(an)f Fs(if)g Ft(or)g Fs(while)f Ft(statemen)m(t.)225 3065 y Fp(\017)60 b Ft(Bash)29 b(do)s(es)f(not)h -(allo)m(w)f(un)m(balanced)g(quotes.)41 b(The)28 b(SVR4.2)h(shell)e -(will)f(silen)m(tly)h(insert)h(a)h(needed)330 3175 y(closing)e(quote)i -(at)f Fs(EOF)f Ft(under)g(certain)g(circumstances.)40 -b(This)26 b(can)i(b)s(e)g(the)g(cause)g(of)g(some)h(hard-)330 +(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 3175 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 3285 y(to-\014nd)h(errors.)225 3413 y Fp(\017)60 b Ft(The)45 -b(SVR4.2)h(shell)d(uses)i(a)g(baro)s(que)g(memory)g(managemen)m(t)i(sc) +b(SVR4.2)h(shell)f(uses)g(a)g(baro)s(que)g(memory)g(managemen)m(t)i(sc) m(heme)e(based)g(on)g(trapping)330 3523 y Fs(SIGSEGV)p -Ft(.)57 b(If)35 b(the)i(shell)d(is)i(started)h(from)e(a)i(pro)s(cess)f -(with)f Fs(SIGSEGV)f Ft(blo)s(c)m(k)m(ed)j(\(e.g.,)i(b)m(y)d(using)330 -3632 y(the)31 b Fs(system\(\))d Ft(C)i(library)e(function)h(call\),)h -(it)g(misb)s(eha)m(v)m(es)g(badly)-8 b(.)225 3761 y Fp(\017)60 -b Ft(In)26 b(a)i(questionable)e(attempt)j(at)f(securit)m(y)-8 -b(,)28 b(the)f(SVR4.2)h(shell,)e(when)h(in)m(v)m(ok)m(ed)g(without)g -(the)g(`)p Fs(-p)p Ft(')330 3870 y(option,)38 b(will)33 -b(alter)k(its)e(real)h(and)g(e\013ectiv)m(e)i Fl(uid)e -Ft(and)g Fl(gid)h Ft(if)e(they)i(are)f(less)g(than)g(some)h(magic)330 -3980 y(threshold)29 b(v)-5 b(alue,)30 b(commonly)g(100.)42 -b(This)28 b(can)j(lead)f(to)h(unexp)s(ected)f(results.)225 -4108 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h(shell)e(do)s(es)h(not)g(allo)m -(w)g(users)g(to)h(trap)f Fs(SIGSEGV)p Ft(,)f Fs(SIGALRM)p +Ft(.)57 b(If)35 b(the)i(shell)f(is)h(started)g(from)e(a)i(pro)s(cess)f +(with)g Fs(SIGSEGV)e Ft(blo)s(c)m(k)m(ed)k(\(e.g.,)h(b)m(y)d(using)330 +3632 y(the)31 b Fs(system\(\))d Ft(C)i(library)g(function)g(call\),)i +(it)f(misb)s(eha)m(v)m(es)g(badly)-8 b(.)225 3761 y Fp(\017)60 +b Ft(In)26 b(a)i(questionable)g(attempt)h(at)f(securit)m(y)-8 +b(,)29 b(the)e(SVR4.2)h(shell,)g(when)f(in)m(v)m(ok)m(ed)h(without)g +(the)f(`)p Fs(-p)p Ft(')330 3870 y(option,)39 b(will)d(alter)i(its)e +(real)h(and)f(e\013ectiv)m(e)j Fl(uid)d Ft(and)g Fl(gid)h +Ft(if)f(they)h(are)f(less)h(than)f(some)h(magic)330 3980 +y(threshold)30 b(v)-5 b(alue,)31 b(commonly)g(100.)42 +b(This)29 b(can)i(lead)g(to)g(unexp)s(ected)f(results.)225 +4108 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h(shell)g(do)s(es)f(not)g(allo)m +(w)i(users)e(to)h(trap)f Fs(SIGSEGV)p Ft(,)f Fs(SIGALRM)p Ft(,)f(or)j Fs(SIGCHLD)p Ft(.)225 4237 y Fp(\017)60 b -Ft(The)34 b(SVR4.2)h(shell)e(do)s(es)i(not)f(allo)m(w)h(the)f +Ft(The)34 b(SVR4.2)h(shell)g(do)s(es)g(not)f(allo)m(w)j(the)d Fs(IFS)p Ft(,)h Fs(MAILCHECK)p Ft(,)f Fs(PATH)p Ft(,)h -Fs(PS1)p Ft(,)g(or)f Fs(PS2)g Ft(v)-5 b(ariables)33 b(to)330 -4346 y(b)s(e)d(unset.)225 4475 y Fp(\017)60 b Ft(The)30 -b(SVR4.2)h(shell)e(treats)i(`)p Fs(^)p Ft(')f(as)h(the)g(undo)s(cumen)m -(ted)e(equiv)-5 b(alen)m(t)29 b(of)i(`)p Fs(|)p Ft('.)225 -4603 y Fp(\017)60 b Ft(Bash)37 b(allo)m(ws)f(m)m(ultiple)e(option)i -(argumen)m(ts)h(when)e(it)h(is)g(in)m(v)m(ok)m(ed)h(\()p +Fs(PS1)p Ft(,)g(or)f Fs(PS2)g Ft(v)-5 b(ariables)35 b(to)330 +4346 y(b)s(e)30 b(unset.)225 4475 y Fp(\017)60 b Ft(The)30 +b(SVR4.2)h(shell)g(treats)g(`)p Fs(^)p Ft(')f(as)h(the)g(undo)s(cumen)m +(ted)e(equiv)-5 b(alen)m(t)31 b(of)g(`)p Fs(|)p Ft('.)225 +4603 y Fp(\017)60 b Ft(Bash)37 b(allo)m(ws)h(m)m(ultiple)f(option)g +(argumen)m(ts)g(when)e(it)i(is)g(in)m(v)m(ok)m(ed)h(\()p Fs(-x)30 b(-v)p Ft(\);)40 b(the)c(SVR4.2)i(shell)330 -4713 y(allo)m(ws)32 b(only)g(one)h(option)f(argumen)m(t)h(\()p -Fs(-xv)p Ft(\).)47 b(In)32 b(fact,)i(some)f(v)m(ersions)f(of)h(the)g -(shell)d(dump)h(core)330 4822 y(if)e(the)i(second)f(argumen)m(t)h(b)s -(egins)e(with)g(a)i(`)p Fs(-)p Ft('.)225 4951 y Fp(\017)60 -b Ft(The)35 b(SVR4.2)i(shell)c(exits)j(a)g(script)f(if)f(an)m(y)i -(builtin)c(fails;)37 b(Bash)f(exits)g(a)g(script)e(only)h(if)g(one)h -(of)330 5060 y(the)d Fl(posix)g Ft(1003.2)i(sp)s(ecial)d(builtins)d -(fails,)k(and)f(only)h(for)f(certain)h(failures,)g(as)g(en)m(umerated)g -(in)330 5170 y(the)e Fl(posix)e Ft(1003.2)k(standard.)225 -5298 y Fp(\017)60 b Ft(The)30 b(SVR4.2)h(shell)e(b)s(eha)m(v)m(es)h -(di\013eren)m(tly)f(when)h(in)m(v)m(ok)m(ed)h(as)f Fs(jsh)g -Ft(\(it)g(turns)f(on)h(job)g(con)m(trol\).)p eop +4713 y(allo)m(ws)c(only)f(one)g(option)g(argumen)m(t)g(\()p +Fs(-xv)p Ft(\).)47 b(In)32 b(fact,)i(some)f(v)m(ersions)g(of)g(the)g +(shell)f(dump)f(core)330 4822 y(if)f(the)h(second)f(argumen)m(t)h(b)s +(egins)f(with)g(a)h(`)p Fs(-)p Ft('.)225 4951 y Fp(\017)60 +b Ft(The)35 b(SVR4.2)i(shell)e(exits)i(a)f(script)g(if)f(an)m(y)h +(builtin)f(fails;)k(Bash)d(exits)h(a)f(script)f(only)h(if)g(one)g(of) +330 5060 y(the)d Fl(posix)g Ft(1003.2)i(sp)s(ecial)f(builtins)e(fails,) +j(and)d(only)i(for)e(certain)i(failures,)h(as)e(en)m(umerated)g(in)330 +5170 y(the)e Fl(posix)e Ft(1003.2)k(standard.)225 5298 +y Fp(\017)60 b Ft(The)30 b(SVR4.2)h(shell)g(b)s(eha)m(v)m(es)f +(di\013eren)m(tly)h(when)f(in)m(v)m(ok)m(ed)i(as)e Fs(jsh)g +Ft(\(it)h(turns)e(on)h(job)g(con)m(trol\).)p eop end %%Page: 130 136 -130 135 bop 150 -116 a Ft(130)2527 b(Bash)31 b(Reference)g(Man)m(ual)p -eop +TeXDict begin 130 135 bop 150 -116 a Ft(130)2527 b(Bash)31 +b(Reference)g(Man)m(ual)p eop end %%Page: 131 137 -131 136 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g -(Man)m(ual)2062 b(131)150 299 y Fo(App)t(endix)53 b(C)126 -b(Cop)l(ying)52 b(This)i(Man)l(ual)150 690 y Fr(C.1)68 -b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)1396 -909 y Ft(V)-8 b(ersion)30 b(1.2,)i(No)m(v)m(em)m(b)s(er)g(2002)390 -1052 y(Cop)m(yrigh)m(t)842 1049 y(c)817 1052 y Fp(\015)e -Ft(2000,2001,2002)36 b(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 -b(oundation,)31 b(Inc.)390 1161 y(59)g(T)-8 b(emple)30 -b(Place,)h(Suite)e(330,)j(Boston,)g(MA)61 b(02111-1307,)35 -b(USA)390 1380 y(Ev)m(ery)m(one)c(is)f(p)s(ermitted)f(to)i(cop)m(y)g -(and)f(distribute)e(v)m(erbatim)i(copies)390 1490 y(of)h(this)e -(license)g(do)s(cumen)m(t,)i(but)e(c)m(hanging)i(it)f(is)f(not)i(allo)m +TeXDict begin 131 136 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(131)150 299 +y Fo(App)t(endix)52 b(C)126 b(Cop)l(ying)51 b(This)i(Man)l(ual)150 +690 y Fr(C.1)68 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h +(License)1396 909 y Ft(V)-8 b(ersion)31 b(1.2,)h(No)m(v)m(em)m(b)s(er)g +(2002)390 1052 y(Cop)m(yrigh)m(t)842 1049 y(c)817 1052 +y Fp(\015)e Ft(2000,2001,2002)36 b(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F) +-8 b(oundation,)32 b(Inc.)390 1161 y(59)f(T)-8 b(emple)31 +b(Place,)h(Suite)e(330,)i(Boston,)g(MA)61 b(02111-1307,)35 +b(USA)390 1380 y(Ev)m(ery)m(one)c(is)g(p)s(ermitted)f(to)h(cop)m(y)g +(and)f(distribute)g(v)m(erbatim)h(copies)390 1490 y(of)g(this)f +(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f(is)f(not)h(allo)m (w)m(ed.)199 1632 y(0.)61 b(PREAMBLE)330 1770 y(The)37 -b(purp)s(ose)e(of)i(this)f(License)h(is)f(to)i(mak)m(e)g(a)g(man)m -(ual,)g(textb)s(o)s(ok,)i(or)d(other)g(functional)f(and)330 -1880 y(useful)28 b(do)s(cumen)m(t)i Fq(free)36 b Ft(in)28 -b(the)j(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j -(the)e(e\013ectiv)m(e)i(freedom)330 1990 y(to)g(cop)m(y)g(and)f -(redistribute)e(it,)i(with)g(or)g(without)f(mo)s(difying)f(it,)j -(either)f(commercially)f(or)h(non-)330 2099 y(commercially)-8 -b(.)53 b(Secondarily)-8 b(,)34 b(this)g(License)g(preserv)m(es)h(for)f -(the)h(author)f(and)g(publisher)d(a)k(w)m(a)m(y)330 2209 -y(to)i(get)g(credit)f(for)g(their)f(w)m(ork,)j(while)c(not)i(b)s(eing)f -(considered)g(resp)s(onsible)e(for)j(mo)s(di\014cations)330 -2318 y(made)30 b(b)m(y)h(others.)330 2457 y(This)21 b(License)i(is)f(a) -i(kind)d(of)j(\\cop)m(yleft",)i(whic)m(h)c(means)h(that)h(deriv)-5 -b(ativ)m(e)22 b(w)m(orks)h(of)h(the)f(do)s(cumen)m(t)330 -2566 y(m)m(ust)34 b(themselv)m(es)g(b)s(e)f(free)h(in)f(the)h(same)g -(sense.)51 b(It)34 b(complemen)m(ts)g(the)g(GNU)g(General)g(Public)330 -2676 y(License,)c(whic)m(h)f(is)h(a)g(cop)m(yleft)h(license)f(designed) -f(for)h(free)h(soft)m(w)m(are.)330 2814 y(W)-8 b(e)31 -b(ha)m(v)m(e)f(designed)f(this)f(License)h(in)f(order)h(to)i(use)e(it)g -(for)g(man)m(uals)g(for)g(free)h(soft)m(w)m(are,)h(b)s(ecause)330 +b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g(a)g(man)m +(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 +1880 y(useful)29 b(do)s(cumen)m(t)h Fq(free)36 b Ft(in)29 +b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j +(the)e(e\013ectiv)m(e)j(freedom)330 1990 y(to)f(cop)m(y)g(and)f +(redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i +(either)f(commercially)h(or)e(non-)330 2099 y(commercially)-8 +b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f +(the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 2209 +y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g +(considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 +2318 y(made)30 b(b)m(y)h(others.)330 2457 y(This)22 b(License)i(is)f(a) +h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 +b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 +2566 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g +(sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 +2676 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) +e(for)g(free)h(soft)m(w)m(are.)330 2814 y(W)-8 b(e)31 +b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h +(for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2924 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) -64 b(a)42 b(free)h(program)f(should)e(come)j(with)e(man)m(uals)330 -3033 y(pro)m(viding)27 b(the)i(same)g(freedoms)f(that)i(the)f(soft)m(w) -m(are)h(do)s(es.)40 b(But)29 b(this)e(License)i(is)f(not)h(limited)d -(to)330 3143 y(soft)m(w)m(are)32 b(man)m(uals;)e(it)g(can)h(b)s(e)f -(used)g(for)g(an)m(y)h(textual)g(w)m(ork,)g(regardless)f(of)h(sub)5 -b(ject)30 b(matter)i(or)330 3252 y(whether)f(it)g(is)f(published)e(as)k -(a)f(prin)m(ted)f(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)g -(License)g(principally)c(for)330 3362 y(w)m(orks)j(whose)h(purp)s(ose)d -(is)i(instruction)e(or)i(reference.)199 3500 y(1.)61 -b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3639 y(This)38 -b(License)i(applies)e(to)i(an)m(y)h(man)m(ual)e(or)h(other)g(w)m(ork,)i -(in)d(an)m(y)h(medium,)h(that)f(con)m(tains)h(a)330 3748 -y(notice)h(placed)f(b)m(y)g(the)h(cop)m(yrigh)m(t)g(holder)e(sa)m(ying) -h(it)g(can)h(b)s(e)f(distributed)d(under)i(the)i(terms)330 -3858 y(of)c(this)e(License.)61 b(Suc)m(h)37 b(a)h(notice)g(gran)m(ts)g -(a)g(w)m(orld-wide,)f(ro)m(y)m(alt)m(y-free)j(license,)e(unlimited)c -(in)330 3967 y(duration,)48 b(to)e(use)f(that)g(w)m(ork)h(under)d(the)j -(conditions)d(stated)j(herein.)84 b(The)45 b(\\Do)s(cumen)m(t",)330 -4077 y(b)s(elo)m(w,)28 b(refers)g(to)h(an)m(y)g(suc)m(h)f(man)m(ual)g -(or)g(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)e(is)h -(a)i(licensee,)g(and)330 4187 y(is)24 b(addressed)g(as)h(\\y)m(ou".)40 -b(Y)-8 b(ou)26 b(accept)g(the)f(license)f(if)g(y)m(ou)i(cop)m(y)-8 -b(,)27 b(mo)s(dify)c(or)i(distribute)e(the)i(w)m(ork)330 -4296 y(in)k(a)i(w)m(a)m(y)g(requiring)d(p)s(ermission)f(under)i(cop)m -(yrigh)m(t)i(la)m(w.)330 4435 y(A)j(\\Mo)s(di\014ed)e(V)-8 -b(ersion")34 b(of)g(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f -(con)m(taining)h(the)g(Do)s(cumen)m(t)g(or)330 4544 y(a)k(p)s(ortion)e -(of)i(it,)h(either)e(copied)g(v)m(erbatim,)i(or)e(with)g(mo)s -(di\014cations)e(and/or)j(translated)f(in)m(to)330 4654 -y(another)31 b(language.)330 4792 y(A)26 b(\\Secondary)g(Section")g(is) -f(a)i(named)e(app)s(endix)e(or)j(a)h(fron)m(t-matter)g(section)f(of)g -(the)g(Do)s(cumen)m(t)330 4902 y(that)c(deals)f(exclusiv)m(ely)f(with)g -(the)h(relationship)e(of)i(the)h(publishers)17 b(or)k(authors)g(of)h -(the)f(Do)s(cumen)m(t)330 5011 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m -(v)m(erall)e(sub)5 b(ject)37 b(\(or)h(to)g(related)f(matters\))h(and)f -(con)m(tains)g(nothing)f(that)330 5121 y(could)j(fall)g(directly)g -(within)f(that)j(o)m(v)m(erall)g(sub)5 b(ject.)70 b(\(Th)m(us,)42 -b(if)d(the)i(Do)s(cumen)m(t)g(is)e(in)g(part)i(a)330 -5230 y(textb)s(o)s(ok)24 b(of)g(mathematics,)i(a)e(Secondary)f(Section) -g(ma)m(y)h(not)g(explain)e(an)m(y)i(mathematics.\))39 -b(The)330 5340 y(relationship)25 b(could)h(b)s(e)h(a)g(matter)i(of)e -(historical)f(connection)h(with)f(the)i(sub)5 b(ject)27 -b(or)g(with)f(related)p eop +65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 +3033 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) +m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g +(to)330 3143 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g +(for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 +b(ject)30 b(matter)i(or)330 3252 y(whether)f(it)h(is)f(published)f(as)i +(a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h +(License)g(principally)f(for)330 3362 y(w)m(orks)f(whose)h(purp)s(ose)d +(is)j(instruction)f(or)g(reference.)199 3500 y(1.)61 +b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3639 y(This)39 +b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i +(in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3748 +y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) +h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 +3858 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f +(a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d +(in)330 3967 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j +(conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 +4077 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h +(or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g +(a)h(licensee,)i(and)330 4187 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 +b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 +b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 +4296 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) +m(yrigh)m(t)j(la)m(w.)330 4435 y(A)i(\\Mo)s(di\014ed)f(V)-8 +b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f +(con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4544 y(a)k(p)s(ortion)f +(of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s +(di\014cations)f(and/or)h(translated)g(in)m(to)330 4654 +y(another)31 b(language.)330 4792 y(A)26 b(\\Secondary)g(Section")h(is) +f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f +(the)g(Do)s(cumen)m(t)330 4902 y(that)c(deals)g(exclusiv)m(ely)h(with)e +(the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f +(Do)s(cumen)m(t)330 5011 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m +(erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) +m(tains)h(nothing)f(that)330 5121 y(could)j(fall)h(directly)g(within)f +(that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 +b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 +5230 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) +h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 +b(The)330 5340 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e +(historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 +b(or)g(with)g(related)p eop end %%Page: 132 138 -132 137 bop 150 -116 a Ft(132)2527 b(Bash)31 b(Reference)g(Man)m(ual) -330 299 y(matters,)38 b(or)d(of)h(legal,)g(commercial,)h -(philosophical,)d(ethical)h(or)g(p)s(olitical)e(p)s(osition)h -(regarding)330 408 y(them.)330 549 y(The)25 b(\\In)m(v)-5 -b(arian)m(t)26 b(Sections")g(are)g(certain)f(Secondary)h(Sections)f -(whose)g(titles)g(are)h(designated,)h(as)330 659 y(b)s(eing)e(those)i -(of)g(In)m(v)-5 b(arian)m(t)26 b(Sections,)i(in)d(the)i(notice)g(that)g -(sa)m(ys)g(that)g(the)g(Do)s(cumen)m(t)g(is)f(released)330 -769 y(under)g(this)h(License.)39 b(If)27 b(a)h(section)g(do)s(es)g(not) -f(\014t)h(the)g(ab)s(o)m(v)m(e)h(de\014nition)c(of)j(Secondary)f(then)h -(it)f(is)330 878 y(not)32 b(allo)m(w)m(ed)g(to)g(b)s(e)g(designated)f -(as)h(In)m(v)-5 b(arian)m(t.)45 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f -(con)m(tain)h(zero)f(In)m(v)-5 b(arian)m(t)330 988 y(Sections.)38 -b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)e(an)m(y)i -(In)m(v)-5 b(arian)m(t)24 b(Sections)h(then)f(there)h(are)g(none.)330 -1129 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)f -(short)h(passages)g(of)g(text)g(that)h(are)f(listed,)g(as)f(F)-8 +TeXDict begin 132 137 bop 150 -116 a Ft(132)2527 b(Bash)31 +b(Reference)g(Man)m(ual)330 299 y(matters,)38 b(or)d(of)h(legal,)i +(commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s +(osition)f(regarding)330 408 y(them.)330 549 y(The)25 +b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g +(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 +659 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 +b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s +(cumen)m(t)g(is)g(released)330 769 y(under)f(this)i(License.)40 +b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h +(de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 878 +y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 +b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) +e(In)m(v)-5 b(arian)m(t)330 988 y(Sections.)39 b(If)25 +b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) +-5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 +1129 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g +(short)g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 1238 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m -(er)j(T)-8 b(exts,)27 b(in)c(the)i(notice)h(that)f(sa)m(ys)h(that)g -(the)f(Do)s(cumen)m(t)h(is)e(released)g(under)330 1348 -y(this)h(License.)39 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 +(er)j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g +(the)f(Do)s(cumen)m(t)h(is)f(released)g(under)330 1348 +y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a) g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 1457 y(b)s(e)k(at)h(most)g(25)g(w)m(ords.)330 1598 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g(the)f(Do)s(cumen)m(t)h -(means)g(a)g(mac)m(hine-readable)f(cop)m(y)-8 b(,)38 -b(represen)m(ted)330 1708 y(in)c(a)i(format)g(whose)g(sp)s -(eci\014cation)e(is)h(a)m(v)-5 b(ailable)35 b(to)i(the)f(general)f -(public,)g(that)h(is)f(suitable)f(for)330 1817 y(revising)c(the)i(do)s -(cumen)m(t)f(straigh)m(tforw)m(ardly)g(with)f(generic)i(text)h(editors) -e(or)g(\(for)h(images)g(com-)330 1927 y(p)s(osed)23 b(of)h(pixels\))e -(generic)i(pain)m(t)f(programs)h(or)f(\(for)h(dra)m(wings\))f(some)h -(widely)e(a)m(v)-5 b(ailable)23 b(dra)m(wing)330 2037 -y(editor,)29 b(and)g(that)g(is)f(suitable)g(for)h(input)e(to)j(text)g -(formatters)f(or)g(for)g(automatic)h(translation)e(to)330 -2146 y(a)f(v)-5 b(ariet)m(y)27 b(of)g(formats)g(suitable)f(for)g(input) -f(to)j(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)f(an)h -(otherwise)330 2256 y(T)-8 b(ransparen)m(t)37 b(\014le)g(format)h +(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 +b(represen)m(ted)330 1708 y(in)d(a)h(format)g(whose)g(sp)s +(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g +(public,)h(that)f(is)g(suitable)g(for)330 1817 y(revising)c(the)g(do)s +(cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) +f(or)f(\(for)h(images)h(com-)330 1927 y(p)s(osed)23 b(of)h(pixels\))g +(generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g +(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 2037 +y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g +(formatters)f(or)g(for)g(automatic)i(translation)f(to)330 +2146 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) +g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g +(otherwise)330 2256 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f -(arranged)g(to)330 2365 y(th)m(w)m(art)27 b(or)g(discourage)f -(subsequen)m(t)g(mo)s(di\014cation)f(b)m(y)i(readers)f(is)f(not)i(T)-8 +(arranged)g(to)330 2365 y(th)m(w)m(art)27 b(or)g(discourage)g +(subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2475 y(format)35 -b(is)e(not)i(T)-8 b(ransparen)m(t)34 b(if)f(used)h(for)g(an)m(y)g -(substan)m(tial)f(amoun)m(t)i(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g -(is)330 2585 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)e(called)h -(\\Opaque".)330 2725 y(Examples)52 b(of)h(suitable)f(formats)h(for)g(T) --8 b(ransparen)m(t)53 b(copies)g(include)e(plain)g Fl(asci)r(i)i -Ft(without)330 2835 y(markup,)41 b(T)-8 b(exinfo)39 b(input)f(format,)k -(LaT)1775 2855 y(E)1826 2835 y(X)d(input)f(format,)43 -b Fl(sgml)c Ft(or)g Fl(xml)g Ft(using)f(a)i(publicly)330 -2945 y(a)m(v)-5 b(ailable)31 b Fl(dtd)p Ft(,)g(and)g -(standard-conforming)f(simple)g Fl(html)p Ft(,)h(P)m(ostScript)g(or)g -Fl(pdf)g Ft(designed)f(for)330 3054 y(h)m(uman)37 b(mo)s(di\014cation.) -63 b(Examples)37 b(of)h(transparen)m(t)g(image)h(formats)f(include)e -Fl(png)p Ft(,)k Fl(x)n(cf)e Ft(and)330 3164 y Fl(jpg)p -Ft(.)63 b(Opaque)38 b(formats)g(include)e(proprietary)h(formats)h(that) -h(can)f(b)s(e)g(read)g(and)f(edited)h(only)330 3273 y(b)m(y)h -(proprietary)f(w)m(ord)h(pro)s(cessors,)j Fl(sgml)c Ft(or)i -Fl(xml)e Ft(for)i(whic)m(h)e(the)h Fl(dtd)g Ft(and/or)g(pro)s(cessing) -330 3383 y(to)s(ols)31 b(are)g(not)g(generally)f(a)m(v)-5 -b(ailable,)31 b(and)f(the)h(mac)m(hine-generated)h Fl(html)p -Ft(,)e(P)m(ostScript)h(or)g Fl(pdf)330 3493 y Ft(pro)s(duced)e(b)m(y)h +b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g +(substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g +(is)330 2585 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i +(\\Opaque".)330 2725 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) +-8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fl(asci)r(i)g +Ft(without)330 2835 y(markup,)41 b(T)-8 b(exinfo)40 b(input)f(format,)j +(LaT)1775 2855 y(E)1826 2835 y(X)d(input)g(format,)k +Fl(sgml)c Ft(or)g Fl(xml)g Ft(using)g(a)h(publicly)330 +2945 y(a)m(v)-5 b(ailable)34 b Fl(dtd)p Ft(,)d(and)g +(standard-conforming)g(simple)h Fl(html)p Ft(,)f(P)m(ostScript)h(or)f +Fl(pdf)g Ft(designed)g(for)330 3054 y(h)m(uman)37 b(mo)s(di\014cation.) +65 b(Examples)38 b(of)g(transparen)m(t)g(image)i(formats)e(include)g +Fl(png)p Ft(,)i Fl(x)n(cf)e Ft(and)330 3164 y Fl(jpg)p +Ft(.)63 b(Opaque)38 b(formats)g(include)g(proprietary)g(formats)g(that) +h(can)f(b)s(e)g(read)g(and)f(edited)i(only)330 3273 y(b)m(y)g +(proprietary)g(w)m(ord)g(pro)s(cessors,)j Fl(sgml)c Ft(or)i +Fl(xml)e Ft(for)i(whic)m(h)f(the)g Fl(dtd)g Ft(and/or)g(pro)s(cessing) +330 3383 y(to)s(ols)32 b(are)f(not)g(generally)h(a)m(v)-5 +b(ailable,)34 b(and)c(the)h(mac)m(hine-generated)i Fl(html)p +Ft(,)d(P)m(ostScript)i(or)f Fl(pdf)330 3493 y Ft(pro)s(duced)e(b)m(y)h (some)h(w)m(ord)f(pro)s(cessors)g(for)g(output)g(purp)s(oses)e(only)-8 -b(.)330 3634 y(The)34 b(\\Title)f(P)m(age")k(means,)e(for)f(a)h(prin)m -(ted)e(b)s(o)s(ok,)i(the)f(title)g(page)h(itself,)f(plus)f(suc)m(h)g -(follo)m(wing)330 3743 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)f -(legibly)-8 b(,)27 b(the)h(material)f(this)g(License)g(requires)f(to)i -(app)s(ear)f(in)g(the)330 3853 y(title)f(page.)40 b(F)-8 -b(or)28 b(w)m(orks)e(in)f(formats)i(whic)m(h)f(do)g(not)h(ha)m(v)m(e)h -(an)m(y)e(title)h(page)g(as)g(suc)m(h,)g(\\Title)f(P)m(age")330 -3962 y(means)31 b(the)f(text)i(near)e(the)h(most)g(prominen)m(t)f(app)s -(earance)g(of)h(the)g(w)m(ork's)g(title,)f(preceding)g(the)330 -4072 y(b)s(eginning)e(of)i(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 -4213 y(A)f(section)g(\\En)m(titled)f(XYZ")h(means)f(a)h(named)g -(subunit)d(of)i(the)h(Do)s(cumen)m(t)h(whose)e(title)g(either)330 -4322 y(is)e(precisely)f(XYZ)i(or)f(con)m(tains)h(XYZ)g(in)e(paren)m -(theses)j(follo)m(wing)d(text)j(that)f(translates)g(XYZ)f(in)330 -4432 y(another)e(language.)39 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g -(sp)s(eci\014c)f(section)h(name)g(men)m(tioned)g(b)s(elo)m(w,)g(suc)m -(h)330 4542 y(as)j(\\Ac)m(kno)m(wledgemen)m(ts",)k(\\Dedications",)d -(\\Endorsemen)m(ts",)g(or)f(\\History".\))41 b(T)-8 b(o)29 -b(\\Preserv)m(e)330 4651 y(the)34 b(Title")f(of)g(suc)m(h)h(a)g -(section)f(when)g(y)m(ou)h(mo)s(dify)d(the)j(Do)s(cumen)m(t)h(means)e -(that)h(it)f(remains)g(a)330 4761 y(section)e(\\En)m(titled)e(XYZ")i -(according)f(to)h(this)f(de\014nition.)330 4902 y(The)d(Do)s(cumen)m(t) -i(ma)m(y)f(include)d(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)c(next)i(to) -g(the)g(notice)g(whic)m(h)e(states)j(that)330 5011 y(this)k(License)g -(applies)f(to)j(the)f(Do)s(cumen)m(t.)52 b(These)33 b(W)-8 -b(arran)m(t)m(y)36 b(Disclaimers)c(are)j(considered)d(to)330 -5121 y(b)s(e)37 b(included)e(b)m(y)i(reference)h(in)f(this)f(License,)j -(but)e(only)g(as)h(regards)f(disclaiming)e(w)m(arran)m(ties:)330 -5230 y(an)m(y)i(other)g(implication)e(that)i(these)g(W)-8 -b(arran)m(t)m(y)39 b(Disclaimers)c(ma)m(y)j(ha)m(v)m(e)g(is)e(v)m(oid)g -(and)g(has)h(no)330 5340 y(e\013ect)32 b(on)e(the)h(meaning)e(of)i -(this)e(License.)p eop +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 +(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 +3962 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s +(earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 +4072 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 +4213 y(A)f(section)h(\\En)m(titled)g(XYZ")f(means)f(a)h(named)g +(subunit)e(of)h(the)h(Do)s(cumen)m(t)h(whose)e(title)i(either)330 +4322 y(is)d(precisely)g(XYZ)g(or)f(con)m(tains)i(XYZ)f(in)f(paren)m +(theses)i(follo)m(wing)g(text)g(that)f(translates)h(XYZ)e(in)330 +4432 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g +(sp)s(eci\014c)g(section)h(name)f(men)m(tioned)h(b)s(elo)m(w,)g(suc)m +(h)330 4542 y(as)i(\\Ac)m(kno)m(wledgemen)m(ts",)33 b(\\Dedications",)e +(\\Endorsemen)m(ts",)e(or)f(\\History".\))42 b(T)-8 b(o)29 +b(\\Preserv)m(e)330 4651 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g +(section)g(when)f(y)m(ou)h(mo)s(dify)e(the)i(Do)s(cumen)m(t)h(means)e +(that)h(it)g(remains)g(a)330 4761 y(section)e(\\En)m(titled)f(XYZ")g +(according)g(to)g(this)g(de\014nition.)330 4902 y(The)c(Do)s(cumen)m(t) +i(ma)m(y)f(include)f(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to) +g(the)g(notice)h(whic)m(h)e(states)i(that)330 5011 y(this)34 +b(License)g(applies)g(to)h(the)f(Do)s(cumen)m(t.)52 b(These)33 +b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 +5121 y(b)s(e)k(included)g(b)m(y)g(reference)h(in)g(this)f(License,)j +(but)d(only)h(as)g(regards)f(disclaiming)i(w)m(arran)m(ties:)330 +5230 y(an)m(y)e(other)g(implication)i(that)e(these)g(W)-8 +b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g +(and)f(has)h(no)330 5340 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h +(this)f(License.)p eop end %%Page: 133 139 -133 138 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g -(Man)m(ual)2062 b(133)199 299 y(2.)61 b(VERBA)-8 b(TIM)31 -b(COPYING)330 445 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute) -f(the)i(Do)s(cumen)m(t)h(in)e(an)m(y)h(medium,)g(either)g(commercially) -f(or)330 555 y(noncommercially)-8 b(,)45 b(pro)m(vided)c(that)i(this)e -(License,)46 b(the)c(cop)m(yrigh)m(t)h(notices,)j(and)c(the)h(license) -330 664 y(notice)36 b(sa)m(ying)g(this)e(License)i(applies)d(to)k(the)f -(Do)s(cumen)m(t)g(are)g(repro)s(duced)e(in)h(all)f(copies,)k(and)330 -774 y(that)27 b(y)m(ou)g(add)f(no)h(other)f(conditions)f(whatso)s(ev)m -(er)j(to)f(those)g(of)g(this)e(License.)39 b(Y)-8 b(ou)27 -b(ma)m(y)g(not)g(use)330 883 y(tec)m(hnical)33 b(measures)f(to)i -(obstruct)f(or)g(con)m(trol)g(the)g(reading)f(or)h(further)e(cop)m -(ying)i(of)g(the)g(copies)330 993 y(y)m(ou)25 b(mak)m(e)g(or)g -(distribute.)36 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h -(comp)s(ensation)e(in)f(exc)m(hange)k(for)d(copies.)330 -1103 y(If)32 b(y)m(ou)g(distribute)e(a)j(large)f(enough)g(n)m(um)m(b)s -(er)f(of)h(copies)g(y)m(ou)g(m)m(ust)h(also)f(follo)m(w)f(the)h -(conditions)330 1212 y(in)d(section)i(3.)330 1358 y(Y)-8 -b(ou)21 b(ma)m(y)h(also)e(lend)g(copies,)i(under)e(the)h(same)g -(conditions)e(stated)j(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g -(publicly)330 1468 y(displa)m(y)29 b(copies.)199 1614 +TeXDict begin 133 138 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(133)199 299 +y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)330 445 y(Y)-8 +b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h(the)g(Do)s(cumen)m(t)h +(in)f(an)m(y)g(medium,)h(either)g(commercially)h(or)330 +555 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f +(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j(and)42 +b(the)h(license)330 664 y(notice)37 b(sa)m(ying)g(this)e(License)i +(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e(in)i(all)g +(copies,)j(and)330 774 y(that)27 b(y)m(ou)g(add)f(no)h(other)f +(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f(License.)40 +b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 883 y(tec)m(hnical)35 +b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h(the)f(reading)g(or)g +(further)e(cop)m(ying)j(of)f(the)g(copies)330 993 y(y)m(ou)25 +b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 +b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d +(copies.)330 1103 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f +(n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g +(the)f(conditions)330 1212 y(in)e(section)i(3.)330 1358 +y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g +(conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g +(publicly)330 1468 y(displa)m(y)31 b(copies.)199 1614 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1760 y(If)25 -b(y)m(ou)g(publish)d(prin)m(ted)h(copies)i(\(or)h(copies)f(in)f(media)g -(that)i(commonly)f(ha)m(v)m(e)h(prin)m(ted)e(co)m(v)m(ers\))j(of)330 -1870 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)d(more)i(than)f -(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)d(notice)i(requires)330 -1979 y(Co)m(v)m(er)j(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)h -(the)f(copies)g(in)f(co)m(v)m(ers)j(that)f(carry)-8 b(,)36 -b(clearly)d(and)h(legibly)-8 b(,)34 b(all)330 2089 y(these)40 -b(Co)m(v)m(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 +b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g +(that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 +1870 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f +(100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 +1979 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i +(the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 +b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 2089 y(these)j(Co)m(v)m +(er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2198 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) -m(ust)e(also)g(clearly)f(and)h(legibly)e(iden)m(tify)g(y)m(ou)j(as)f -(the)h(publisher)330 2308 y(of)k(these)h(copies.)52 b(The)34 -b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)d(title)i -(with)e(all)i(w)m(ords)f(of)i(the)f(title)330 2418 y(equally)c -(prominen)m(t)f(and)h(visible.)40 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g -(other)g(material)f(on)h(the)g(co)m(v)m(ers)h(in)d(addition.)330 -2527 y(Cop)m(ying)35 b(with)g(c)m(hanges)i(limited)d(to)j(the)g(co)m(v) -m(ers,)i(as)d(long)g(as)h(they)f(preserv)m(e)g(the)h(title)e(of)i(the) -330 2637 y(Do)s(cumen)m(t)h(and)e(satisfy)h(these)g(conditions,)h(can)f -(b)s(e)g(treated)h(as)f(v)m(erbatim)g(cop)m(ying)g(in)f(other)330 -2746 y(resp)s(ects.)330 2892 y(If)c(the)h(required)e(texts)j(for)e -(either)g(co)m(v)m(er)j(are)e(to)s(o)g(v)m(oluminous)e(to)i(\014t)g -(legibly)-8 b(,)32 b(y)m(ou)h(should)e(put)330 3002 y(the)i(\014rst)f -(ones)h(listed)e(\(as)j(man)m(y)f(as)g(\014t)g(reasonably\))f(on)h(the) -g(actual)g(co)m(v)m(er,)i(and)e(con)m(tin)m(ue)g(the)330 -3112 y(rest)e(on)m(to)g(adjacen)m(t)h(pages.)330 3258 -y(If)27 b(y)m(ou)g(publish)c(or)k(distribute)e(Opaque)h(copies)h(of)g -(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)e(more)j(than)e(100,)330 -3367 y(y)m(ou)i(m)m(ust)g(either)g(include)d(a)k(mac)m(hine-readable)e -(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)f(with)e(eac)m(h)j(Opaque) -330 3477 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)e(or)h(with)f(eac)m(h)i -(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)f(from)f -(whic)m(h)330 3587 y(the)24 b(general)h(net)m(w)m(ork-using)f(public)d -(has)j(access)i(to)f(do)m(wnload)e(using)g(public-standard)e(net)m(w)m -(ork)330 3696 y(proto)s(cols)39 b(a)g(complete)g(T)-8 +m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f +(the)h(publisher)330 2308 y(of)k(these)h(copies.)53 b(The)34 +b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i +(with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2418 y(equally)e +(prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g +(other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 +2527 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) +m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) +330 2637 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d +(b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 +2746 y(resp)s(ects.)330 2892 y(If)32 b(the)h(required)f(texts)i(for)e +(either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g +(legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 3002 y(the)h(\014rst)f +(ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) +g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 +3112 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3258 +y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f +(the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 +3367 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g +(T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) +330 3477 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h +(Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d +(whic)m(h)330 3587 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e +(has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m +(ork)330 3696 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g -(added)f(material.)65 b(If)330 3806 y(y)m(ou)39 b(use)g(the)g(latter)g -(option,)h(y)m(ou)g(m)m(ust)e(tak)m(e)j(reasonably)d(pruden)m(t)f -(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3915 y(distribution)c(of)j -(Opaque)g(copies)g(in)e(quan)m(tit)m(y)-8 b(,)42 b(to)c(ensure)g(that)h -(this)e(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 -4025 y(remain)29 b(th)m(us)h(accessible)g(at)h(the)f(stated)h(lo)s -(cation)f(un)m(til)e(at)j(least)g(one)f(y)m(ear)h(after)g(the)f(last)g -(time)330 4134 y(y)m(ou)37 b(distribute)d(an)j(Opaque)f(cop)m(y)i -(\(directly)e(or)g(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))f -(of)h(that)330 4244 y(edition)29 b(to)i(the)g(public.)330 -4390 y(It)k(is)e(requested,)j(but)e(not)h(required,)f(that)h(y)m(ou)g +(added)f(material.)67 b(If)330 3806 y(y)m(ou)39 b(use)g(the)g(latter)h +(option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e +(steps,)k(when)d(y)m(ou)h(b)s(egin)330 3915 y(distribution)f(of)g +(Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 +b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 +4025 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s +(cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h +(time)330 4134 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i +(\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h +(of)f(that)330 4244 y(edition)31 b(to)g(the)g(public.)330 +4390 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 -4500 y(b)s(efore)28 b(redistributing)d(an)m(y)k(large)g(n)m(um)m(b)s -(er)e(of)i(copies,)g(to)g(giv)m(e)g(them)g(a)g(c)m(hance)h(to)f(pro)m -(vide)f(y)m(ou)330 4609 y(with)h(an)h(up)s(dated)f(v)m(ersion)h(of)h +4500 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s +(er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m +(vide)g(y)m(ou)330 4609 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4755 y(4.)61 b(MODIFICA)-8 -b(TIONS)330 4902 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)e(a) -j(Mo)s(di\014ed)e(V)-8 b(ersion)25 b(of)h(the)g(Do)s(cumen)m(t)g(under) -e(the)h(conditions)330 5011 y(of)c(sections)g(2)h(and)e(3)h(ab)s(o)m(v) -m(e,)k(pro)m(vided)19 b(that)j(y)m(ou)f(release)h(the)f(Mo)s(di\014ed)e -(V)-8 b(ersion)21 b(under)e(precisely)330 5121 y(this)28 -b(License,)h(with)f(the)h(Mo)s(di\014ed)e(V)-8 b(ersion)29 -b(\014lling)d(the)j(role)g(of)g(the)g(Do)s(cumen)m(t,)h(th)m(us)f -(licensing)330 5230 y(distribution)h(and)k(mo)s(di\014cation)e(of)j -(the)f(Mo)s(di\014ed)e(V)-8 b(ersion)34 b(to)h(who)s(ev)m(er)f(p)s -(ossesses)f(a)i(cop)m(y)g(of)330 5340 y(it.)40 b(In)30 -b(addition,)f(y)m(ou)h(m)m(ust)h(do)f(these)h(things)e(in)g(the)i(Mo)s -(di\014ed)d(V)-8 b(ersion:)p eop +b(TIONS)330 4902 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) +h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) +e(the)h(conditions)330 5011 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) +m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f +(V)-8 b(ersion)22 b(under)d(precisely)330 5121 y(this)29 +b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 +b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f +(licensing)330 5230 y(distribution)k(and)h(mo)s(di\014cation)g(of)h +(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s +(ossesses)f(a)i(cop)m(y)g(of)330 5340 y(it.)41 b(In)30 +b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s +(di\014ed)e(V)-8 b(ersion:)p eop end %%Page: 134 140 -134 139 bop 150 -116 a Ft(134)2527 b(Bash)31 b(Reference)g(Man)m(ual) -357 299 y(A.)60 b(Use)33 b(in)e(the)i(Title)f(P)m(age)i(\(and)f(on)f -(the)h(co)m(v)m(ers,)i(if)d(an)m(y\))h(a)g(title)f(distinct)f(from)i -(that)g(of)g(the)510 408 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f -(previous)e(v)m(ersions)h(\(whic)m(h)g(should,)g(if)g(there)h(w)m(ere)g -(an)m(y)-8 b(,)510 518 y(b)s(e)31 b(listed)f(in)g(the)h(History)g -(section)g(of)h(the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 -b(ma)m(y)g(use)f(the)g(same)h(title)f(as)510 628 y(a)g(previous)e(v)m -(ersion)g(if)h(the)g(original)f(publisher)e(of)j(that)h(v)m(ersion)f -(giv)m(es)h(p)s(ermission.)360 758 y(B.)61 b(List)30 -b(on)g(the)h(Title)e(P)m(age,)k(as)d(authors,)h(one)g(or)f(more)h(p)s -(ersons)e(or)h(en)m(tities)h(resp)s(onsible)c(for)510 -867 y(authorship)d(of)i(the)h(mo)s(di\014cations)d(in)h(the)h(Mo)s -(di\014ed)e(V)-8 b(ersion,)27 b(together)h(with)c(at)j(least)g(\014v)m -(e)510 977 y(of)d(the)g(principal)d(authors)i(of)i(the)f(Do)s(cumen)m -(t)g(\(all)f(of)i(its)e(principal)e(authors,)k(if)e(it)g(has)h(few)m -(er)510 1087 y(than)30 b(\014v)m(e\),)h(unless)e(they)i(release)f(y)m -(ou)h(from)f(this)f(requiremen)m(t.)359 1217 y(C.)60 -b(State)32 b(on)e(the)h(Title)f(page)h(the)g(name)g(of)g(the)g -(publisher)c(of)k(the)g(Mo)s(di\014ed)e(V)-8 b(ersion,)31 -b(as)g(the)510 1326 y(publisher.)355 1456 y(D.)61 b(Preserv)m(e)31 -b(all)e(the)i(cop)m(yrigh)m(t)g(notices)f(of)h(the)f(Do)s(cumen)m(t.) -363 1587 y(E.)60 b(Add)30 b(an)i(appropriate)e(cop)m(yrigh)m(t)i -(notice)f(for)h(y)m(our)f(mo)s(di\014cations)e(adjacen)m(t)k(to)f(the)g -(other)510 1696 y(cop)m(yrigh)m(t)f(notices.)365 1826 -y(F.)61 b(Include,)27 b(immediately)f(after)i(the)h(cop)m(yrigh)m(t)f -(notices,)h(a)f(license)f(notice)h(giving)f(the)h(public)510 -1936 y(p)s(ermission)21 b(to)26 b(use)e(the)g(Mo)s(di\014ed)f(V)-8 -b(ersion)24 b(under)f(the)i(terms)f(of)h(this)e(License,)j(in)d(the)h -(form)510 2045 y(sho)m(wn)30 b(in)f(the)h(Addendum)f(b)s(elo)m(w.)353 -2176 y(G.)61 b(Preserv)m(e)23 b(in)f(that)h(license)f(notice)h(the)g -(full)e(lists)g(of)i(In)m(v)-5 b(arian)m(t)22 b(Sections)h(and)f -(required)f(Co)m(v)m(er)510 2285 y(T)-8 b(exts)31 b(giv)m(en)f(in)f -(the)i(Do)s(cumen)m(t's)g(license)f(notice.)357 2415 -y(H.)60 b(Include)29 b(an)h(unaltered)f(cop)m(y)i(of)g(this)e(License.) -392 2545 y(I.)60 b(Preserv)m(e)33 b(the)f(section)g(En)m(titled)f -(\\History",)i(Preserv)m(e)g(its)e(Title,)h(and)f(add)h(to)h(it)e(an)h -(item)510 2655 y(stating)c(at)h(least)f(the)h(title,)f(y)m(ear,)i(new)d -(authors,)i(and)e(publisher)d(of)29 b(the)f(Mo)s(di\014ed)e(V)-8 -b(ersion)510 2765 y(as)32 b(giv)m(en)f(on)g(the)h(Title)e(P)m(age.)45 -b(If)31 b(there)h(is)e(no)h(section)h(En)m(titled)e(\\History")i(in)e -(the)h(Do)s(cu-)510 2874 y(men)m(t,)37 b(create)f(one)f(stating)g(the)g -(title,)g(y)m(ear,)i(authors,)f(and)e(publisher)d(of)k(the)g(Do)s -(cumen)m(t)510 2984 y(as)h(giv)m(en)g(on)g(its)g(Title)f(P)m(age,)k -(then)d(add)g(an)g(item)f(describing)f(the)i(Mo)s(di\014ed)f(V)-8 -b(ersion)36 b(as)510 3093 y(stated)31 b(in)e(the)i(previous)e(sen)m +TeXDict begin 134 139 bop 150 -116 a Ft(134)2527 b(Bash)31 +b(Reference)g(Man)m(ual)357 299 y(A.)60 b(Use)33 b(in)f(the)h(Title)h +(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e(an)m(y\))g(a)g +(title)h(distinct)f(from)g(that)g(of)g(the)510 408 y(Do)s(cumen)m(t,)j +(and)d(from)g(those)i(of)f(previous)f(v)m(ersions)h(\(whic)m(h)g +(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)510 518 +y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g(the)f(Do)s +(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same)h(title)h +(as)510 628 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original)i +(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 +758 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h +(one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c +(for)510 867 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g +(Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h +(\014v)m(e)510 977 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s +(cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g +(few)m(er)510 1087 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g +(y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1217 y(C.)60 +b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g +(publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 +b(as)f(the)510 1326 y(publisher.)355 1456 y(D.)61 b(Preserv)m(e)31 +b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) +363 1587 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i +(notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g +(other)510 1696 y(cop)m(yrigh)m(t)g(notices.)365 1826 +y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g +(notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 +1936 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g +(form)510 2045 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 +2176 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f +(full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e +(required)g(Co)m(v)m(er)510 2285 y(T)-8 b(exts)31 b(giv)m(en)g(in)f +(the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2415 +y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) +392 2545 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g +(\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g +(item)510 2655 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d +(authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 +b(ersion)510 2765 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 +b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e +(the)g(Do)s(cu-)510 2874 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f +(title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s +(cumen)m(t)510 2984 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i +(then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 +b(ersion)37 b(as)510 3093 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3224 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s -(cation,)g(if)e(an)m(y)-8 b(,)34 b(giv)m(en)e(in)g(the)g(Do)s(cumen)m -(t)h(for)g(public)c(access)34 b(to)510 3333 y(a)e(T)-8 -b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m -(ewise)e(the)j(net)m(w)m(ork)g(lo)s(cations)e(giv)m(en)h(in)510 -3443 y(the)h(Do)s(cumen)m(t)g(for)g(previous)e(v)m(ersions)h(it)g(w)m -(as)h(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)g(in)g(the) -510 3552 y(\\History")26 b(section.)39 b(Y)-8 b(ou)25 -b(ma)m(y)h(omit)f(a)g(net)m(w)m(ork)h(lo)s(cation)e(for)h(a)h(w)m(ork)f -(that)g(w)m(as)h(published)510 3662 y(at)36 b(least)g(four)f(y)m(ears)i -(b)s(efore)e(the)h(Do)s(cumen)m(t)h(itself,)f(or)f(if)g(the)h(original) -e(publisher)e(of)k(the)510 3771 y(v)m(ersion)30 b(it)g(refers)g(to)h -(giv)m(es)g(p)s(ermission.)354 3902 y(K.)60 b(F)-8 b(or)24 -b(an)m(y)h(section)e(En)m(titled)g(\\Ac)m(kno)m(wledgemen)m(ts")j(or)e -(\\Dedications",)i(Preserv)m(e)e(the)g(Title)510 4011 -y(of)j(the)f(section,)i(and)e(preserv)m(e)h(in)e(the)i(section)f(all)g -(the)g(substance)h(and)f(tone)h(of)f(eac)m(h)i(of)f(the)510 -4121 y(con)m(tributor)j(ac)m(kno)m(wledgemen)m(ts)i(and/or)e -(dedications)f(giv)m(en)i(therein.)368 4251 y(L.)60 b(Preserv)m(e)36 -b(all)e(the)i(In)m(v)-5 b(arian)m(t)35 b(Sections)g(of)g(the)h(Do)s -(cumen)m(t,)h(unaltered)e(in)f(their)g(text)j(and)510 -4361 y(in)e(their)g(titles.)56 b(Section)36 b(n)m(um)m(b)s(ers)e(or)i -(the)g(equiv)-5 b(alen)m(t)36 b(are)g(not)g(considered)f(part)h(of)g -(the)510 4470 y(section)31 b(titles.)341 4600 y(M.)61 -b(Delete)32 b(an)m(y)f(section)g(En)m(titled)e(\\Endorsemen)m(ts".)42 -b(Suc)m(h)30 b(a)i(section)e(ma)m(y)i(not)f(b)s(e)f(included)510 -4710 y(in)f(the)i(Mo)s(di\014ed)d(V)-8 b(ersion.)357 -4840 y(N.)60 b(Do)29 b(not)g(retitle)f(an)m(y)g(existing)g(section)g -(to)h(b)s(e)f(En)m(titled)f(\\Endorsemen)m(ts")i(or)f(to)h(con\015ict)f -(in)510 4950 y(title)i(with)f(an)m(y)i(In)m(v)-5 b(arian)m(t)30 +(cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m +(t)h(for)g(public)e(access)j(to)510 3333 y(a)e(T)-8 b(ransparen)m(t)30 +b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) +m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3443 y(the)g(Do)s(cumen)m +(t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 +b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3552 +y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) +m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h +(published)510 3662 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e +(the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) +d(of)i(the)510 3771 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s +(ermission.)354 3902 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m +(titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k +(Preserv)m(e)c(the)g(Title)510 4011 y(of)j(the)f(section,)j(and)d +(preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) +h(of)f(eac)m(h)i(of)f(the)510 4121 y(con)m(tributor)k(ac)m(kno)m +(wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 +4251 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 +b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f +(in)f(their)g(text)i(and)510 4361 y(in)f(their)g(titles.)58 +b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 +b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 +4470 y(section)c(titles.)341 4600 y(M.)61 b(Delete)33 +b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 +b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 +4710 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 +4840 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f +(to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g +(in)510 4950 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 5080 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 -b(arran)m(t)m(y)32 b(Disclaimers.)330 5230 y(If)h(the)g(Mo)s(di\014ed)f -(V)-8 b(ersion)33 b(includes)e(new)i(fron)m(t-matter)i(sections)e(or)g -(app)s(endices)f(that)i(qualify)330 5340 y(as)28 b(Secondary)g -(Sections)f(and)g(con)m(tain)i(no)e(material)h(copied)f(from)g(the)h -(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)p eop +b(arran)m(t)m(y)32 b(Disclaimers.)330 5230 y(If)h(the)g(Mo)s(di\014ed)g +(V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f +(app)s(endices)g(that)h(qualify)330 5340 y(as)28 b(Secondary)g +(Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h +(Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)p eop end %%Page: 135 141 -135 140 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g -(Man)m(ual)2062 b(135)330 299 y(y)m(our)32 b(option)g(designate)h(some) -f(or)h(all)e(of)h(these)h(sections)g(as)f(in)m(v)-5 b(arian)m(t.)46 -b(T)-8 b(o)33 b(do)f(this,)g(add)g(their)330 408 y(titles)j(to)h(the)f -(list)f(of)i(In)m(v)-5 b(arian)m(t)35 b(Sections)g(in)f(the)i(Mo)s -(di\014ed)e(V)-8 b(ersion's)35 b(license)f(notice.)56 -b(These)330 518 y(titles)30 b(m)m(ust)g(b)s(e)g(distinct)f(from)g(an)m -(y)i(other)g(section)f(titles.)330 650 y(Y)-8 b(ou)43 -b(ma)m(y)g(add)f(a)g(section)h(En)m(titled)e(\\Endorsemen)m(ts",)46 -b(pro)m(vided)41 b(it)h(con)m(tains)g(nothing)g(but)330 -759 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s(di\014ed)f(V)-8 -b(ersion)30 b(b)m(y)f(v)-5 b(arious)29 b(parties|for)g(example,)g -(statemen)m(ts)j(of)330 869 y(p)s(eer)27 b(review)f(or)h(that)h(the)f -(text)i(has)d(b)s(een)h(appro)m(v)m(ed)g(b)m(y)g(an)h(organization)f -(as)g(the)h(authoritativ)m(e)330 978 y(de\014nition)g(of)j(a)f -(standard.)330 1110 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g -(up)e(to)i(\014v)m(e)g(w)m(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er) -30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 -1219 y(to)g(25)g(w)m(ords)e(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 -b(ext,)29 b(to)f(the)f(end)f(of)i(the)f(list)f(of)h(Co)m(v)m(er)h(T)-8 -b(exts)27 b(in)f(the)i(Mo)s(di\014ed)330 1329 y(V)-8 -b(ersion.)57 b(Only)34 b(one)i(passage)h(of)f(F)-8 b(ron)m(t-Co)m(v)m -(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m(k-Co)m(v)m(er)j(T)-8 -b(ext)36 b(ma)m(y)h(b)s(e)330 1439 y(added)27 b(b)m(y)g(\(or)h(through) -f(arrangemen)m(ts)h(made)g(b)m(y\))g(an)m(y)g(one)f(en)m(tit)m(y)-8 -b(.)41 b(If)27 b(the)h(Do)s(cumen)m(t)g(already)330 1548 -y(includes)k(a)i(co)m(v)m(er)h(text)g(for)f(the)g(same)h(co)m(v)m(er,)h -(previously)c(added)h(b)m(y)h(y)m(ou)g(or)g(b)m(y)g(arrangemen)m(t)330 -1658 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m(y)h(y)m(ou)g(are)f -(acting)h(on)f(b)s(ehalf)e(of,)k(y)m(ou)f(ma)m(y)g(not)f(add)g -(another;)j(but)330 1767 y(y)m(ou)c(ma)m(y)h(replace)f(the)g(old)f -(one,)j(on)e(explicit)e(p)s(ermission)f(from)i(the)i(previous)d -(publisher)e(that)330 1877 y(added)g(the)g(old)g(one.)330 -2008 y(The)25 b(author\(s\))h(and)f(publisher\(s\))d(of)k(the)f(Do)s -(cumen)m(t)h(do)g(not)f(b)m(y)h(this)e(License)h(giv)m(e)h(p)s -(ermission)330 2118 y(to)31 b(use)f(their)f(names)i(for)f(publicit)m(y) -d(for)k(or)f(to)h(assert)g(or)f(imply)e(endorsemen)m(t)i(of)h(an)m(y)g +TeXDict begin 135 140 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(135)330 299 +y(y)m(our)32 b(option)h(designate)h(some)e(or)h(all)g(of)f(these)h +(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 +b(do)f(this,)h(add)f(their)330 408 y(titles)37 b(to)f(the)f(list)h(of)g +(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 +b(ersion's)36 b(license)g(notice.)57 b(These)330 518 +y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g +(section)g(titles.)330 650 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) +i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g +(nothing)g(but)330 759 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s +(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 +b(parties|for)g(example,)g(statemen)m(ts)i(of)330 869 +y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) +m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 +978 y(de\014nition)i(of)h(a)f(standard.)330 1110 y(Y)-8 +b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m +(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 +b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1219 y(to)g(25)g(w)m(ords)e +(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i +(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s +(di\014ed)330 1329 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f +(F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m +(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1439 +y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) +g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) +g(already)330 1548 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g +(same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m +(y)g(arrangemen)m(t)330 1658 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m +(y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g +(not)f(add)g(another;)j(but)330 1767 y(y)m(ou)c(ma)m(y)h(replace)g(the) +f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e +(publisher)f(that)330 1877 y(added)e(the)g(old)h(one.)330 +2008 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s +(cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s +(ermission)330 2118 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g +(for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2228 y(V)-8 b(ersion.)199 2359 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2491 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m -(bine)g(the)g(Do)s(cumen)m(t)g(with)f(other)g(do)s(cumen)m(ts)h -(released)f(under)g(this)f(License,)330 2600 y(under)g(the)h(terms)g -(de\014ned)f(in)g(section)h(4)h(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)e -(v)m(ersions,)k(pro)m(vided)d(that)i(y)m(ou)330 2710 -y(include)23 b(in)h(the)h(com)m(bination)g(all)f(of)i(the)f(In)m(v)-5 -b(arian)m(t)25 b(Sections)g(of)h(all)e(of)h(the)h(original)d(do)s -(cumen)m(ts,)330 2819 y(unmo)s(di\014ed,)i(and)h(list)f(them)i(all)e -(as)i(In)m(v)-5 b(arian)m(t)27 b(Sections)f(of)h(y)m(our)g(com)m(bined) -f(w)m(ork)g(in)g(its)g(license)330 2929 y(notice,)31 -b(and)f(that)h(y)m(ou)f(preserv)m(e)h(all)e(their)h(W)-8 -b(arran)m(t)m(y)32 b(Disclaimers.)330 3061 y(The)e(com)m(bined)f(w)m -(ork)i(need)e(only)h(con)m(tain)g(one)h(cop)m(y)g(of)f(this)f(License,) -i(and)e(m)m(ultiple)f(iden)m(tical)330 3170 y(In)m(v)-5 -b(arian)m(t)32 b(Sections)g(ma)m(y)h(b)s(e)f(replaced)g(with)f(a)i -(single)e(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)d(In)m -(v)-5 b(arian)m(t)330 3280 y(Sections)26 b(with)g(the)h(same)g(name)g -(but)f(di\013eren)m(t)g(con)m(ten)m(ts,)j(mak)m(e)f(the)f(title)f(of)h -(eac)m(h)h(suc)m(h)f(section)330 3389 y(unique)32 b(b)m(y)i(adding)e -(at)j(the)f(end)g(of)g(it,)g(in)f(paren)m(theses,)j(the)e(name)g(of)g -(the)g(original)e(author)i(or)330 3499 y(publisher)21 -b(of)k(that)h(section)f(if)f(kno)m(wn,)i(or)f(else)g(a)g(unique)e(n)m +(bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h +(released)g(under)f(this)g(License,)330 2600 y(under)f(the)h(terms)g +(de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f +(v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2710 +y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s +(cumen)m(ts,)330 2819 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g +(as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) +g(w)m(ork)f(in)h(its)g(license)330 2929 y(notice,)32 +b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 +b(arran)m(t)m(y)32 b(Disclaimers.)330 3061 y(The)e(com)m(bined)g(w)m +(ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) +i(and)d(m)m(ultiple)i(iden)m(tical)330 3170 y(In)m(v)-5 +b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h +(single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m +(v)-5 b(arian)m(t)330 3280 y(Sections)27 b(with)g(the)g(same)g(name)g +(but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f +(eac)m(h)h(suc)m(h)f(section)330 3389 y(unique)33 b(b)m(y)h(adding)f +(at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g +(the)g(original)h(author)f(or)330 3499 y(publisher)23 +b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 -3608 y(to)g(the)g(section)f(titles)g(in)f(the)i(list)e(of)h(In)m(v)-5 -b(arian)m(t)25 b(Sections)f(in)f(the)h(license)g(notice)h(of)f(the)h +3608 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 +b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3718 y(w)m(ork.)330 3850 y(In)41 b(the)g(com)m -(bination,)j(y)m(ou)d(m)m(ust)g(com)m(bine)g(an)m(y)h(sections)f(En)m -(titled)f(\\History")i(in)e(the)h(v)-5 b(ari-)330 3959 -y(ous)32 b(original)e(do)s(cumen)m(ts,)j(forming)e(one)h(section)g(En)m -(titled)f(\\History";)j(lik)m(ewise)d(com)m(bine)h(an)m(y)330 -4069 y(sections)g(En)m(titled)e(\\Ac)m(kno)m(wledgemen)m(ts",)35 -b(and)c(an)m(y)h(sections)g(En)m(titled)f(\\Dedications".)45 -b(Y)-8 b(ou)330 4178 y(m)m(ust)30 b(delete)h(all)e(sections)i(En)m -(titled)e(\\Endorsemen)m(ts.")199 4310 y(6.)61 b(COLLECTIONS)28 +(bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g +(En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 +3959 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h +(En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 +4069 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 +b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 +b(Y)-8 b(ou)330 4178 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m +(titled)f(\\Endorsemen)m(ts.")199 4310 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4441 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f -(collection)f(consisting)g(of)h(the)g(Do)s(cumen)m(t)g(and)g(other)g -(do)s(cumen)m(ts)f(released)330 4551 y(under)41 b(this)g(License,)k -(and)d(replace)g(the)h(individual)38 b(copies)k(of)g(this)f(License)h -(in)f(the)i(v)-5 b(arious)330 4661 y(do)s(cumen)m(ts)42 -b(with)f(a)i(single)e(cop)m(y)j(that)f(is)e(included)f(in)h(the)i -(collection,)i(pro)m(vided)c(that)j(y)m(ou)330 4770 y(follo)m(w)36 -b(the)i(rules)d(of)i(this)f(License)h(for)g(v)m(erbatim)g(cop)m(ying)g -(of)g(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)g(all)330 +(collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g +(do)s(cumen)m(ts)f(released)330 4551 y(under)41 b(this)h(License,)k +(and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f +(the)h(v)-5 b(arious)330 4661 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) +g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 +b(pro)m(vided)42 b(that)i(y)m(ou)330 4770 y(follo)m(w)38 +b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g +(of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4880 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 -b(ma)m(y)g(extract)h(a)f(single)e(do)s(cumen)m(t)h(from)g(suc)m(h)g(a)h -(collection,)f(and)g(distribute)e(it)i(individu-)330 -5121 y(ally)j(under)f(this)h(License,)i(pro)m(vided)e(y)m(ou)h(insert)f -(a)h(cop)m(y)h(of)f(this)f(License)g(in)m(to)h(the)h(extracted)330 -5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)g(this)f(License)h(in)g(all)f -(other)i(resp)s(ects)f(regarding)g(v)m(erbatim)g(cop)m(ying)h(of)330 -5340 y(that)e(do)s(cumen)m(t.)p eop +b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h +(collection,)i(and)d(distribute)g(it)h(individu-)330 +5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g +(a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 +5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g +(other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 +5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 136 142 -136 141 bop 150 -116 a Ft(136)2527 b(Bash)31 b(Reference)g(Man)m(ual) -199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h(W)m -(ORKS)330 428 y(A)d(compilation)f(of)h(the)g(Do)s(cumen)m(t)h(or)f(its) -f(deriv)-5 b(ativ)m(es)28 b(with)e(other)j(separate)g(and)e(indep)s -(enden)m(t)330 538 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)e(or)i -(on)f(a)g(v)m(olume)g(of)h(a)f(storage)i(or)e(distribution)d(medium,)i -(is)h(called)330 648 y(an)d(\\aggregate")k(if)29 b(the)h(cop)m(yrigh)m -(t)h(resulting)d(from)h(the)i(compilation)d(is)h(not)i(used)e(to)i -(limit)d(the)330 757 y(legal)e(righ)m(ts)g(of)h(the)g(compilation's)e -(users)h(b)s(ey)m(ond)g(what)g(the)h(individual)22 b(w)m(orks)k(p)s -(ermit.)38 b(When)330 867 y(the)28 b(Do)s(cumen)m(t)g(is)f(included)e -(an)i(aggregate,)32 b(this)26 b(License)h(do)s(es)h(not)g(apply)e(to)i -(the)g(other)g(w)m(orks)330 976 y(in)h(the)i(aggregate)i(whic)m(h)c -(are)i(not)f(themselv)m(es)h(deriv)-5 b(ativ)m(e)30 b(w)m(orks)g(of)h -(the)f(Do)s(cumen)m(t.)330 1106 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 -b(ext)23 b(requiremen)m(t)f(of)h(section)g(3)g(is)f(applicable)f(to)i -(these)h(copies)e(of)h(the)g(Do)s(cumen)m(t,)330 1215 -y(then)f(if)f(the)i(Do)s(cumen)m(t)g(is)f(less)f(than)h(one)h(half)e -(of)i(the)g(en)m(tire)f(aggregate,)27 b(the)c(Do)s(cumen)m(t's)g(Co)m -(v)m(er)330 1325 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)g(on)h(co)m -(v)m(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)d(the)j -(aggregate,)j(or)d(the)330 1435 y(electronic)35 b(equiv)-5 -b(alen)m(t)34 b(of)i(co)m(v)m(ers)g(if)e(the)h(Do)s(cumen)m(t)h(is)e -(in)g(electronic)h(form.)54 b(Otherwise)34 b(they)330 -1544 y(m)m(ust)c(app)s(ear)g(on)g(prin)m(ted)f(co)m(v)m(ers)j(that)f -(brac)m(k)m(et)h(the)f(whole)e(aggregate.)199 1674 y(8.)61 -b(TRANSLA)-8 b(TION)330 1803 y(T)g(ranslation)39 b(is)g(considered)f(a) -j(kind)d(of)i(mo)s(di\014cation,)h(so)f(y)m(ou)g(ma)m(y)h(distribute)c +TeXDict begin 136 141 bop 150 -116 a Ft(136)2527 b(Bash)31 +b(Reference)g(Man)m(ual)199 299 y(7.)61 b(A)m(GGREGA)-8 +b(TION)32 b(WITH)e(INDEPENDENT)h(W)m(ORKS)330 428 y(A)d(compilation)i +(of)e(the)g(Do)s(cumen)m(t)h(or)f(its)g(deriv)-5 b(ativ)m(es)30 +b(with)d(other)i(separate)g(and)e(indep)s(enden)m(t)330 +538 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m +(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called) +330 648 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e +(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330 +757 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m +(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 +b(When)330 867 y(the)28 b(Do)s(cumen)m(t)g(is)g(included)f(an)g +(aggregate,)32 b(this)27 b(License)h(do)s(es)g(not)g(apply)f(to)h(the)g +(other)g(w)m(orks)330 976 y(in)i(the)h(aggregate)i(whic)m(h)d(are)h +(not)f(themselv)m(es)i(deriv)-5 b(ativ)m(e)32 b(w)m(orks)e(of)h(the)f +(Do)s(cumen)m(t.)330 1106 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 +b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f +(these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1215 +y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f +(of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m +(er)330 1325 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m +(ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h +(aggregate,)j(or)d(the)330 1435 y(electronic)37 b(equiv)-5 +b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f +(in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 +1544 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f +(brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1674 y(8.)61 +b(TRANSLA)-8 b(TION)330 1803 y(T)g(ranslation)41 b(is)f(considered)f(a) +i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1913 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h -(terms)h(of)f(section)h(4.)83 b(Replacing)43 b(In)m(v)-5 -b(arian)m(t)44 b(Sections)g(with)330 2022 y(translations)g(requires)g -(sp)s(ecial)g(p)s(ermission)f(from)i(their)f(cop)m(yrigh)m(t)i -(holders,)i(but)d(y)m(ou)g(ma)m(y)330 2132 y(include)22 -b(translations)i(of)g(some)h(or)g(all)e(In)m(v)-5 b(arian)m(t)24 -b(Sections)g(in)f(addition)g(to)i(the)g(original)e(v)m(ersions)330 -2242 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)32 b(Sections.)43 -b(Y)-8 b(ou)32 b(ma)m(y)g(include)d(a)j(translation)e(of)i(this)e -(License,)i(and)e(all)h(the)330 2351 y(license)40 b(notices)h(in)f(the) -i(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 -b(Disclaimers,)h(pro)m(vided)d(that)i(y)m(ou)330 2461 -y(also)e(include)e(the)i(original)e(English)g(v)m(ersion)h(of)h(this)f -(License)h(and)f(the)h(original)e(v)m(ersions)i(of)330 -2570 y(those)35 b(notices)f(and)f(disclaimers.)50 b(In)33 -b(case)i(of)g(a)f(disagreemen)m(t)g(b)s(et)m(w)m(een)h(the)f -(translation)g(and)330 2680 y(the)h(original)f(v)m(ersion)g(of)i(this)e -(License)h(or)g(a)g(notice)h(or)f(disclaimer,)f(the)i(original)d(v)m -(ersion)i(will)330 2790 y(prev)-5 b(ail.)330 2919 y(If)28 -b(a)h(section)g(in)e(the)i(Do)s(cumen)m(t)h(is)d(En)m(titled)h(\\Ac)m -(kno)m(wledgemen)m(ts",)j(\\Dedications",)f(or)f(\\His-)330 -3029 y(tory",)f(the)f(requiremen)m(t)e(\(section)i(4\))g(to)g(Preserv)m -(e)g(its)e(Title)h(\(section)g(1\))h(will)d(t)m(ypically)h(require)330 -3138 y(c)m(hanging)30 b(the)h(actual)g(title.)199 3268 -y(9.)61 b(TERMINA)-8 b(TION)330 3397 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m -(y)-8 b(,)31 b(mo)s(dify)-8 b(,)29 b(sublicense,)f(or)i(distribute)d -(the)j(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3507 -y(pro)m(vided)40 b(for)i(under)e(this)h(License.)74 b(An)m(y)42 -b(other)g(attempt)h(to)g(cop)m(y)-8 b(,)46 b(mo)s(dify)-8 -b(,)43 b(sublicense)d(or)330 3616 y(distribute)34 b(the)j(Do)s(cumen)m -(t)g(is)f(v)m(oid,)i(and)e(will)e(automatically)i(terminate)h(y)m(our)f -(righ)m(ts)g(under)330 3726 y(this)27 b(License.)39 b(Ho)m(w)m(ev)m -(er,)31 b(parties)c(who)g(ha)m(v)m(e)i(receiv)m(ed)f(copies,)h(or)e -(righ)m(ts,)h(from)g(y)m(ou)g(under)e(this)330 3836 y(License)36 -b(will)e(not)j(ha)m(v)m(e)h(their)e(licenses)f(terminated)i(so)g(long)f -(as)h(suc)m(h)f(parties)g(remain)g(in)f(full)330 3945 -y(compliance.)154 4075 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e -(LICENSE)330 4204 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 -b(oundation)42 b(ma)m(y)g(publish)c(new,)44 b(revised)c(v)m(ersions)h -(of)h(the)g(GNU)g(F)-8 b(ree)330 4314 y(Do)s(cumen)m(tation)33 -b(License)e(from)h(time)g(to)h(time.)45 b(Suc)m(h)31 -b(new)h(v)m(ersions)f(will)f(b)s(e)h(similar)e(in)i(spirit)330 -4423 y(to)k(the)g(presen)m(t)f(v)m(ersion,)h(but)f(ma)m(y)h(di\013er)e -(in)g(detail)g(to)i(address)f(new)g(problems)e(or)j(concerns.)330 -4533 y(See)c Fs(http://www.gnu.org/copy)o(left)o(/)p -Ft(.)330 4663 y(Eac)m(h)f(v)m(ersion)f(of)h(the)f(License)g(is)g(giv)m -(en)g(a)h(distinguishing)25 b(v)m(ersion)k(n)m(um)m(b)s(er.)39 -b(If)29 b(the)g(Do)s(cumen)m(t)330 4772 y(sp)s(eci\014es)44 -b(that)i(a)g(particular)d(n)m(um)m(b)s(ered)h(v)m(ersion)h(of)g(this)f -(License)h(\\or)h(an)m(y)g(later)f(v)m(ersion")330 4882 -y(applies)31 b(to)i(it,)g(y)m(ou)f(ha)m(v)m(e)i(the)f(option)f(of)g -(follo)m(wing)f(the)i(terms)f(and)g(conditions)f(either)h(of)g(that)330 -4991 y(sp)s(eci\014ed)k(v)m(ersion)i(or)f(of)h(an)m(y)h(later)f(v)m -(ersion)f(that)h(has)g(b)s(een)f(published)d(\(not)39 -b(as)f(a)g(draft\))g(b)m(y)330 5101 y(the)33 b(F)-8 b(ree)34 -b(Soft)m(w)m(are)f(F)-8 b(oundation.)48 b(If)32 b(the)h(Do)s(cumen)m(t) -g(do)s(es)g(not)g(sp)s(ecify)e(a)i(v)m(ersion)f(n)m(um)m(b)s(er)g(of) -330 5210 y(this)h(License,)j(y)m(ou)e(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g -(v)m(ersion)f(ev)m(er)h(published)c(\(not)k(as)g(a)f(draft\))h(b)m(y)f -(the)h(F)-8 b(ree)330 5320 y(Soft)m(w)m(are)31 b(F)-8 -b(oundation.)p eop +(terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 +b(arian)m(t)45 b(Sections)g(with)330 2022 y(translations)h(requires)f +(sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i +(holders,)i(but)c(y)m(ou)g(ma)m(y)330 2132 y(include)24 +b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 +b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 +2242 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 +b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f +(License,)i(and)d(all)j(the)330 2351 y(license)42 b(notices)g(in)f(the) +h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 +b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2461 +y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g +(License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 +2570 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 +b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f +(translation)i(and)330 2680 y(the)f(original)i(v)m(ersion)e(of)h(this)f +(License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m +(ersion)g(will)330 2790 y(prev)-5 b(ail.)330 2919 y(If)28 +b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m +(kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 +3029 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m +(e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 +3138 y(c)m(hanging)j(the)g(actual)h(title.)199 3268 y(9.)61 +b(TERMINA)-8 b(TION)330 3397 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 +b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h +(Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3507 y(pro)m(vided)41 +b(for)h(under)e(this)i(License.)75 b(An)m(y)42 b(other)g(attempt)h(to)g +(cop)m(y)-8 b(,)46 b(mo)s(dify)-8 b(,)44 b(sublicense)e(or)330 +3616 y(distribute)36 b(the)h(Do)s(cumen)m(t)g(is)g(v)m(oid,)i(and)d +(will)h(automatically)i(terminate)f(y)m(our)e(righ)m(ts)h(under)330 +3726 y(this)28 b(License.)40 b(Ho)m(w)m(ev)m(er,)31 b(parties)d(who)f +(ha)m(v)m(e)i(receiv)m(ed)g(copies,)h(or)d(righ)m(ts,)i(from)f(y)m(ou)g +(under)e(this)330 3836 y(License)37 b(will)g(not)g(ha)m(v)m(e)h(their)f +(licenses)g(terminated)h(so)f(long)g(as)g(suc)m(h)f(parties)h(remain)g +(in)f(full)330 3945 y(compliance.)154 4075 y(10.)61 b(FUTURE)30 +b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 4204 y(The)41 b(F)-8 +b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e +(new,)k(revised)d(v)m(ersions)h(of)g(the)g(GNU)g(F)-8 +b(ree)330 4314 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g +(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h +(in)g(spirit)330 4423 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma) +m(y)h(di\013er)f(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i +(concerns.)330 4533 y(See)c Fs(http://www.gnu.org/copy)o(left)o(/)p +Ft(.)330 4663 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m +(en)g(a)g(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 +b(If)29 b(the)g(Do)s(cumen)m(t)330 4772 y(sp)s(eci\014es)45 +b(that)h(a)g(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g +(License)h(\\or)g(an)m(y)g(later)g(v)m(ersion")330 4882 +y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f +(follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 +4991 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m +(ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g +(b)m(y)330 5101 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 +b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s +(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 5210 +y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m +(ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) +h(F)-8 b(ree)330 5320 y(Soft)m(w)m(are)31 b(F)-8 b(oundation.)p +eop end %%Page: 137 143 -137 142 bop 150 -116 a Ft(App)s(endix)28 b(C:)i(Cop)m(ying)f(This)g -(Man)m(ual)2062 b(137)150 299 y Fk(C.1.1)62 b(ADDENDUM:)41 -b(Ho)m(w)f(to)h(use)h(this)f(License)g(for)g(y)m(our)g(do)s(cumen)m(ts) -275 543 y Ft(T)-8 b(o)27 b(use)g(this)f(License)h(in)f(a)i(do)s(cumen)m -(t)f(y)m(ou)h(ha)m(v)m(e)g(written,)f(include)e(a)j(cop)m(y)g(of)f(the) -h(License)f(in)f(the)150 653 y(do)s(cumen)m(t)k(and)g(put)g(the)g -(follo)m(wing)f(cop)m(yrigh)m(t)i(and)f(license)f(notices)h(just)g -(after)h(the)g(title)f(page:)468 765 y Fe(Copyright)42 -b(\(C\))79 b Fd(year)88 b(your)40 b(name)p Fe(.)468 852 -y(Permission)i(is)e(granted)g(to)g(copy,)h(distribute)g(and/or)g -(modify)f(this)g(document)468 939 y(under)h(the)f(terms)g(of)g(the)g -(GNU)g(Free)g(Documentation)i(License,)f(Version)g(1.2)468 -1026 y(or)f(any)g(later)g(version)h(published)h(by)d(the)h(Free)g -(Software)h(Foundation;)468 1113 y(with)g(no)e(Invariant)j(Sections,)f -(no)f(Front-Cover)h(Texts,)g(and)f(no)f(Back-Cover)j(Texts.)468 -1200 y(A)e(copy)g(of)g(the)g(license)g(is)g(included)h(in)f(the)g -(section)h(entitled)g(``GNU)468 1288 y(Free)g(Documentation)h -(License''.)275 1410 y Ft(If)d(y)m(ou)h(ha)m(v)m(e)h(In)m(v)-5 -b(arian)m(t)40 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 -b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts,)43 -b(replace)d(the)150 1520 y(\\with...T)-8 b(exts.")42 -b(line)28 b(with)i(this:)547 1632 y Fe(with)40 b(the)g(Invariant)h -(Sections)g(being)g Fd(list)f(their)g(titles)p Fe(,)h(with)547 -1719 y(the)f(Front-Cover)i(Texts)e(being)g Fd(list)p -Fe(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547 1806 -y(being)f Fd(list)p Fe(.)275 1929 y Ft(If)34 b(y)m(ou)i(ha)m(v)m(e)g -(In)m(v)-5 b(arian)m(t)35 b(Sections)g(without)f(Co)m(v)m(er)i(T)-8 -b(exts,)38 b(or)d(some)g(other)h(com)m(bination)e(of)i(the)150 -2038 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)g(to)g -(suit)e(the)i(situation.)275 2173 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f -(con)m(tains)h(non)m(trivial)e(examples)i(of)g(program)f(co)s(de,)j(w)m -(e)e(recommend)g(releasing)150 2283 y(these)44 b(examples)e(in)g -(parallel)f(under)h(y)m(our)h(c)m(hoice)h(of)f(free)g(soft)m(w)m(are)h -(license,)i(suc)m(h)d(as)g(the)g(GNU)150 2392 y(General)30 -b(Public)e(License,)j(to)g(p)s(ermit)d(their)i(use)g(in)f(free)h(soft)m -(w)m(are.)p eop +TeXDict begin 137 142 bop 150 -116 a Ft(App)s(endix)29 +b(C:)h(Cop)m(ying)g(This)g(Man)m(ual)2063 b(137)150 299 +y Fk(C.1.1)62 b(ADDENDUM:)41 b(Ho)m(w)f(to)h(use)h(this)f(License)g +(for)h(y)m(our)f(do)s(cumen)m(ts)275 543 y Ft(T)-8 b(o)27 +b(use)g(this)g(License)h(in)f(a)h(do)s(cumen)m(t)f(y)m(ou)h(ha)m(v)m(e) +g(written,)g(include)f(a)h(cop)m(y)g(of)f(the)h(License)g(in)f(the)150 +653 y(do)s(cumen)m(t)j(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh)m +(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 +765 y Fe(Copyright)42 b(\(C\))79 b Fd(year)88 b(your)40 +b(name)p Fe(.)468 852 y(Permission)i(is)e(granted)g(to)g(copy,)h +(distribute)g(and/or)g(modify)f(this)g(document)468 939 +y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i +(License,)f(Version)g(1.2)468 1026 y(or)f(any)g(later)g(version)h +(published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 +1113 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g +(and)f(no)f(Back-Cover)j(Texts.)468 1200 y(A)e(copy)g(of)g(the)g +(license)g(is)g(included)h(in)f(the)g(section)h(entitled)g(``GNU)468 +1288 y(Free)g(Documentation)h(License''.)275 1410 y Ft(If)d(y)m(ou)h +(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 +b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k +(T)-8 b(exts,)43 b(replace)e(the)150 1520 y(\\with...T)-8 +b(exts.")43 b(line)30 b(with)h(this:)547 1632 y Fe(with)40 +b(the)g(Invariant)h(Sections)g(being)g Fd(list)f(their)g(titles)p +Fe(,)h(with)547 1719 y(the)f(Front-Cover)i(Texts)e(being)g +Fd(list)p Fe(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547 +1806 y(being)f Fd(list)p Fe(.)275 1929 y Ft(If)34 b(y)m(ou)i(ha)m(v)m +(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 +b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 +2038 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e +(suit)f(the)h(situation.)275 2173 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f +(con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m +(e)e(recommend)g(releasing)150 2283 y(these)44 b(examples)f(in)g +(parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h +(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2392 y(General)31 +b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m +(w)m(are.)p eop end %%Page: 138 144 -138 143 bop 150 -116 a Ft(138)2527 b(Bash)31 b(Reference)g(Man)m(ual)p -eop +TeXDict begin 138 143 bop 150 -116 a Ft(138)2527 b(Bash)31 +b(Reference)g(Man)m(ual)p eop end %%Page: 139 145 -139 144 bop 150 -116 a Ft(Index)30 b(of)g(Shell)e(Builtin)g(Commands) -2133 b(139)150 299 y Fo(Index)53 b(of)h(Shell)g(Builtin)h(Commands)150 -560 y Fr(.)150 686 y Fe(.)17 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(.)g(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 +TeXDict begin 139 144 bop 150 -116 a Ft(Index)30 b(of)g(Shell)g +(Builtin)h(Commands)2133 b(139)150 299 y Fo(Index)53 +b(of)h(Shell)e(Builtin)g(Commands)150 560 y Fr(.)150 +686 y Fe(.)17 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(.)g(.)g(.)h(.)f(.)g(.) +h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(33)150 945 y Fr(:)150 1071 y Fe(:)17 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(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f @@ -12366,30 +14094,30 @@ h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)37 b Fb(39)2025 5558 y Fr(W)2025 5674 y Fe(wait)13 b Fc(.)g(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)38 -b Fb(81)p eop +b Fb(81)p eop end %%Page: 140 146 -140 145 bop 150 -116 a Ft(140)2527 b(Bash)31 b(Reference)g(Man)m(ual)p -eop +TeXDict begin 140 145 bop 150 -116 a Ft(140)2527 b(Bash)31 +b(Reference)g(Man)m(ual)p eop end %%Page: 141 147 -141 146 bop 150 -116 a Ft(Index)30 b(of)g(Shell)e(Reserv)m(ed)j(W)-8 -b(ords)2247 b(141)150 299 y Fo(Index)53 b(of)h(Shell)g(Reserv)l(ed)e(W) --13 b(ords)150 610 y Fr(!)150 743 y Fe(!)18 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(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b Fb(8)150 1029 y -Fr([)150 1162 y Fe([[)15 b Fc(.)e(.)g(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f +TeXDict begin 141 146 bop 150 -116 a Ft(Index)30 b(of)g(Shell)g(Reserv) +m(ed)h(W)-8 b(ords)2247 b(141)150 299 y Fo(Index)53 b(of)h(Shell)e +(Reserv)l(ed)g(W)-13 b(ords)150 610 y Fr(!)150 743 y +Fe(!)18 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(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.) +g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44 b +Fb(8)150 1029 y Fr([)150 1162 y Fe([[)15 b Fc(.)e(.)g(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f +(.)41 b Fb(12)150 1455 y Fr(])150 1587 y Fe(]])15 b Fc(.)e(.)g(.)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(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)41 -b Fb(12)150 1455 y Fr(])150 1587 y Fe(]])15 b Fc(.)e(.)g(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)41 b Fb(12)150 1873 y Fa({)150 2006 y Fe({)17 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(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(13)150 2292 y Fa(})150 -2425 y Fe(})17 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(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 +f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g +(.)h(.)f(.)41 b Fb(12)150 1873 y Fa({)150 2006 y Fe({)17 +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(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) +f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(13)150 2292 +y Fa(})150 2425 y Fe(})17 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(.)g(.)g(.) +h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(13)150 2709 y Fr(C)150 2842 y Fe(case)13 b Fc(.)g(.)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(.)38 @@ -12438,17 +14166,17 @@ h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f 38 b Fb(9)2025 3231 y Fr(W)2025 3347 y Fe(while)11 b Fc(.)i(.)g(.)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(.)f(.)g(.)h(.)f(.) -g(.)h(.)f(.)g(.)37 b Fb(10)p eop +g(.)h(.)f(.)g(.)37 b Fb(10)p eop end %%Page: 142 148 -142 147 bop 150 -116 a Ft(142)2527 b(Bash)31 b(Reference)g(Man)m(ual)p -eop +TeXDict begin 142 147 bop 150 -116 a Ft(142)2527 b(Bash)31 +b(Reference)g(Man)m(ual)p eop end %%Page: 143 149 -143 148 bop 150 -116 a Ft(P)m(arameter)32 b(and)d(V)-8 -b(ariable)30 b(Index)2262 b(143)150 299 y Fo(P)l(arameter)53 -b(and)g(V)-13 b(ariable)55 b(Index)150 610 y Fr(!)150 -727 y Fe(!)17 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(.)g(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 +TeXDict begin 143 148 bop 150 -116 a Ft(P)m(arameter)32 +b(and)d(V)-8 b(ariable)32 b(Index)2262 b(143)150 299 +y Fo(P)l(arameter)54 b(and)f(V)-13 b(ariable)53 b(Index)150 +610 y Fr(!)150 727 y Fe(!)17 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(.)g(.)g +(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fb(16)150 963 y Fr(#)150 1080 y Fe(#)17 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(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f @@ -12613,29 +14341,29 @@ Fe(HOSTNAME)7 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g f(.)g(.)h(.)f(.)g(.)h(.)32 b Fb(60)2025 5340 y Fe(HOSTTYPE)7 b Fc(.)14 b(.)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(.)h(.)f(.) -g(.)h(.)32 b Fb(60)p eop +g(.)h(.)32 b Fb(60)p eop end %%Page: 144 150 -144 149 bop 150 -116 a Ft(144)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fr(I)150 417 y Fe(IFS)14 b Fc(.)f(.)f(.)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(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 -b Fb(55)150 506 y Fe(IGNOREEOF)25 b Fc(.)13 b(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fb(60)150 594 -y Fe(input-meta)24 b Fc(.)13 b(.)f(.)g(.)h(.)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(.)g(.)h(.)47 b Fb(88)150 682 y Fe(INPUTRC)8 b Fc(.)14 -b(.)e(.)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(.)34 b Fb(60)150 771 y Fe(isearch-terminators)9 b Fc(.)17 -b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(88)150 1009 y Fr(K)150 -1128 y Fe(keymap)10 b Fc(.)j(.)g(.)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(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(88)150 1385 -y Fr(L)150 1504 y Fe(LANG)13 b Fc(.)g(.)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(.)38 +TeXDict begin 144 149 bop 150 -116 a Ft(144)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(I)150 417 y Fe(IFS)14 +b Fc(.)f(.)f(.)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(.)f(.)g(.)h +(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fb(55)150 506 y Fe(IGNOREEOF)25 +b Fc(.)13 b(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.) +49 b Fb(60)150 594 y Fe(input-meta)24 b Fc(.)13 b(.)f(.)g(.)h(.)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(.)g(.)h(.)47 b Fb(88)150 682 +y Fe(INPUTRC)8 b Fc(.)14 b(.)e(.)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(.)34 b Fb(60)150 771 y Fe +(isearch-terminators)9 b Fc(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f +(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)34 +b Fb(88)150 1009 y Fr(K)150 1128 y Fe(keymap)10 b Fc(.)j(.)g(.)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(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 +b Fb(88)150 1385 y Fr(L)150 1504 y Fe(LANG)13 b Fc(.)g(.)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(.)38 b Fb(60)150 1592 y Fe(LC_ALL)10 b Fc(.)j(.)g(.)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(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fb(60)150 @@ -12763,23 +14491,23 @@ f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fb(62)2025 3796 y Fr(V)2025 3915 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(89)p eop +b Fb(89)p eop end %%Page: 145 151 -145 150 bop 150 -116 a Ft(F)-8 b(unction)30 b(Index)2861 -b(145)150 299 y Fo(F)-13 b(unction)53 b(Index)150 610 -y Fr(A)150 749 y Fe(abort)27 b(\(C-g\))8 b Fc(.)13 b(.)g(.)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(.)34 b Fb(101)150 848 -y Fe(accept-line)28 b(\(Newline)g(or)e(Return\))12 b -Fc(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b -Fb(95)150 946 y Fe(alias-expand-line)29 b(\(\))13 b Fc(.)g(.)g(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) -39 b Fb(103)150 1257 y Fr(B)150 1397 y Fe(backward-char)29 -b(\(C-b\))16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)41 b Fb(95)150 -1495 y Fe(backward-delete-char)30 b(\(Rubout\))21 b Fc(.)13 -b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 b -Fb(97)150 1594 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))f +TeXDict begin 145 150 bop 150 -116 a Ft(F)-8 b(unction)31 +b(Index)2861 b(145)150 299 y Fo(F)-13 b(unction)52 b(Index)150 +610 y Fr(A)150 749 y Fe(abort)27 b(\(C-g\))8 b Fc(.)13 +b(.)g(.)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(.)34 +b Fb(101)150 848 y Fe(accept-line)28 b(\(Newline)g(or)e(Return\))12 +b Fc(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 +b Fb(95)150 946 y Fe(alias-expand-line)29 b(\(\))13 b +Fc(.)g(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h +(.)f(.)g(.)h(.)f(.)39 b Fb(103)150 1257 y Fr(B)150 1397 +y Fe(backward-char)29 b(\(C-b\))16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f +(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)41 +b Fb(95)150 1495 y Fe(backward-delete-char)30 b(\(Rubout\))21 +b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45 +b Fb(97)150 1594 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))f Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49 b Fb(98)150 1692 y Fe(backward-kill-word)30 b(\(M-)999 1689 y Fg(h)p 1024 1636 146 4 v 1024 1692 a Ff(DEL)p @@ -12925,19 +14653,20 @@ f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fb(96)2025 b(\(M-p\))2193 5340 y Fc(.)12 b(.)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(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fb(96)p -eop +eop end %%Page: 146 152 -146 151 bop 150 -116 a Ft(146)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fr(O)150 425 y Fe(operate-and-get-next)f(\(C-o\))24 -b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)49 -b Fb(103)150 518 y Fe(overwrite-mode)29 b(\(\))19 b Fc(.)12 -b(.)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(97)150 786 y Fr(P)150 -913 y Fe(possible-command-completions)32 b(\(C-x)26 b(!\))15 -b Fc(.)e(.)g(.)f(.)g(.)41 b Fb(100)150 1005 y Fe(possible-completions) -30 b(\(M-?\))25 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)49 b Fb(99)150 1097 y Fe(possible-filename-completions) -32 b(\(C-x)27 b(/\))14 b Fc(.)e(.)g(.)h(.)39 b Fb(100)150 +TeXDict begin 146 151 bop 150 -116 a Ft(146)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(O)150 425 y Fe +(operate-and-get-next)f(\(C-o\))24 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g +(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)49 b Fb(103)150 518 y +Fe(overwrite-mode)29 b(\(\))19 b Fc(.)12 b(.)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(97)150 786 y Fr(P)150 913 y Fe(possible-command-completions)32 +b(\(C-x)26 b(!\))15 b Fc(.)e(.)g(.)f(.)g(.)41 b Fb(100)150 +1005 y Fe(possible-completions)30 b(\(M-?\))25 b Fc(.)12 +b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)49 +b Fb(99)150 1097 y Fe(possible-filename-completions)32 +b(\(C-x)27 b(/\))14 b Fc(.)e(.)g(.)h(.)39 b Fb(100)150 1190 y Fe(possible-hostname-completions)32 b(\(C-x)27 b(@\))14 b Fc(.)e(.)g(.)h(.)39 b Fb(100)150 1282 y Fe (possible-username-completions)32 b(\(C-x)27 b(~\))14 @@ -13001,25 +14730,26 @@ b(\(M-C-y\))14 b Fc(.)g(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)40 b Fb(96)2025 2646 y Fe(yank-pop)27 b(\(M-y\))d Fc(.)13 b(.)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(.)49 b Fb(99)p eop +h(.)f(.)g(.)49 b Fb(99)p eop end %%Page: 147 153 -147 152 bop 150 -116 a Ft(Concept)31 b(Index)2882 b(147)150 -299 y Fo(Concept)52 b(Index)150 638 y Fr(A)150 754 y -Fb(alias)27 b(expansion)20 b Fc(.)12 b(.)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(.)45 b Fb(71)150 841 y(arithmetic)25 b(ev)l(aluation)g -Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fb(70)150 929 y(arithmetic)25 -b(expansion)12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fb(21)150 -1016 y(arithmetic,)26 b(shell)20 b Fc(.)12 b(.)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(.)45 b Fb(70)150 1103 y(arra)n(ys)6 b Fc(.)13 -b(.)g(.)f(.)g(.)h(.)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(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)32 b Fb(72)150 1353 y Fr(B)150 1469 y Fb(bac)n(kground)23 -b Fc(.)13 b(.)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(.)49 +TeXDict begin 147 152 bop 150 -116 a Ft(Concept)31 b(Index)2882 +b(147)150 299 y Fo(Concept)52 b(Index)150 638 y Fr(A)150 +754 y Fb(alias)27 b(expansion)20 b Fc(.)12 b(.)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(.)45 b Fb(71)150 841 y(arithmetic)26 +b(ev)l(aluation)f Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f +(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fb(70)150 +929 y(arithmetic)26 b(expansion)12 b Fc(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)g +(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 +b Fb(21)150 1016 y(arithmetic,)27 b(shell)20 b Fc(.)12 +b(.)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(.)45 b Fb(70)150 +1103 y(arra)n(ys)6 b Fc(.)13 b(.)g(.)f(.)g(.)h(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32 b Fb(72)150 +1353 y Fr(B)150 1469 y Fb(bac)n(kground)23 b Fc(.)13 +b(.)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(.)49 b Fb(79)150 1556 y(Bash)26 b(con\014guration)11 b Fc(.)i(.)f(.)g(.)h(.) f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)36 b Fb(115)150 1643 y(Bash)26 b(installation)6 @@ -13033,46 +14763,47 @@ b(expansion)d Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f b Fb(17)150 1905 y(builtin)17 b Fc(.)c(.)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(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43 b -Fb(3)150 2138 y Fr(C)150 2254 y Fb(command)24 b(editing)19 +Fb(3)150 2138 y Fr(C)150 2254 y Fb(command)26 b(editing)19 b Fc(.)12 b(.)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(.)44 b Fb(83)150 -2341 y(command)24 b(execution)11 b Fc(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h +2341 y(command)26 b(execution)11 b Fc(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -37 b Fb(28)150 2428 y(command)24 b(expansion)f Fc(.)12 +37 b Fb(28)150 2428 y(command)26 b(expansion)d Fc(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(28)150 2515 y(command)24 +(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fb(28)150 2515 y(command)26 b(history)16 b Fc(.)d(.)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(.)42 -b Fb(109)150 2603 y(command)24 b(searc)n(h)12 b Fc(.)h(.)f(.)g(.)h(.)f +b Fb(109)150 2603 y(command)26 b(searc)n(h)12 b Fc(.)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(.)g(.)38 b Fb(28)150 2690 y(command)24 -b(substitution)g Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g +f(.)g(.)h(.)f(.)g(.)g(.)38 b Fb(28)150 2690 y(command)26 +b(substitution)e Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fb(21)150 -2777 y(command)24 b(timing)8 b Fc(.)k(.)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(.)34 b Fb(8)150 2864 y(commands,)24 b(comp)r(ound)8 -b Fc(.)k(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(9)150 2952 y(commands,)24 -b(conditional)13 b Fc(.)h(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39 b Fb(10)150 -3039 y(commands,)24 b(grouping)15 b Fc(.)f(.)e(.)g(.)h(.)f(.)g(.)h(.)f -(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)41 -b Fb(13)150 3126 y(commands,)24 b(lists)6 b Fc(.)14 b(.)f(.)f(.)g(.)h -(.)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(.)32 b Fb(9)150 3213 y(commands,)24 -b(lo)r(oping)h Fc(.)12 b(.)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(.)49 -b Fb(9)150 3300 y(commands,)24 b(pip)r(elines)17 b Fc(.)d(.)e(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) -h(.)f(.)g(.)h(.)43 b Fb(8)150 3388 y(commands,)24 b(shell)16 -b Fc(.)e(.)e(.)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(.)42 -b Fb(8)150 3475 y(commands,)24 b(simple)d Fc(.)12 b(.)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(.)47 b Fb(8)150 3562 y(commen)n(ts,)24 -b(shell)8 b Fc(.)13 b(.)f(.)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(.) -34 b Fb(7)150 3649 y(completion)26 b(builtins)c Fc(.)12 +2777 y(command)26 b(timing)8 b Fc(.)13 b(.)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(.)f(.)34 b Fb(8)150 2864 y(commands,)26 b(comp)r(ound)8 +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(.)34 b Fb(9)150 2952 +y(commands,)26 b(conditional)13 b Fc(.)h(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.) +f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39 +b Fb(10)150 3039 y(commands,)26 b(grouping)15 b Fc(.)f(.)e(.)g(.)h(.)f +(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.) +h(.)f(.)41 b Fb(13)150 3126 y(commands,)26 b(lists)6 +b Fc(.)14 b(.)f(.)f(.)g(.)h(.)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(.)32 +b Fb(9)150 3213 y(commands,)26 b(lo)r(oping)f Fc(.)12 +b(.)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(.)49 b Fb(9)150 3300 +y(commands,)26 b(pip)r(elines)17 b Fc(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f +(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) +43 b Fb(8)150 3388 y(commands,)26 b(shell)16 b Fc(.)e(.)e(.)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(.)42 b Fb(8)150 3475 y(commands,)26 +b(simple)c Fc(.)12 b(.)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(.)47 +b Fb(8)150 3562 y(commen)n(ts,)26 b(shell)8 b Fc(.)13 +b(.)f(.)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(.)34 +b Fb(7)150 3649 y(completion)27 b(builtins)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fb(105)150 3736 y(con\014guration)15 b Fc(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) @@ -13083,17 +14814,17 @@ b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h 4073 y Fr(D)150 4189 y Fb(directory)26 b(stac)n(k)e Fc(.)12 b(.)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(.)49 b Fb(73)150 -4439 y Fr(E)150 4555 y Fb(editing)26 b(command)e(lines)f +4439 y Fr(E)150 4555 y Fb(editing)26 b(command)g(lines)d 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(83)150 4642 y(en)n(vironmen)n(t)10 -b Fc(.)h(.)h(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) +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 Fc(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) +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(70)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(111)150 4904 y(execution)26 b(en)n(vironmen)n(t)18 +b Fb(111)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 b(status)17 b Fc(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) @@ -13101,34 +14832,34 @@ h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)43 b Fb(3,)26 b(30)150 5078 y(expansion)16 b Fc(.)d(.)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(.)f(.)g(.)42 b -Fb(16)150 5166 y(expansion,)26 b(arithmetic)19 b Fc(.)13 +Fb(16)150 5166 y(expansion,)26 b(arithmetic)20 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)h(.)f(.)g(.)h(.)f(.)45 b Fb(21)150 5253 y(expansion,)26 b(brace)12 b Fc(.)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(.)g(.)38 -b Fb(17)150 5340 y(expansion,)26 b(\014lename)18 b Fc(.)11 -b(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h +b Fb(17)150 5340 y(expansion,)26 b(\014lename)18 b Fc(.)12 +b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fb(22)2025 638 y(expansion,)26 -b(parameter)21 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(.)47 b Fb(18)2025 -729 y(expansion,)26 b(pathname)8 b Fc(.)j(.)h(.)h(.)f(.)g(.)h(.)f(.)g +b(parameter)c 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(.)47 b Fb(18)2025 +729 y(expansion,)26 b(pathname)8 b Fc(.)k(.)g(.)h(.)f(.)g(.)h(.)f(.)g (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fb(22)2025 819 y(expansion,)26 b(tilde)9 b Fc(.)j(.)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(.)35 b Fb(18)2025 910 y(expressions,)27 -b(arithmetic)16 b Fc(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) +b(arithmetic)16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fb(70)2025 1000 y(expressions,)27 b(conditional)22 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fb(69)2025 1267 y Fr(F)2025 1390 y Fb(FDL,)25 b(GNU)g(F)-6 -b(ree)26 b(Do)r(cumen)n(tation)f(License)10 b Fc(.)j(.)g(.)f(.)g(.)h(.) +b(ree)26 b(Do)r(cumen)n(tation)g(License)10 b Fc(.)j(.)g(.)f(.)g(.)h(.) 36 b Fb(131)2025 1480 y(\014eld)21 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(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)48 -b Fb(3)2025 1571 y(\014lename)8 b Fc(.)j(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.) +b Fb(3)2025 1571 y(\014lename)8 b Fc(.)k(.)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(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(3)2025 -1661 y(\014lename)25 b(expansion)10 b Fc(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.) +1661 y(\014lename)26 b(expansion)10 b Fc(.)i(.)h(.)f(.)g(.)g(.)h(.)f(.) g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f (.)g(.)36 b Fb(22)2025 1752 y(foreground)20 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f @@ -13183,67 +14914,68 @@ b(.)d(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g b Fb(7)2025 4860 y(login)26 b(shell)13 b Fc(.)h(.)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(.)h(.)f(.)g(.)39 b Fb(65)2025 -5127 y Fr(M)2025 5249 y Fb(matc)n(hing,)25 b(pattern)7 +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 -5340 y(metac)n(haracter)17 b Fc(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h +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 +g(.)h(.)f(.)g(.)44 b Fb(3)p eop end %%Page: 148 154 -148 153 bop 150 -116 a Ft(148)2527 b(Bash)31 b(Reference)g(Man)m(ual) -150 299 y Fr(N)150 417 y Fb(name)20 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f +TeXDict begin 148 153 bop 150 -116 a Ft(148)2527 b(Bash)31 +b(Reference)g(Man)m(ual)150 299 y Fr(N)150 417 y Fb(name)21 +b Fc(.)12 b(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) +h(.)f(.)g(.)h(.)f(.)g(.)47 b Fb(3)150 506 y(nativ)n(e)25 +b(languages)14 b Fc(.)h(.)d(.)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(.)40 +b Fb(7)150 594 y(notation,)27 b(readline)12 b Fc(.)h(.)f(.)h(.)f(.)g(.) +g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f +(.)g(.)h(.)f(.)g(.)38 b Fb(83)150 851 y Fr(O)150 969 +y Fb(op)r(erator,)27 b(shell)15 b Fc(.)e(.)g(.)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(.)g(.)h(.)f(.)41 b Fb(3)150 1225 y Fr(P)150 +1344 y Fb(parameter)26 b(expansion)14 b Fc(.)f(.)f(.)h(.)f(.)g(.)h(.)f +(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.) +40 b Fb(18)150 1432 y(parameters)14 b Fc(.)f(.)g(.)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(.)h(.)f(.)g(.)h(.)39 b Fb(15)150 1521 +y(parameters,)27 b(p)r(ositional)9 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h +(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 +b Fb(15)150 1609 y(parameters,)27 b(sp)r(ecial)e Fc(.)12 +b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h +(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fb(15)150 1698 y(pathname)25 +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(22)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 +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 +y(POSIX)8 b Fc(.)k(.)g(.)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(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(3)150 2052 y(POSIX)25 +b(Mo)r(de)10 b Fc(.)i(.)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(.)h(.)f(.)g(.)h(.) -f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 -b Fb(3)150 506 y(nativ)n(e)25 b(languages)14 b Fc(.)h(.)d(.)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(.)40 b Fb(7)150 594 y(notation,)27 -b(readline)12 b Fc(.)h(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 -b Fb(83)150 851 y Fr(O)150 969 y Fb(op)r(erator,)27 b(shell)15 -b Fc(.)e(.)g(.)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(.)g(.)h(.)f(.)41 -b Fb(3)150 1225 y Fr(P)150 1344 y Fb(parameter)25 b(expansion)14 -b Fc(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fb(18)150 1432 y(parameters)14 -b Fc(.)e(.)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(.)h(.)f(.)g(.)h(.)39 -b Fb(15)150 1521 y(parameters,)26 b(p)r(ositional)9 b -Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h -(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34 b Fb(15)150 1609 y(parameters,)26 -b(sp)r(ecial)f Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49 -b Fb(15)150 1698 y(pathname)24 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(22)150 1786 y(pattern)25 -b(matc)n(hing)18 b Fc(.)12 b(.)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(.)43 -b Fb(23)150 1875 y(pip)r(eline)15 b Fc(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g +f(.)35 b Fb(76)150 2140 y(pro)r(cess)27 b(group)7 b Fc(.)13 +b(.)f(.)g(.)h(.)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(.)g(.)h(.)33 +b Fb(3)150 2229 y(pro)r(cess)27 b(group)e(ID)f Fc(.)12 +b(.)h(.)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(.)50 b Fb(3)150 +2317 y(pro)r(cess)27 b(substitution)10 b Fc(.)i(.)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 y(POSIX)8 b Fc(.)k(.)g(.)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(.)f(.)g(.)h(.)f(.)g(.)h(.)34 b Fb(3)150 -2052 y(POSIX)25 b(Mo)r(de)10 b Fc(.)i(.)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(.) -h(.)f(.)g(.)h(.)f(.)35 b Fb(76)150 2140 y(pro)r(cess)27 -b(group)7 b Fc(.)13 b(.)f(.)g(.)h(.)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(.) -g(.)h(.)33 b Fb(3)150 2229 y(pro)r(cess)27 b(group)e(ID)f -Fc(.)12 b(.)h(.)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(.)50 -b Fb(3)150 2317 y(pro)r(cess)27 b(substitution)10 b Fc(.)i(.)h(.)f(.)g -(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.) -f(.)g(.)h(.)f(.)36 b Fb(22)150 2406 y(programmable)25 -b(completion)16 b Fc(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.) -f(.)g(.)h(.)f(.)g(.)g(.)42 b Fb(103)150 2494 y(prompting)7 -b Fc(.)k(.)h(.)h(.)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 -(.)32 b Fb(75)150 2750 y Fr(Q)150 2869 y Fb(quoting)19 -b Fc(.)13 b(.)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(.)46 b Fb(6)150 2957 y(quoting,)26 b(ANSI)12 -b Fc(.)f(.)h(.)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(.)h(.)38 +f(.)36 b Fb(22)150 2406 y(programmable)27 b(completion)16 +b Fc(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.) +g(.)g(.)42 b Fb(103)150 2494 y(prompting)7 b Fc(.)12 +b(.)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(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 +b Fb(75)150 2750 y Fr(Q)150 2869 y Fb(quoting)19 b Fc(.)13 +b(.)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(.)46 b Fb(6)150 2957 y(quoting,)26 b(ANSI)12 b +Fc(.)f(.)h(.)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(.)h(.)38 b Fb(6)150 3213 y Fr(R)150 3332 y Fb(Readline,)26 b(ho)n(w)g(to)g(use) 14 b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fb(82)150 3421 @@ -13258,7 +14990,7 @@ b(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f b Fb(76)2025 473 y(return)25 b(status)19 b Fc(.)13 b(.)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(.)h(.)f(.)g(.)h(.)45 b Fb(3)2025 -707 y Fr(S)2025 823 y Fb(shell)26 b(arithmetic)12 b Fc(.)g(.)h(.)f(.)g +707 y Fr(S)2025 823 y Fb(shell)26 b(arithmetic)12 b Fc(.)h(.)g(.)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(.)38 b Fb(70)2025 910 y(shell)26 b(function)11 b Fc(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g @@ -13308,8 +15040,8 @@ b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f b Fb(22)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(85)p eop +g(.)33 b Fb(85)p eop end %%Trailer -end + userdict /end-hook known{end-hook}if %%EOF diff --git a/doc/bashref.texi.orig b/doc/bashref.texi.orig new file mode 100644 index 00000000..fdce9e3c --- /dev/null +++ b/doc/bashref.texi.orig @@ -0,0 +1,7105 @@ +\input texinfo.tex @c -*- texinfo -*- +@c %**start of header +@setfilename bashref.info +@settitle Bash Reference Manual +@c %**end of header + +@setchapternewpage odd + +@include version.texi + +@copying +This text is a brief description of the features that are present in +the Bash shell (version @value{VERSION}, @value{UPDATED}). + +This is Edition @value{EDITION}, last updated @value{UPDATED}, +of @cite{The GNU Bash Reference Manual}, +for @code{Bash}, Version @value{VERSION}. + +Copyright @copyright{} 1988-2003 Free Software Foundation, Inc. + +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. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU Manual,'' +and with the Back-Cover Texts as in (a) below. A copy of the license is +included in the section entitled ``GNU Free Documentation License.'' + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' +@end quotation +@end copying + +@defcodeindex bt +@defcodeindex rw +@set BashFeatures + +@dircategory Basics +@direntry +* Bash: (bash). The GNU Bourne-Again SHell. +@end direntry + +@finalout + +@titlepage +@title Bash Reference Manual +@subtitle Reference Documentation for Bash +@subtitle Edition @value{EDITION}, for @code{Bash} Version @value{VERSION}. +@subtitle @value{UPDATED-MONTH} +@author Chet Ramey, Case Western Reserve University +@author Brian Fox, Free Software Foundation + +@page +@vskip 0pt plus 1filll +@insertcopying + +@sp 1 +Published by the Free Software Foundation @* +59 Temple Place, Suite 330, @* +Boston, MA 02111-1307 @* +USA @* + +@end titlepage + +@contents + +@ifnottex +@node Top, Introduction, (dir), (dir) +@top Bash Features + +This text is a brief description of the features that are present in +the Bash shell (version @value{VERSION}, @value{UPDATED}).. + +This is Edition @value{EDITION}, last updated @value{UPDATED}, +of @cite{The GNU Bash Reference Manual}, +for @code{Bash}, Version @value{VERSION}. + +Bash contains features that appear in other popular shells, and some +features that only appear in Bash. Some of the shells that Bash has +borrowed concepts from are the Bourne Shell (@file{sh}), the Korn Shell +(@file{ksh}), and the C-shell (@file{csh} and its successor, +@file{tcsh}). The following menu breaks the features up into +categories based upon which one of these other shells inspired the +feature. + +This manual is meant as a brief introduction to features found in +Bash. The Bash manual page should be used as the definitive +reference on shell behavior. + +@menu +* Introduction:: An introduction to the shell. + +* Definitions:: Some definitions used in the rest of this + manual. + +* Basic Shell Features:: The shell "building blocks". + +* Shell Builtin Commands:: Commands that are a part of the shell. + +* Shell Variables:: Variables used or set by Bash. + +* Bash Features:: Features found only in Bash. + +* Job Control:: A chapter describing what job control is + and how Bash allows you to use it. + +* Using History Interactively:: Chapter dealing with history expansion + rules. + +* Command Line Editing:: Chapter describing the command line + editing features. + +* Installing Bash:: How to build and install Bash on your system. + +* Reporting Bugs:: How to report bugs in Bash. + +* Major Differences From The Bourne Shell:: A terse list of the differences + between Bash and historical + versions of /bin/sh. + +* Copying This Manual:: Copying this manual. + +* Builtin Index:: Index of Bash builtin commands. + +* Reserved Word Index:: Index of Bash reserved words. + +* Variable Index:: Quick reference helps you find the + variable you want. + +* Function Index:: Index of bindable Readline functions. + +* Concept Index:: General index for concepts described in + this manual. +@end menu +@end ifnottex + +@node Introduction +@chapter Introduction +@menu +* What is Bash?:: A short description of Bash. + +* What is a shell?:: A brief introduction to shells. +@end menu + +@node What is Bash? +@section What is Bash? + +Bash is the shell, or command language interpreter, +for the @sc{gnu} operating system. +The name is an acronym for the @samp{Bourne-Again SHell}, +a pun on Stephen Bourne, the author of the direct ancestor of +the current Unix shell @code{/bin/sh}, +which appeared in the Seventh Edition Bell Labs Research version +of Unix. + +Bash is largely compatible with @code{sh} and incorporates useful +features from the Korn shell @code{ksh} and the C shell @code{csh}. +It is intended to be a conformant implementation of the @sc{ieee} +@sc{posix} Shell and Tools specification (@sc{ieee} Working Group 1003.2). +It offers functional improvements over @code{sh} for both interactive and +programming use. + +While the @sc{gnu} operating system provides other shells, including +a version of @code{csh}, Bash is the default shell. +Like other @sc{gnu} software, Bash is quite portable. It currently runs +on nearly every version of Unix and a few other operating systems @minus{} +independently-supported ports exist for @sc{ms-dos}, @sc{os/2}, +Windows @sc{95/98}, and Windows @sc{nt}. + +@node What is a shell? +@section What is a shell? + +At its base, a shell is simply a macro processor that executes +commands. A Unix shell is both a command interpreter, which +provides the user interface to the rich set of @sc{gnu} utilities, +and a programming language, allowing these utilitites to be +combined. Files containing commands can be created, and become +commands themselves. These new commands have the same status as +system commands in directories such as @file{/bin}, allowing users +or groups to establish custom environments. + +A shell allows execution of @sc{gnu} commands, both synchronously and +asynchronously. +The shell waits for synchronous commands to complete before accepting +more input; asynchronous commands continue to execute in parallel +with the shell while it reads and executes additional commands. +The @dfn{redirection} constructs permit +fine-grained control of the input and output of those commands. +Moreover, the shell allows control over the contents of commands' +environments. +Shells may be used interactively or non-interactively: they accept +input typed from the keyboard or from a file. + +Shells also provide a small set of built-in +commands (@dfn{builtins}) implementing functionality impossible +or inconvenient to obtain via separate utilities. +For example, @code{cd}, @code{break}, @code{continue}, and +@code{exec}) cannot be implemented outside of the shell because +they directly manipulate the shell itself. +The @code{history}, @code{getopts}, @code{kill}, or @code{pwd} +builtins, among others, could be implemented in separate utilities, +but they are more convenient to use as builtin commands. +All of the shell builtins are described in +subsequent sections. + +While executing commands is essential, most of the power (and +complexity) of shells is due to their embedded programming +languages. Like any high-level language, the shell provides +variables, flow control constructs, quoting, and functions. + +Shells offer features geared specifically for +interactive use rather than to augment the programming language. +These interactive features include job control, command line +editing, history and aliases. Each of these features is +described in this manual. + +@node Definitions +@chapter Definitions +These definitions are used throughout the remainder of this manual. + +@table @code + +@item POSIX +@cindex POSIX +A family of open system standards based on Unix. Bash +is concerned with @sc{posix} 1003.2, the Shell and Tools Standard. + +@item blank +A space or tab character. + +@item builtin +@cindex builtin +A command that is implemented internally by the shell itself, rather +than by an executable program somewhere in the file system. + +@item control operator +@cindex control operator +A @code{word} that performs a control function. It is a @code{newline} +or one of the following: +@samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;}, +@samp{|}, @samp{(}, or @samp{)}. + +@item exit status +@cindex exit status +The value returned by a command to its caller. The value is restricted +to eight bits, so the maximum value is 255. + +@item field +@cindex field +A unit of text that is the result of one of the shell expansions. After +expansion, when executing a command, the resulting fields are used as +the command name and arguments. + +@item filename +@cindex filename +A string of characters used to identify a file. + +@item job +@cindex job +A set of processes comprising a pipeline, and any processes descended +from it, that are all in the same process group. + +@item job control +@cindex job control +A mechanism by which users can selectively stop (suspend) and restart +(resume) execution of processes. + +@item metacharacter +@cindex metacharacter +A character that, when unquoted, separates words. A metacharacter is +a @code{blank} or one of the following characters: +@samp{|}, @samp{&}, @samp{;}, @samp{(}, @samp{)}, @samp{<}, or +@samp{>}. + +@item name +@cindex name +@cindex identifier +A @code{word} consisting solely of letters, numbers, and underscores, +and beginning with a letter or underscore. @code{Name}s are used as +shell variable and function names. +Also referred to as an @code{identifier}. + +@item operator +@cindex operator, shell +A @code{control operator} or a @code{redirection operator}. +@xref{Redirections}, for a list of redirection operators. + +@item process group +@cindex process group +A collection of related processes each having the same process +group @sc{id}. + +@item process group ID +@cindex process group ID +A unique identifer that represents a @code{process group} +during its lifetime. + +@item reserved word +@cindex reserved word +A @code{word} that has a special meaning to the shell. Most reserved +words introduce shell flow control constructs, such as @code{for} and +@code{while}. + +@item return status +@cindex return status +A synonym for @code{exit status}. + +@item signal +@cindex signal +A mechanism by which a process may be notified by the kernel +of an event occurring in the system. + +@item special builtin +@cindex special builtin +A shell builtin command that has been classified as special by the +@sc{posix} 1003.2 standard. + +@item token +@cindex token +A sequence of characters considered a single unit by the shell. It is +either a @code{word} or an @code{operator}. + +@item word +@cindex word +A @code{token} that is not an @code{operator}. +@end table + +@node Basic Shell Features +@chapter Basic Shell Features +@cindex Bourne shell + +Bash is an acronym for @samp{Bourne-Again SHell}. +The Bourne shell is +the traditional Unix shell originally written by Stephen Bourne. +All of the Bourne shell builtin commands are available in Bash, +and the rules for evaluation and quoting are taken from the @sc{posix} +1003.2 specification for the `standard' Unix shell. + +This chapter briefly summarizes the shell's `building blocks': +commands, control structures, shell functions, shell @i{parameters}, +shell expansions, +@i{redirections}, which are a way to direct input and output from +and to named files, and how the shell executes commands. + +@menu +* Shell Syntax:: What your input means to the shell. +* Shell Commands:: The types of commands you can use. +* Shell Functions:: Grouping commands by name. +* Shell Parameters:: How the shell stores values. +* Shell Expansions:: How Bash expands parameters and the various + expansions available. +* Redirections:: A way to control where input and output go. +* Executing Commands:: What happens when you run a command. +* Shell Scripts:: Executing files of shell commands. +@end menu + +@node Shell Syntax +@section Shell Syntax +@menu +* Shell Operation:: The basic operation of the shell. + +* Quoting:: How to remove the special meaning from characters. + +* Comments:: How to specify comments. +@end menu + +When the shell reads input, it proceeds through a +sequence of operations. If the input indicates the beginning of a +comment, the shell ignores the comment symbol (@samp{#}), and the rest +of that line. + +Otherwise, roughly speaking, the shell reads its input and +divides the input into words and operators, employing the quoting rules +to select which meanings to assign various words and characters. + +The shell then parses these tokens into commands and other constructs, +removes the special meaning of certain words or characters, expands +others, redirects input and output as needed, executes the specified +command, waits for the command's exit status, and makes that exit status +available for further inspection or processing. + +@node Shell Operation +@subsection Shell Operation + +The following is a brief description of the shell's operation when it +reads and executes a command. Basically, the shell does the +following: + +@enumerate +@item +Reads its input from a file (@pxref{Shell Scripts}), from a string +supplied as an argument to the @option{-c} invocation option +(@pxref{Invoking Bash}), or from the user's terminal. + +@item +Breaks the input into words and operators, obeying the quoting rules +described in @ref{Quoting}. These tokens are separated by +@code{metacharacters}. Alias expansion is performed by this step +(@pxref{Aliases}). + +@item +Parses the tokens into simple and compound commands +(@pxref{Shell Commands}). + +@item +Performs the various shell expansions (@pxref{Shell Expansions}), breaking +the expanded tokens into lists of filenames (@pxref{Filename Expansion}) +and commands and arguments. + +@item +Performs any necessary redirections (@pxref{Redirections}) and removes +the redirection operators and their operands from the argument list. + +@item +Executes the command (@pxref{Executing Commands}). + +@item +Optionally waits for the command to complete and collects its exit +status (@pxref{Exit Status}). + +@end enumerate + +@node Quoting +@subsection Quoting +@cindex quoting +@menu +* Escape Character:: How to remove the special meaning from a single + character. +* Single Quotes:: How to inhibit all interpretation of a sequence + of characters. +* Double Quotes:: How to suppress most of the interpretation of a + sequence of characters. +* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings. + +* Locale Translation:: How to translate strings into different languages. +@end menu + +Quoting is used to remove the special meaning of certain +characters or words to the shell. Quoting can be used to +disable special treatment for special characters, to prevent +reserved words from being recognized as such, and to prevent +parameter expansion. + +Each of the shell metacharacters (@pxref{Definitions}) +has special meaning to the shell and must be quoted if it is to +represent itself. +When the command history expansion facilities are being used, the +@var{history expansion} character, usually @samp{!}, must be quoted +to prevent history expansion. @xref{Bash History Facilities}, for +more details concerning history expansion. + +There are three quoting mechanisms: the +@var{escape character}, single quotes, and double quotes. + +@node Escape Character +@subsubsection Escape Character +A non-quoted backslash @samp{\} is the Bash escape character. +It preserves the literal value of the next character that follows, +with the exception of @code{newline}. If a @code{\newline} pair +appears, and the backslash itself is not quoted, the @code{\newline} +is treated as a line continuation (that is, it is removed from +the input stream and effectively ignored). + +@node Single Quotes +@subsubsection Single Quotes + +Enclosing characters in single quotes (@samp{'}) preserves the literal value +of each character within the quotes. A single quote may not occur +between single quotes, even when preceded by a backslash. + +@node Double Quotes +@subsubsection Double Quotes + +Enclosing characters in double quotes (@samp{"}) preserves the literal value +of all characters within the quotes, with the exception of +@samp{$}, @samp{`}, and @samp{\}. +The characters @samp{$} and @samp{`} +retain their special meaning within double quotes (@pxref{Shell Expansions}). +The backslash retains its special meaning only when followed by one of +the following characters: +@samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}. +Within double quotes, backslashes that are followed by one of these +characters are removed. Backslashes preceding characters without a +special meaning are left unmodified. +A double quote may be quoted within double quotes by preceding it with +a backslash. +When command history is being used, the double quote may not be used to +quote the history expansion character. + +The special parameters @samp{*} and @samp{@@} have special meaning +when in double quotes (@pxref{Shell Parameter Expansion}). + +@node ANSI-C Quoting +@subsubsection ANSI-C Quoting +@cindex quoting, ANSI + +Words of the form @code{$'@var{string}'} are treated specially. The +word expands to @var{string}, with backslash-escaped characters replaced +as specified by the ANSI C standard. Backslash escape sequences, if +present, are decoded as follows: + +@table @code +@item \a +alert (bell) +@item \b +backspace +@item \e +an escape character (not ANSI C) +@item \f +form feed +@item \n +newline +@item \r +carriage return +@item \t +horizontal tab +@item \v +vertical tab +@item \\ +backslash +@item \' +single quote +@item \@var{nnn} +the eight-bit character whose value is the octal value @var{nnn} +(one to three digits) +@item \x@var{HH} +the eight-bit character whose value is the hexadecimal value @var{HH} +(one or two hex digits) +@item \c@var{x} +a control-@var{x} character +@end table + +@noindent +The expanded result is single-quoted, as if the dollar sign had not +been present. + +@node Locale Translation +@subsubsection Locale-Specific Translation +@cindex localization +@cindex internationalization +@cindex native languages +@cindex translation, native languages + +A double-quoted string preceded by a dollar sign (@samp{$}) will cause +the string to be translated according to the current locale. +If the current locale is @code{C} or @code{POSIX}, the dollar sign +is ignored. +If the string is translated and replaced, the replacement is +double-quoted. + +@vindex LC_MESSAGES +@vindex TEXTDOMAIN +@vindex TEXTDOMAINDIR +Some systems use the message catalog selected by the @env{LC_MESSAGES} +shell variable. Others create the name of the message catalog from the +value of the @env{TEXTDOMAIN} shell variable, possibly adding a +suffix of @samp{.mo}. If you use the @env{TEXTDOMAIN} variable, you +may need to set the @env{TEXTDOMAINDIR} variable to the location of +the message catalog files. Still others use both variables in this +fashion: +@env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo. + +@node Comments +@subsection Comments +@cindex comments, shell + +In a non-interactive shell, or an interactive shell in which the +@code{interactive_comments} option to the @code{shopt} +builtin is enabled (@pxref{Bash Builtins}), +a word beginning with @samp{#} +causes that word and all remaining characters on that line to +be ignored. An interactive shell without the @code{interactive_comments} +option enabled does not allow comments. The @code{interactive_comments} +option is on by default in interactive shells. +@xref{Interactive Shells}, for a description of what makes +a shell interactive. + +@node Shell Commands +@section Shell Commands +@cindex commands, shell + +A simple shell command such as @code{echo a b c} consists of the command +itself followed by arguments, separated by spaces. + +More complex shell commands are composed of simple commands arranged together +in a variety of ways: in a pipeline in which the output of one command +becomes the input of a second, in a loop or conditional construct, or in +some other grouping. + +@menu +* Simple Commands:: The most common type of command. +* Pipelines:: Connecting the input and output of several + commands. +* Lists:: How to execute commands sequentially. +* Looping Constructs:: Shell commands for iterative action. +* Conditional Constructs:: Shell commands for conditional execution. +* Command Grouping:: Ways to group commands. +@end menu + +@node Simple Commands +@subsection Simple Commands +@cindex commands, simple + +A simple command is the kind of command encountered most often. +It's just a sequence of words separated by @code{blank}s, terminated +by one of the shell's control operators (@pxref{Definitions}). The +first word generally specifies a command to be executed, with the +rest of the words being that command's arguments. + +The return status (@pxref{Exit Status}) of a simple command is +its exit status as provided +by the @sc{posix} 1003.1 @code{waitpid} function, or 128+@var{n} if +the command was terminated by signal @var{n}. + +@node Pipelines +@subsection Pipelines +@cindex pipeline +@cindex commands, pipelines + +A @code{pipeline} is a sequence of simple commands separated by +@samp{|}. + +@rwindex time +@rwindex ! +@cindex command timing +The format for a pipeline is +@example +[@code{time} [@code{-p}]] [@code{!}] @var{command1} [@code{|} @var{command2} @dots{}] +@end example + +@noindent +The output of each command in the pipeline is connected via a pipe +to the input of the next command. +That is, each command reads the previous command's output. + +The reserved word @code{time} causes timing statistics +to be printed for the pipeline once it finishes. +The statistics currently consist of elapsed (wall-clock) time and +user and system time consumed by the command's execution. +The @option{-p} option changes the output format to that specified +by @sc{posix}. +The @env{TIMEFORMAT} variable may be set to a format string that +specifies how the timing information should be displayed. +@xref{Bash Variables}, for a description of the available formats. +The use of @code{time} as a reserved word permits the timing of +shell builtins, shell functions, and pipelines. An external +@code{time} command cannot time these easily. + +If the pipeline is not executed asynchronously (@pxref{Lists}), the +shell waits for all commands in the pipeline to complete. + +Each command in a pipeline is executed in its own subshell +(@pxref{Command Execution Environment}). The exit +status of a pipeline is the exit status of the last command in the +pipeline. If the reserved word @samp{!} precedes the pipeline, the +exit status is the logical negation of the exit status of the last command. + +@node Lists +@subsection Lists of Commands +@cindex commands, lists + +A @code{list} is a sequence of one or more pipelines separated by one +of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||}, +and optionally terminated by one of @samp{;}, @samp{&}, or a +@code{newline}. + +Of these list operators, @samp{&&} and @samp{||} +have equal precedence, followed by @samp{;} and @samp{&}, +which have equal precedence. + +A sequence of one or more newlines may appear in a @code{list} +to delimit commands, equivalent to a semicolon. + +If a command is terminated by the control operator @samp{&}, +the shell executes the command asynchronously in a subshell. +This is known as executing the command in the @var{background}. +The shell does not wait for the command to finish, and the return +status is 0 (true). +When job control is not active (@pxref{Job Control}), +the standard input for asynchronous commands, in the absence of any +explicit redirections, is redirected from @code{/dev/null}. + +Commands separated by a @samp{;} are executed sequentially; the shell +waits for each command to terminate in turn. The return status is the +exit status of the last command executed. + +The control operators @samp{&&} and @samp{||} +denote @sc{and} lists and @sc{or} lists, respectively. +An @sc{and} list has the form +@example +@var{command1} && @var{command2} +@end example + +@noindent +@var{command2} is executed if, and only if, @var{command1} +returns an exit status of zero. + +An @sc{or} list has the form +@example +@var{command1} || @var{command2} +@end example + +@noindent +@var{command2} is executed if, and only if, @var{command1} +returns a non-zero exit status. + +The return status of +@sc{and} and @sc{or} lists is the exit status of the last command +executed in the list. + +@node Looping Constructs +@subsection Looping Constructs +@cindex commands, looping + +Bash supports the following looping constructs. + +Note that wherever a @samp{;} appears in the description of a +command's syntax, it may be replaced with one or more newlines. + +@table @code +@item until +@rwindex until +@rwindex do +@rwindex done +The syntax of the @code{until} command is: +@example +until @var{test-commands}; do @var{consequent-commands}; done +@end example +Execute @var{consequent-commands} as long as +@var{test-commands} has an exit status which is not zero. +The return status is the exit status of the last command executed +in @var{consequent-commands}, or zero if none was executed. + +@item while +@rwindex while +The syntax of the @code{while} command is: +@example +while @var{test-commands}; do @var{consequent-commands}; done +@end example + +Execute @var{consequent-commands} as long as +@var{test-commands} has an exit status of zero. +The return status is the exit status of the last command executed +in @var{consequent-commands}, or zero if none was executed. + +@item for +@rwindex for +The syntax of the @code{for} command is: + +@example +for @var{name} [in @var{words} @dots{}]; do @var{commands}; done +@end example +Expand @var{words}, and execute @var{commands} once for each member +in the resultant list, with @var{name} bound to the current member. +If @samp{in @var{words}} is not present, the @code{for} command +executes the @var{commands} once for each positional parameter that is +set, as if @samp{in "$@@"} had been specified +(@pxref{Special Parameters}). +The return status is the exit status of the last command that executes. +If there are no items in the expansion of @var{words}, no commands are +executed, and the return status is zero. + +An alternate form of the @code{for} command is also supported: + +@example +for (( @var{expr1} ; @var{expr2} ; @var{expr3} )) ; do @var{commands} ; done +@end example +First, the arithmetic expression @var{expr1} is evaluated according +to the rules described below (@pxref{Shell Arithmetic}). +The arithmetic expression @var{expr2} is then evaluated repeatedly +until it evaluates to zero. +Each time @var{expr2} evaluates to a non-zero value, @var{commands} are +executed and the arithmetic expression @var{expr3} is evaluated. +If any expression is omitted, it behaves as if it evaluates to 1. +The return value is the exit status of the last command in @var{list} +that is executed, or false if any of the expressions is invalid. + +@end table + +The @code{break} and @code{continue} builtins (@pxref{Bourne Shell Builtins}) +may be used to control loop execution. + +@node Conditional Constructs +@subsection Conditional Constructs +@cindex commands, conditional + +@table @code +@item if +@rwindex if +@rwindex then +@rwindex else +@rwindex elif +@rwindex fi +The syntax of the @code{if} command is: + +@example +if @var{test-commands}; then + @var{consequent-commands}; +[elif @var{more-test-commands}; then + @var{more-consequents};] +[else @var{alternate-consequents};] +fi +@end example + +The @var{test-commands} list is executed, and if its return status is zero, +the @var{consequent-commands} list is executed. +If @var{test-commands} returns a non-zero status, each @code{elif} list +is executed in turn, and if its exit status is zero, +the corresponding @var{more-consequents} is executed and the +command completes. +If @samp{else @var{alternate-consequents}} is present, and +the final command in the final @code{if} or @code{elif} clause +has a non-zero exit status, then @var{alternate-consequents} is executed. +The return status is the exit status of the last command executed, or +zero if no condition tested true. + +@item case +@rwindex case +@rwindex in +@rwindex esac +The syntax of the @code{case} command is: + +@example +@code{case @var{word} in [ [(] @var{pattern} [| @var{pattern}]@dots{}) @var{command-list} ;;]@dots{} esac} +@end example + +@code{case} will selectively execute the @var{command-list} corresponding to +the first @var{pattern} that matches @var{word}. +The @samp{|} is used to separate multiple patterns, and the @samp{)} +operator terminates a pattern list. +A list of patterns and an associated command-list is known +as a @var{clause}. Each clause must be terminated with @samp{;;}. +The @var{word} undergoes tilde expansion, parameter expansion, command +substitution, arithmetic expansion, and quote removal before matching is +attempted. Each @var{pattern} undergoes tilde expansion, parameter +expansion, command substitution, and arithmetic expansion. + +There may be an arbitrary number of @code{case} clauses, each terminated +by a @samp{;;}. The first pattern that matches determines the +command-list that is executed. + +Here is an example using @code{case} in a script that could be used to +describe one interesting feature of an animal: + +@example +echo -n "Enter the name of an animal: " +read ANIMAL +echo -n "The $ANIMAL has " +case $ANIMAL in + horse | dog | cat) echo -n "four";; + man | kangaroo ) echo -n "two";; + *) echo -n "an unknown number of";; +esac +echo " legs." +@end example + +@noindent +The return status is zero if no @var{pattern} is matched. Otherwise, the +return status is the exit status of the @var{command-list} executed. + +@item select +@rwindex select + +The @code{select} construct allows the easy generation of menus. +It has almost the same syntax as the @code{for} command: + +@example +select @var{name} [in @var{words} @dots{}]; do @var{commands}; done +@end example + +The list of words following @code{in} is expanded, generating a list +of items. The set of expanded words is printed on the standard +error output stream, each preceded by a number. If the +@samp{in @var{words}} is omitted, the positional parameters are printed, +as if @samp{in "$@@"} had been specifed. +The @env{PS3} prompt is then displayed and a line is read from the +standard input. +If the line consists of a number corresponding to one of the displayed +words, then the value of @var{name} is set to that word. +If the line is empty, the words and prompt are displayed again. +If @code{EOF} is read, the @code{select} command completes. +Any other value read causes @var{name} to be set to null. +The line read is saved in the variable @env{REPLY}. + +The @var{commands} are executed after each selection until a +@code{break} command is executed, at which +point the @code{select} command completes. + +Here is an example that allows the user to pick a filename from the +current directory, and displays the name and index of the file +selected. + +@example +select fname in *; +do + echo you picked $fname \($REPLY\) + break; +done +@end example + +@item ((@dots{})) +@example +(( @var{expression} )) +@end example + +The arithmetic @var{expression} is evaluated according to the rules +described below (@pxref{Shell Arithmetic}). +If the value of the expression is non-zero, the return status is 0; +otherwise the return status is 1. This is exactly equivalent to +@example +let "@var{expression}" +@end example +@noindent +@xref{Bash Builtins}, for a full description of the @code{let} builtin. + +@item [[@dots{}]] +@rwindex [[ +@rwindex ]] +@example +[[ @var{expression} ]] +@end example + +Return a status of 0 or 1 depending on the evaluation of +the conditional expression @var{expression}. +Expressions are composed of the primaries described below in +@ref{Bash Conditional Expressions}. +Word splitting and filename expansion are not performed on the words +between the @samp{[[} and @samp{]]}; tilde expansion, parameter and +variable expansion, arithmetic expansion, command substitution, process +substitution, and quote removal are performed. +Conditional operators such as @samp{-f} must be unquoted to be recognized +as primaries. + +When the @samp{==} and @samp{!=} operators are used, the string to the +right of the operator is considered a pattern and matched according +to the rules described below in @ref{Pattern Matching}. +The return value is 0 if the string matches or does not match +the pattern, respectively, and 1 otherwise. +Any part of the pattern may be quoted to force it to be matched as a +string. + +Expressions may be combined using the following operators, listed +in decreasing order of precedence: + +@table @code +@item ( @var{expression} ) +Returns the value of @var{expression}. +This may be used to override the normal precedence of operators. + +@item ! @var{expression} +True if @var{expression} is false. + +@item @var{expression1} && @var{expression2} +True if both @var{expression1} and @var{expression2} are true. + +@item @var{expression1} || @var{expression2} +True if either @var{expression1} or @var{expression2} is true. +@end table +@noindent +The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the +value of @var{expression1} is sufficient to determine the return +value of the entire conditional expression. + +@end table + +@node Command Grouping +@subsection Grouping Commands +@cindex commands, grouping + +Bash provides two ways to group a list of commands to be executed +as a unit. When commands are grouped, redirections may be applied +to the entire command list. For example, the output of all the +commands in the list may be redirected to a single stream. + +@table @code +@item () +@example +( @var{list} ) +@end example + +Placing a list of commands between parentheses causes a subshell +to be created, and each of the commands in @var{list} to be executed +in that subshell. Since the @var{list} is executed in a subshell, +variable assignments do not remain in effect after the subshell completes. + +@item @{@} +@rwindex @{ +@rwindex @} +@example +@{ @var{list}; @} +@end example + +Placing a list of commands between curly braces causes the list to +be executed in the current shell context. No subshell is created. +The semicolon (or newline) following @var{list} is required. +@end table + +In addition to the creation of a subshell, there is a subtle difference +between these two constructs due to historical reasons. The braces +are @code{reserved words}, so they must be separated from the @var{list} +by @code{blank}s. The parentheses are @code{operators}, and are +recognized as separate tokens by the shell even if they are not separated +from the @var{list} by whitespace. + +The exit status of both of these constructs is the exit status of +@var{list}. + +@node Shell Functions +@section Shell Functions +@cindex shell function +@cindex functions, shell + +Shell functions are a way to group commands for later execution +using a single name for the group. They are executed just like +a "regular" command. +When the name of a shell function is used as a simple command name, +the list of commands associated with that function name is executed. +Shell functions are executed in the current +shell context; no new process is created to interpret them. + +Functions are declared using this syntax: +@rwindex function +@example +[ @code{function} ] @var{name} () @{ @var{command-list}; @} +@end example + +This defines a shell function named @var{name}. The reserved +word @code{function} is optional. +If the @code{function} reserved +word is supplied, the parentheses are optional. +The @var{body} of the function is the @var{command-list} between @{ and @}. +This list is executed whenever @var{name} is specified as the +name of a command. The exit status of a function is +the exit status of the last command executed in the body. + +Note that for historical reasons, the curly braces that surround +the body of the function must be separated from the body by +@code{blank}s or newlines. +This is because the braces are reserved words and are only recognized +as such when they are separated by whitespace. +Also, the @var{command-list} must be terminated by a semicolon, +a @samp{&}, or a newline. + +When a function is executed, the arguments to the +function become the positional parameters +during its execution (@pxref{Positional Parameters}). +The special parameter @samp{#} that expands to the number of +positional parameters is updated to reflect the change. +Positional parameter @code{0} is unchanged. +The first element of the @env{FUNCNAME} variable is set to the +name of the function while the function is executing. +All other aspects of the shell execution +environment are identical between a function and its caller +with the exception that the @env{DEBUG} trap +below) is not inherited unless the function has been given the +@code{trace} attribute using the @code{declare} builtin or +the @code{-o functrace} option has been enabled with +the @code{set} builtin, +(in which case all functions inherit the @code{DEBUG} trap). +@xref{Bourne Shell Builtins}, for the description of the +@code{trap} builtin. + +If the builtin command @code{return} +is executed in a function, the function completes and +execution resumes with the next command after the function +call. +Any command associated with the @code{RETURN} trap is executed +before execution resumes. +When a function completes, the values of the +positional parameters and the special parameter @samp{#} +are restored to the values they had prior to the function's +execution. If a numeric argument is given to @code{return}, +that is the function's return status; otherwise the function's +return status is the exit status of the last command executed +before the @code{return}. + +Variables local to the function may be declared with the +@code{local} builtin. These variables are visible only to +the function and the commands it invokes. + +Function names and definitions may be listed with the +@option{-f} option to the @code{declare} or @code{typeset} +builtin commands (@pxref{Bash Builtins}). +The @option{-F} option to @code{declare} or @code{typeset} +will list the function names only +(and optionally the source file and line number, if the @code{extdebug} +shell option is enabled). +Functions may be exported so that subshells +automatically have them defined with the +@option{-f} option to the @code{export} builtin +(@pxref{Bourne Shell Builtins}). +Note that shell functions and variables with the same name may result +in multiple identically-named entries in the environment passed to the +shell's children. +Care should be taken in cases where this may cause a problem. + +Functions may be recursive. No limit is placed on the number of +recursive calls. + +@node Shell Parameters +@section Shell Parameters +@cindex parameters +@cindex variable, shell +@cindex shell variable + +@menu +* Positional Parameters:: The shell's command-line arguments. +* Special Parameters:: Parameters denoted by special characters. +@end menu + +A @var{parameter} is an entity that stores values. +It can be a @code{name}, a number, or one of the special characters +listed below. +A @var{variable} is a parameter denoted by a @code{name}. +A variable has a @var{value} and zero or more @var{attributes}. +Attributes are assigned using the @code{declare} builtin command +(see the description of the @code{declare} builtin in @ref{Bash Builtins}). + +A parameter is set if it has been assigned a value. The null string is +a valid value. Once a variable is set, it may be unset only by using +the @code{unset} builtin command. + +A variable may be assigned to by a statement of the form +@example +@var{name}=[@var{value}] +@end example +@noindent +If @var{value} +is not given, the variable is assigned the null string. All +@var{value}s undergo tilde expansion, parameter and variable expansion, +command substitution, arithmetic expansion, and quote +removal (detailed below). If the variable has its @code{integer} +attribute set, then @var{value} +is evaluated as an arithmetic expression even if the @code{$((@dots{}))} +expansion is not used (@pxref{Arithmetic Expansion}). +Word splitting is not performed, with the exception +of @code{"$@@"} as explained below. +Filename expansion is not performed. +Assignment statements may also appear as arguments to the +@code{declare}, @code{typeset}, @code{export}, @code{readonly}, +and @code{local} builtin commands. + +@node Positional Parameters +@subsection Positional Parameters +@cindex parameters, positional + +A @var{positional parameter} is a parameter denoted by one or more +digits, other than the single digit @code{0}. Positional parameters are +assigned from the shell's arguments when it is invoked, +and may be reassigned using the @code{set} builtin command. +Positional parameter @code{N} may be referenced as @code{$@{N@}}, or +as @code{$N} when @code{N} consists of a single digit. +Positional parameters may not be assigned to with assignment statements. +The @code{set} and @code{shift} builtins are used to set and +unset them (@pxref{Shell Builtin Commands}). +The positional parameters are +temporarily replaced when a shell function is executed +(@pxref{Shell Functions}). + +When a positional parameter consisting of more than a single +digit is expanded, it must be enclosed in braces. + +@node Special Parameters +@subsection Special Parameters +@cindex parameters, special + +The shell treats several parameters specially. These parameters may +only be referenced; assignment to them is not allowed. + +@vtable @code + +@item * +Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, it expands to a single word +with the value of each parameter separated by the first character +of the @env{IFS} +special variable. That is, @code{"$*"} is equivalent +to @code{"$1@var{c}$2@var{c}@dots{}"}, where @var{c} +is the first character of the value of the @code{IFS} +variable. +If @env{IFS} is unset, the parameters are separated by spaces. +If @env{IFS} is null, the parameters are joined without intervening +separators. + + +@item @@ +Expands to the positional parameters, starting from one. When the +expansion occurs within double quotes, each parameter expands to a +separate word. That is, @code{"$@@"} is equivalent to +@code{"$1" "$2" @dots{}}. +When there are no positional parameters, @code{"$@@"} and +@code{$@@} +expand to nothing (i.e., they are removed). + +@item # +Expands to the number of positional parameters in decimal. + +@item ? +Expands to the exit status of the most recently executed foreground +pipeline. + +@item - +(A hyphen.) Expands to the current option flags as specified upon +invocation, by the @code{set} +builtin command, or those set by the shell itself +(such as the @option{-i} option). + +@item $ +Expands to the process @sc{id} of the shell. In a @code{()} subshell, it +expands to the process @sc{id} of the invoking shell, not the subshell. + +@item ! +Expands to the process @sc{id} of the most recently executed background +(asynchronous) command. + +@item 0 +Expands to the name of the shell or shell script. This is set at +shell initialization. If Bash is invoked with a file of commands +(@pxref{Shell Scripts}), @code{$0} is set to the name of that file. +If Bash is started with the @option{-c} option (@pxref{Invoking Bash}), +then @code{$0} is set to the first argument after the string to be +executed, if one is present. Otherwise, it is set +to the filename used to invoke Bash, as given by argument zero. + +@item _ +(An underscore.) +At shell startup, set to the absolute filename of the shell or shell +script being executed as passed in the argument list. +Subsequently, expands to the last argument to the previous command, +after expansion. +Also set to the full pathname of each command executed and placed in +the environment exported to that command. +When checking mail, this parameter holds the name of the mail file. +@end vtable + +@node Shell Expansions +@section Shell Expansions +@cindex expansion + +Expansion is performed on the command line after it has been split into +@code{token}s. There are seven kinds of expansion performed: +@itemize @bullet +@item brace expansion +@item tilde expansion +@item parameter and variable expansion +@item command substitution +@item arithmetic expansion +@item word splitting +@item filename expansion +@end itemize + +@menu +* Brace Expansion:: Expansion of expressions within braces. +* Tilde Expansion:: Expansion of the ~ character. +* Shell Parameter Expansion:: How Bash expands variables to their values. +* Command Substitution:: Using the output of a command as an argument. +* Arithmetic Expansion:: How to use arithmetic in shell expansions. +* Process Substitution:: A way to write and read to and from a + command. +* Word Splitting:: How the results of expansion are split into separate + arguments. +* Filename Expansion:: A shorthand for specifying filenames matching patterns. +* Quote Removal:: How and when quote characters are removed from + words. +@end menu + +The order of expansions is: brace expansion, tilde expansion, +parameter, variable, and arithmetic expansion and +command substitution +(done in a left-to-right fashion), word splitting, and filename +expansion. + +On systems that can support it, there is an additional expansion +available: @var{process substitution}. This is performed at the +same time as parameter, variable, and arithmetic expansion and +command substitution. + +Only brace expansion, word splitting, and filename expansion +can change the number of words of the expansion; other expansions +expand a single word to a single word. +The only exceptions to this are the expansions of +@code{"$@@"} (@pxref{Special Parameters}) and @code{"$@{@var{name}[@@]@}"} +(@pxref{Arrays}). + +After all expansions, @code{quote removal} (@pxref{Quote Removal}) +is performed. + +@node Brace Expansion +@subsection Brace Expansion +@cindex brace expansion +@cindex expansion, brace + +Brace expansion is a mechanism by which arbitrary strings may be generated. +This mechanism is similar to +@var{filename expansion} (@pxref{Filename Expansion}), +but the file names generated need not exist. +Patterns to be brace expanded take the form of an optional @var{preamble}, +followed by either a series of comma-separated strings or a sequnce expression +between a pair of braces, +followed by an optional @var{postscript}. +The preamble is prefixed to each string contained within the braces, and +the postscript is then appended to each resulting string, expanding left +to right. + +Brace expansions may be nested. +The results of each expanded string are not sorted; left to right order +is preserved. +For example, +@example +bash$ echo a@{d,c,b@}e +ade ace abe +@end example + +A sequence expression takes the form @code{@{@var{x}..@var{y}@}}, +where @var{x} and @var{y} are either integers or single characters. +When integers are supplied, the expression expands to each number between +@var{x} and @var{y}, inclusive. +When characters are supplied, the expression expands to each character +lexicographically between @var{x} and @var{y}, inclusive. Note that +both @var{x} and @var{y} must be of the same type. + +Brace expansion is performed before any other expansions, +and any characters special to other expansions are preserved +in the result. It is strictly textual. Bash +does not apply any syntactic interpretation to the context of the +expansion or the text between the braces. +To avoid conflicts with parameter expansion, the string @samp{$@{} +is not considered eligible for brace expansion. + +A correctly-formed brace expansion must contain unquoted opening +and closing braces, and at least one unquoted comma or a valid +sequence expression. +Any incorrectly formed brace expansion is left unchanged. + +A @{ or @samp{,} may be quoted with a backslash to prevent its +being considered part of a brace expression. +To avoid conflicts with parameter expansion, the string @samp{$@{} +is not considered eligible for brace expansion. + +This construct is typically used as shorthand when the common +prefix of the strings to be generated is longer than in the +above example: +@example +mkdir /usr/local/src/bash/@{old,new,dist,bugs@} +@end example +or +@example +chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@} +@end example + +@node Tilde Expansion +@subsection Tilde Expansion +@cindex tilde expansion +@cindex expansion, tilde + +If a word begins with an unquoted tilde character (@samp{~}), all of the +characters up to the first unquoted slash (or all characters, +if there is no unquoted slash) are considered a @var{tilde-prefix}. +If none of the characters in the tilde-prefix are quoted, the +characters in the tilde-prefix following the tilde are treated as a +possible @var{login name}. +If this login name is the null string, the tilde is replaced with the +value of the @env{HOME} shell variable. +If @env{HOME} is unset, the home directory of the user executing the +shell is substituted instead. +Otherwise, the tilde-prefix is replaced with the home directory +associated with the specified login name. + +If the tilde-prefix is @samp{~+}, the value of +the shell variable @env{PWD} replaces the tilde-prefix. +If the tilde-prefix is @samp{~-}, the value of the shell variable +@env{OLDPWD}, if it is set, is substituted. + +If the characters following the tilde in the tilde-prefix consist of a +number @var{N}, optionally prefixed by a @samp{+} or a @samp{-}, +the tilde-prefix is replaced with the +corresponding element from the directory stack, as it would be displayed +by the @code{dirs} builtin invoked with the characters following tilde +in the tilde-prefix as an argument (@pxref{The Directory Stack}). +If the tilde-prefix, sans the tilde, consists of a number without a +leading @samp{+} or @samp{-}, @samp{+} is assumed. + +If the login name is invalid, or the tilde expansion fails, the word is +left unchanged. + +Each variable assignment is checked for unquoted tilde-prefixes immediately +following a @samp{:} or @samp{=}. +In these cases, tilde expansion is also performed. +Consequently, one may use file names with tildes in assignments to +@env{PATH}, @env{MAILPATH}, and @env{CDPATH}, +and the shell assigns the expanded value. + +The following table shows how Bash treats unquoted tilde-prefixes: + +@table @code +@item ~ +The value of @code{$HOME} +@item ~/foo +@file{$HOME/foo} + +@item ~fred/foo +The subdirectory @code{foo} of the home directory of the user +@code{fred} + +@item ~+/foo +@file{$PWD/foo} + +@item ~-/foo +@file{$@{OLDPWD-'~-'@}/foo} + +@item ~@var{N} +The string that would be displayed by @samp{dirs +@var{N}} + +@item ~+@var{N} +The string that would be displayed by @samp{dirs +@var{N}} + +@item ~-@var{N} +The string that would be displayed by @samp{dirs -@var{N}} + +@end table + +@node Shell Parameter Expansion +@subsection Shell Parameter Expansion +@cindex parameter expansion +@cindex expansion, parameter + +The @samp{$} character introduces parameter expansion, +command substitution, or arithmetic expansion. The parameter name +or symbol to be expanded may be enclosed in braces, which +are optional but serve to protect the variable to be expanded from +characters immediately following it which could be +interpreted as part of the name. + +When braces are used, the matching ending brace is the first @samp{@}} +not escaped by a backslash or within a quoted string, and not within an +embedded arithmetic expansion, command substitution, or parameter +expansion. + +The basic form of parameter expansion is $@{@var{parameter}@}. +The value of @var{parameter} is substituted. The braces are required +when @var{parameter} +is a positional parameter with more than one digit, +or when @var{parameter} +is followed by a character that is not to be +interpreted as part of its name. + +If the first character of @var{parameter} is an exclamation point, +a level of variable indirection is introduced. +Bash uses the value of the variable formed from the rest of +@var{parameter} as the name of the variable; this variable is then +expanded and that value is used in the rest of the substitution, rather +than the value of @var{parameter} itself. +This is known as @code{indirect expansion}. +The exceptions to this are the expansions of $@{!@var{prefix*}@} +and $@{!@var{name}[@@]@} +described below. +The exclamation point must immediately follow the left brace in order to +introduce indirection. + +In each of the cases below, @var{word} is subject to tilde expansion, +parameter expansion, command substitution, and arithmetic expansion. + +When not performing substring expansion, Bash tests for a parameter +that is unset or null; omitting the colon results in a test only for a +parameter that is unset. Put another way, if the colon is included, +the operator tests for both existence and that the value is not null; +if the colon is omitted, the operator tests only for existence. + +@table @code + +@item $@{@var{parameter}:@minus{}@var{word}@} +If @var{parameter} is unset or null, the expansion of +@var{word} is substituted. Otherwise, the value of +@var{parameter} is substituted. + +@item $@{@var{parameter}:=@var{word}@} +If @var{parameter} +is unset or null, the expansion of @var{word} +is assigned to @var{parameter}. +The value of @var{parameter} +is then substituted. Positional parameters and special parameters may +not be assigned to in this way. + +@item $@{@var{parameter}:?@var{word}@} +If @var{parameter} +is null or unset, the expansion of @var{word} (or a message +to that effect if @var{word} +is not present) is written to the standard error and the shell, if it +is not interactive, exits. Otherwise, the value of @var{parameter} is +substituted. + +@item $@{@var{parameter}:+@var{word}@} +If @var{parameter} +is null or unset, nothing is substituted, otherwise the expansion of +@var{word} is substituted. + +@item $@{@var{parameter}:@var{offset}@} +@itemx $@{@var{parameter}:@var{offset}:@var{length}@} +Expands to up to @var{length} characters of @var{parameter} +starting at the character specified by @var{offset}. +If @var{length} is omitted, expands to the substring of +@var{parameter} starting at the character specified by @var{offset}. +@var{length} and @var{offset} are arithmetic expressions +(@pxref{Shell Arithmetic}). +This is referred to as Substring Expansion. + +@var{length} must evaluate to a number greater than or equal to zero. +If @var{offset} evaluates to a number less than zero, the value +is used as an offset from the end of the value of @var{parameter}. +If @var{parameter} is @samp{@@}, the result is @var{length} positional +parameters beginning at @var{offset}. +If @var{parameter} is an array name indexed by @samp{@@} or @samp{*}, +the result is the @var{length} +members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}. +Substring indexing is zero-based unless the positional parameters +are used, in which case the indexing starts at 1. + +@item $@{!@var{prefix}*@} +@itemx $@{!@var{prefix}@@@} +Expands to the names of variables whose names begin with @var{prefix}, +separated by the first character of the @env{IFS} special variable. + +@item $@{!@var{name}[@@]@} +@itemx $@{!@var{name}[*]@} +If @var{name} is an array variable, expands to the list of array indices +(keys) assigned in @var{name}. +If @var{name} is not an array, expands to 0 if @var{name} is set and null +otherwise. +When @samp{@@} is used and the expansion appears within double quotes, each +key expands to a separate word. + +@item $@{#@var{parameter}@} +The length in characters of the expanded value of @var{parameter} is +substituted. +If @var{parameter} is @samp{*} or @samp{@@}, the value substituted +is the number of positional parameters. +If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@}, +the value substituted is the number of elements in the array. + +@item $@{@var{parameter}#@var{word}@} +@itemx $@{@var{parameter}##@var{word}@} +The @var{word} +is expanded to produce a pattern just as in filename +expansion (@pxref{Filename Expansion}). If the pattern matches +the beginning of the expanded value of @var{parameter}, +then the result of the expansion is the expanded value of @var{parameter} +with the shortest matching pattern (the @samp{#} case) or the +longest matching pattern (the @samp{##} case) deleted. +If @var{parameter} is @samp{@@} or @samp{*}, +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If @var{parameter} is an array variable subscripted with +@samp{@@} or @samp{*}, +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. + +@item $@{@var{parameter}%@var{word}@} +@itemx $@{@var{parameter}%%@var{word}@} +The @var{word} is expanded to produce a pattern just as in +filename expansion. +If the pattern matches a trailing portion of the expanded value of +@var{parameter}, then the result of the expansion is the value of +@var{parameter} with the shortest matching pattern (the @samp{%} case) +or the longest matching pattern (the @samp{%%} case) deleted. +If @var{parameter} is @samp{@@} or @samp{*}, +the pattern removal operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If @var{parameter} +is an array variable subscripted with @samp{@@} or @samp{*}, +the pattern removal operation is applied to each member of the +array in turn, and the expansion is the resultant list. + +@item $@{@var{parameter}/@var{pattern}/@var{string}@} +@itemx $@{@var{parameter}//@var{pattern}/@var{string}@} + +The @var{pattern} is expanded to produce a pattern just as in +filename expansion. +@var{Parameter} is expanded and the longest match of @var{pattern} +against its value is replaced with @var{string}. +In the first form, only the first match is replaced. +The second form causes all matches of @var{pattern} to be +replaced with @var{string}. +If @var{pattern} begins with @samp{#}, it must match at the beginning +of the expanded value of @var{parameter}. +If @var{pattern} begins with @samp{%}, it must match at the end +of the expanded value of @var{parameter}. +If @var{string} is null, matches of @var{pattern} are deleted +and the @code{/} following @var{pattern} may be omitted. +If @var{parameter} is @samp{@@} or @samp{*}, +the substitution operation is applied to each positional +parameter in turn, and the expansion is the resultant list. +If @var{parameter} +is an array variable subscripted with @samp{@@} or @samp{*}, +the substitution operation is applied to each member of the +array in turn, and the expansion is the resultant list. + +@end table + +@node Command Substitution +@subsection Command Substitution +@cindex command substitution + +Command substitution allows the output of a command to replace +the command itself. +Command substitution occurs when a command is enclosed as follows: +@example +$(@var{command}) +@end example +@noindent +or +@example +`@var{command}` +@end example + +@noindent +Bash performs the expansion by executing @var{command} and +replacing the command substitution with the standard output of the +command, with any trailing newlines deleted. +Embedded newlines are not deleted, but they may be removed during +word splitting. +The command substitution @code{$(cat @var{file})} can be +replaced by the equivalent but faster @code{$(< @var{file})}. + +When the old-style backquote form of substitution is used, +backslash retains its literal meaning except when followed by +@samp{$}, @samp{`}, or @samp{\}. +The first backquote not preceded by a backslash terminates the +command substitution. +When using the @code{$(@var{command})} form, all characters between +the parentheses make up the command; none are treated specially. + +Command substitutions may be nested. To nest when using the backquoted +form, escape the inner backquotes with backslashes. + +If the substitution appears within double quotes, word splitting and +filename expansion are not performed on the results. + +@node Arithmetic Expansion +@subsection Arithmetic Expansion +@cindex expansion, arithmetic +@cindex arithmetic expansion + +Arithmetic expansion allows the evaluation of an arithmetic expression +and the substitution of the result. The format for arithmetic expansion is: + +@example +$(( @var{expression} )) +@end example + +The expression is treated as if it were within double quotes, but +a double quote inside the parentheses is not treated specially. +All tokens in the expression undergo parameter expansion, command +substitution, and quote removal. +Arithmetic expansions may be nested. + +The evaluation is performed according to the rules listed below +(@pxref{Shell Arithmetic}). +If the expression is invalid, Bash prints a message indicating +failure to the standard error and no substitution occurs. + +@node Process Substitution +@subsection Process Substitution +@cindex process substitution + +Process substitution is supported on systems that support named +pipes (@sc{fifo}s) or the @file{/dev/fd} method of naming open files. +It takes the form of +@example +<(@var{list}) +@end example +@noindent +or +@example +>(@var{list}) +@end example +@noindent +The process @var{list} is run with its input or output connected to a +@sc{fifo} or some file in @file{/dev/fd}. The name of this file is +passed as an argument to the current command as the result of the +expansion. If the @code{>(@var{list})} form is used, writing to +the file will provide input for @var{list}. If the +@code{<(@var{list})} form is used, the file passed as an +argument should be read to obtain the output of @var{list}. +Note that no space may appear between the @code{<} or @code{>} +and the left parenthesis, otherwise the construct would be interpreted +as a redirection. + +When available, process substitution is performed simultaneously with +parameter and variable expansion, command substitution, and arithmetic +expansion. + +@node Word Splitting +@subsection Word Splitting +@cindex word splitting + +The shell scans the results of parameter expansion, command substitution, +and arithmetic expansion that did not occur within double quotes for +word splitting. + +The shell treats each character of @env{$IFS} +as a delimiter, and splits the results of the other +expansions into words on these characters. If +@env{IFS} is unset, or its value is exactly @code{<space><tab><newline>}, +the default, then any sequence of @env{IFS} +characters serves to delimit words. If @env{IFS} +has a value other than the default, then sequences of +the whitespace characters @code{space} and @code{tab} +are ignored at the beginning and end of the +word, as long as the whitespace character is in the +value of @env{IFS} (an @env{IFS} whitespace character). +Any character in @env{IFS} that is not @env{IFS} +whitespace, along with any adjacent @env{IFS} +whitespace characters, delimits a field. A sequence of @env{IFS} +whitespace characters is also treated as a delimiter. +If the value of @env{IFS} is null, no word splitting occurs. + +Explicit null arguments (@code{""} or @code{''}) are retained. +Unquoted implicit null arguments, resulting from the expansion of +parameters that have no values, are removed. +If a parameter with no value is expanded within double quotes, a +null argument results and is retained. + +Note that if no expansion occurs, no splitting +is performed. + +@node Filename Expansion +@subsection Filename Expansion +@menu +* Pattern Matching:: How the shell matches patterns. +@end menu +@cindex expansion, filename +@cindex expansion, pathname +@cindex filename expansion +@cindex pathname expansion + +After word splitting, unless the @option{-f} option has been set +(@pxref{The Set Builtin}), Bash scans each word for the characters +@samp{*}, @samp{?}, and @samp{[}. +If one of these characters appears, then the word is +regarded as a @var{pattern}, +and replaced with an alphabetically sorted list of +file names matching the pattern. If no matching file names are found, +and the shell option @code{nullglob} is disabled, the word is left +unchanged. +If the @code{nullglob} option is set, and no matches are found, the word +is removed. +If the shell option @code{nocaseglob} is enabled, the match is performed +without regard to the case of alphabetic characters. + +When a pattern is used for filename generation, the character @samp{.} +at the start of a filename or immediately following a slash +must be matched explicitly, unless the shell option @code{dotglob} is set. +When matching a file name, the slash character must always be +matched explicitly. +In other cases, the @samp{.} character is not treated specially. + +See the description of @code{shopt} in @ref{Bash Builtins}, +for a description of the @code{nocaseglob}, @code{nullglob}, +and @code{dotglob} options. + +The @env{GLOBIGNORE} +shell variable may be used to restrict the set of filenames matching a +pattern. If @env{GLOBIGNORE} +is set, each matching filename that also matches one of the patterns in +@env{GLOBIGNORE} is removed from the list of matches. The filenames +@file{.} and @file{..} +are always ignored when @env{GLOBIGNORE} +is set and not null. +However, setting @env{GLOBIGNORE} to a non-null value has the effect of +enabling the @code{dotglob} +shell option, so all other filenames beginning with a +@samp{.} will match. +To get the old behavior of ignoring filenames beginning with a +@samp{.}, make @samp{.*} one of the patterns in @env{GLOBIGNORE}. +The @code{dotglob} option is disabled when @env{GLOBIGNORE} +is unset. + +@node Pattern Matching +@subsubsection Pattern Matching +@cindex pattern matching +@cindex matching, pattern + +Any character that appears in a pattern, other than the special pattern +characters described below, matches itself. +The @sc{nul} character may not occur in a pattern. +A backslash escapes the following character; the +escaping backslash is discarded when matching. +The special pattern characters must be quoted if they are to be matched +literally. + +The special pattern characters have the following meanings: +@table @code +@item * +Matches any string, including the null string. +@item ? +Matches any single character. +@item [@dots{}] +Matches any one of the enclosed characters. A pair of characters +separated by a hyphen denotes a @var{range expression}; +any character that sorts between those two characters, inclusive, +using the current locale's collating sequence and character set, +is matched. If the first character following the +@samp{[} is a @samp{!} or a @samp{^} +then any character not enclosed is matched. A @samp{@minus{}} +may be matched by including it as the first or last character +in the set. A @samp{]} may be matched by including it as the first +character in the set. +The sorting order of characters in range expressions is determined by +the current locale and the value of the @env{LC_COLLATE} shell variable, +if set. + +For example, in the default C locale, @samp{[a-dx-z]} is equivalent to +@samp{[abcdxyz]}. Many locales sort characters in dictionary order, and in +these locales @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]}; +it might be equivalent to @samp{[aBbCcDdxXyYz]}, for example. To obtain +the traditional interpretation of ranges in bracket expressions, you can +force the use of the C locale by setting the @env{LC_COLLATE} or +@env{LC_ALL} environment variable to the value @samp{C}. + +Within @samp{[} and @samp{]}, @var{character classes} can be specified +using the syntax +@code{[:}@var{class}@code{:]}, where @var{class} is one of the +following classes defined in the @sc{posix} 1003.2 standard: +@example +alnum alpha ascii blank cntrl digit graph lower +print punct space upper word xdigit +@end example +@noindent +A character class matches any character belonging to that class. +The @code{word} character class matches letters, digits, and the character +@samp{_}. + +Within @samp{[} and @samp{]}, an @var{equivalence class} can be +specified using the syntax @code{[=}@var{c}@code{=]}, which +matches all characters with the same collation weight (as defined +by the current locale) as the character @var{c}. + +Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]} +matches the collating symbol @var{symbol}. +@end table + +If the @code{extglob} shell option is enabled using the @code{shopt} +builtin, several extended pattern matching operators are recognized. +In the following description, a @var{pattern-list} is a list of one +or more patterns separated by a @samp{|}. +Composite patterns may be formed using one or more of the following +sub-patterns: + +@table @code +@item ?(@var{pattern-list}) +Matches zero or one occurrence of the given patterns. + +@item *(@var{pattern-list}) +Matches zero or more occurrences of the given patterns. + +@item +(@var{pattern-list}) +Matches one or more occurrences of the given patterns. + +@item @@(@var{pattern-list}) +Matches exactly one of the given patterns. + +@item !(@var{pattern-list}) +Matches anything except one of the given patterns. +@end table + +@node Quote Removal +@subsection Quote Removal + +After the preceding expansions, all unquoted occurrences of the +characters @samp{\}, @samp{'}, and @samp{"} that did not +result from one of the above expansions are removed. + +@node Redirections +@section Redirections +@cindex redirection + +Before a command is executed, its input and output +may be @var{redirected} +using a special notation interpreted by the shell. +Redirection may also be used to open and close files for the +current shell execution environment. The following redirection +operators may precede or appear anywhere within a +simple command or may follow a command. +Redirections are processed in the order they appear, from +left to right. + +In the following descriptions, if the file descriptor number is +omitted, and the first character of the redirection operator is +@samp{<}, the redirection refers to the standard input (file +descriptor 0). If the first character of the redirection operator +is @samp{>}, the redirection refers to the standard output (file +descriptor 1). + +The word following the redirection operator in the following +descriptions, unless otherwise noted, is subjected to brace expansion, +tilde expansion, parameter expansion, command substitution, arithmetic +expansion, quote removal, filename expansion, and word splitting. +If it expands to more than one word, Bash reports an error. + +Note that the order of redirections is significant. For example, +the command +@example +ls > @var{dirlist} 2>&1 +@end example +@noindent +directs both standard output (file descriptor 1) and standard error +(file descriptor 2) to the file @var{dirlist}, while the command +@example +ls 2>&1 > @var{dirlist} +@end example +@noindent +directs only the standard output to file @var{dirlist}, +because the standard error was duplicated as standard output +before the standard output was redirected to @var{dirlist}. + +Bash handles several filenames specially when they are used in +redirections, as described in the following table: + +@table @code +@item /dev/fd/@var{fd} +If @var{fd} is a valid integer, file descriptor @var{fd} is duplicated. + +@item /dev/stdin +File descriptor 0 is duplicated. + +@item /dev/stdout +File descriptor 1 is duplicated. + +@item /dev/stderr +File descriptor 2 is duplicated. + +@item /dev/tcp/@var{host}/@var{port} +If @var{host} is a valid hostname or Internet address, and @var{port} +is an integer port number or service name, Bash attempts to open a TCP +connection to the corresponding socket. + +@item /dev/udp/@var{host}/@var{port} +If @var{host} is a valid hostname or Internet address, and @var{port} +is an integer port number or service name, Bash attempts to open a UDP +connection to the corresponding socket. + +@end table + +A failure to open or create a file causes the redirection to fail. + +@subsection Redirecting Input +Redirection of input causes the file whose name results from +the expansion of @var{word} +to be opened for reading on file descriptor @code{n}, +or the standard input (file descriptor 0) if @code{n} +is not specified. + +The general format for redirecting input is: +@example +[@var{n}]<@var{word} +@end example + +@subsection Redirecting Output +Redirection of output causes the file whose name results from +the expansion of @var{word} +to be opened for writing on file descriptor @var{n}, +or the standard output (file descriptor 1) if @var{n} +is not specified. If the file does not exist it is created; +if it does exist it is truncated to zero size. + +The general format for redirecting output is: +@example +[@var{n}]>[|]@var{word} +@end example + +If the redirection operator is @samp{>}, and the @code{noclobber} +option to the @code{set} builtin has been enabled, the redirection +will fail if the file whose name results from the expansion of +@var{word} exists and is a regular file. +If the redirection operator is @samp{>|}, or the redirection operator is +@samp{>} and the @code{noclobber} option is not enabled, the redirection +is attempted even if the file named by @var{word} exists. + +@subsection Appending Redirected Output +Redirection of output in this fashion +causes the file whose name results from +the expansion of @var{word} +to be opened for appending on file descriptor @var{n}, +or the standard output (file descriptor 1) if @var{n} +is not specified. If the file does not exist it is created. + +The general format for appending output is: +@example +[@var{n}]>>@var{word} +@end example + +@subsection Redirecting Standard Output and Standard Error +Bash allows both the +standard output (file descriptor 1) and +the standard error output (file descriptor 2) +to be redirected to the file whose name is the +expansion of @var{word} with this construct. + +There are two formats for redirecting standard output and +standard error: +@example +&>@var{word} +@end example +@noindent +and +@example +>&@var{word} +@end example +@noindent +Of the two forms, the first is preferred. +This is semantically equivalent to +@example +>@var{word} 2>&1 +@end example + +@subsection Here Documents +This type of redirection instructs the shell to read input from the +current source until a line containing only @var{word} +(with no trailing blanks) is seen. All of +the lines read up to that point are then used as the standard +input for a command. + +The format of here-documents is: +@example +<<[@minus{}]@var{word} + @var{here-document} +@var{delimiter} +@end example + +No parameter expansion, command substitution, arithmetic expansion, +or filename expansion is performed on +@var{word}. If any characters in @var{word} are quoted, the +@var{delimiter} is the result of quote removal on @var{word}, +and the lines in the here-document are not expanded. +If @var{word} is unquoted, +all lines of the here-document are subjected to parameter expansion, +command substitution, and arithmetic expansion. In the latter +case, the character sequence @code{\newline} is ignored, and @samp{\} +must be used to quote the characters +@samp{\}, @samp{$}, and @samp{`}. + +If the redirection operator is @samp{<<-}, +then all leading tab characters are stripped from input lines and the +line containing @var{delimiter}. +This allows here-documents within shell scripts to be indented in a +natural fashion. + +@subsection Here Strings +A variant of here documents, the format is: +@example +<<< @var{word} +@end example + +The @var{word} is expanded and supplied to the command on its standard +input. + +@subsection Duplicating File Descriptors +The redirection operator +@example +[@var{n}]<&@var{word} +@end example +@noindent +is used to duplicate input file descriptors. +If @var{word} +expands to one or more digits, the file descriptor denoted by @var{n} +is made to be a copy of that file descriptor. +If the digits in @var{word} do not specify a file descriptor open for +input, a redirection error occurs. +If @var{word} +evaluates to @samp{-}, file descriptor @var{n} is closed. If +@var{n} is not specified, the standard input (file descriptor 0) is used. + +The operator +@example +[@var{n}]>&@var{word} +@end example +@noindent +is used similarly to duplicate output file descriptors. If +@var{n} is not specified, the standard output (file descriptor 1) is used. +If the digits in @var{word} do not specify a file descriptor open for +output, a redirection error occurs. +As a special case, if @var{n} is omitted, and @var{word} does not +expand to one or more digits, the standard output and standard +error are redirected as described previously. + +@subsection Moving File Descriptors +The redirection operator +@example +[@var{n}]<&@var{digit}- +@end example +@noindent +moves the file descriptor @var{digit} to file descriptor @var{n}, +or the standard input (file descriptor 0) if @var{n} is not specified. +@var{digit} is closed after being duplicated to @var{n}. + +Similarly, the redirection operator +@example +[@var{n}]>&@var{digit}- +@end example +@noindent +moves the file descriptor @var{digit} to file descriptor @var{n}, +or the standard output (file descriptor 1) if @var{n} is not specified. + +@subsection Opening File Descriptors for Reading and Writing +The redirection operator +@example +[@var{n}]<>@var{word} +@end example +@noindent +causes the file whose name is the expansion of @var{word} +to be opened for both reading and writing on file descriptor +@var{n}, or on file descriptor 0 if @var{n} +is not specified. If the file does not exist, it is created. + +@node Executing Commands +@section Executing Commands + +@menu +* Simple Command Expansion:: How Bash expands simple commands before + executing them. + +* Command Search and Execution:: How Bash finds commands and runs them. + +* Command Execution Environment:: The environment in which Bash + executes commands that are not + shell builtins. + +* Environment:: The environment given to a command. + +* Exit Status:: The status returned by commands and how Bash + interprets it. + +* Signals:: What happens when Bash or a command it runs + receives a signal. + +@end menu + +@node Simple Command Expansion +@subsection Simple Command Expansion +@cindex command expansion + +When a simple command is executed, the shell performs the following +expansions, assignments, and redirections, from left to right. + +@enumerate +@item +The words that the parser has marked as variable assignments (those +preceding the command name) and redirections are saved for later +processing. + +@item +The words that are not variable assignments or redirections are +expanded (@pxref{Shell Expansions}). +If any words remain after expansion, the first word +is taken to be the name of the command and the remaining words are +the arguments. + +@item +Redirections are performed as described above (@pxref{Redirections}). + +@item +The text after the @samp{=} in each variable assignment undergoes tilde +expansion, parameter expansion, command substitution, arithmetic expansion, +and quote removal before being assigned to the variable. +@end enumerate + +If no command name results, the variable assignments affect the current +shell environment. Otherwise, the variables are added to the environment +of the executed command and do not affect the current shell environment. +If any of the assignments attempts to assign a value to a readonly variable, +an error occurs, and the command exits with a non-zero status. + +If no command name results, redirections are performed, but do not +affect the current shell environment. A redirection error causes the +command to exit with a non-zero status. + +If there is a command name left after expansion, execution proceeds as +described below. Otherwise, the command exits. If one of the expansions +contained a command substitution, the exit status of the command is +the exit status of the last command substitution performed. If there +were no command substitutions, the command exits with a status of zero. + +@node Command Search and Execution +@subsection Command Search and Execution +@cindex command execution +@cindex command search + +After a command has been split into words, if it results in a +simple command and an optional list of arguments, the following +actions are taken. + +@enumerate +@item +If the command name contains no slashes, the shell attempts to +locate it. If there exists a shell function by that name, that +function is invoked as described in @ref{Shell Functions}. + +@item +If the name does not match a function, the shell searches for +it in the list of shell builtins. If a match is found, that +builtin is invoked. + +@item +If the name is neither a shell function nor a builtin, +and contains no slashes, Bash searches each element of +@env{$PATH} for a directory containing an executable file +by that name. Bash uses a hash table to remember the full +pathnames of executable files to avoid multiple @env{PATH} searches +(see the description of @code{hash} in @ref{Bourne Shell Builtins}). +A full search of the directories in @env{$PATH} +is performed only if the command is not found in the hash table. +If the search is unsuccessful, the shell prints an error +message and returns an exit status of 127. + +@item +If the search is successful, or if the command name contains +one or more slashes, the shell executes the named program in +a separate execution environment. +Argument 0 is set to the name given, and the remaining arguments +to the command are set to the arguments supplied, if any. + +@item +If this execution fails because the file is not in executable +format, and the file is not a directory, it is assumed to be a +@var{shell script} and the shell executes it as described in +@ref{Shell Scripts}. + +@item +If the command was not begun asynchronously, the shell waits for +the command to complete and collects its exit status. + +@end enumerate + +@node Command Execution Environment +@subsection Command Execution Environment +@cindex execution environment + +The shell has an @var{execution environment}, which consists of the +following: + +@itemize @bullet +@item +open files inherited by the shell at invocation, as modified by +redirections supplied to the @code{exec} builtin + +@item +the current working directory as set by @code{cd}, @code{pushd}, or +@code{popd}, or inherited by the shell at invocation + +@item +the file creation mode mask as set by @code{umask} or inherited from +the shell's parent + +@item +current traps set by @code{trap} + +@item +shell parameters that are set by variable assignment or with @code{set} +or inherited from the shell's parent in the environment + +@item +shell functions defined during execution or inherited from the shell's +parent in the environment + +@item +options enabled at invocation (either by default or with command-line +arguments) or by @code{set} + +@item +options enabled by @code{shopt} + +@item +shell aliases defined with @code{alias} (@pxref{Aliases}) + +@item +various process @sc{id}s, including those of background jobs +(@pxref{Lists}), the value of @code{$$}, and the value of +@env{$PPID} + +@end itemize + +When a simple command other than a builtin or shell function +is to be executed, it +is invoked in a separate execution environment that consists of +the following. Unless otherwise noted, the values are inherited +from the shell. + +@itemize @bullet +@item +the shell's open files, plus any modifications and additions specified +by redirections to the command + +@item +the current working directory + +@item +the file creation mode mask + +@item +shell variables and functions marked for export, along with variables +exported for the command, passed in the environment (@pxref{Environment}) + +@item +traps caught by the shell are reset to the values inherited from the +shell's parent, and traps ignored by the shell are ignored + +@end itemize + +A command invoked in this separate environment cannot affect the +shell's execution environment. + +Command substitution and asynchronous commands are invoked in a +subshell environment that is a duplicate of the shell environment, +except that traps caught by the shell are reset to the values +that the shell inherited from its parent at invocation. Builtin +commands that are invoked as part of a pipeline are also executed +in a subshell environment. Changes made to the subshell environment +cannot affect the shell's execution environment. + +If a command is followed by a @samp{&} and job control is not active, the +default standard input for the command is the empty file @file{/dev/null}. +Otherwise, the invoked command inherits the file descriptors of the calling +shell as modified by redirections. + +@node Environment +@subsection Environment +@cindex environment + +When a program is invoked it is given an array of strings +called the @var{environment}. +This is a list of name-value pairs, of the form @code{name=value}. + +Bash provides several ways to manipulate the environment. +On invocation, the shell scans its own environment and +creates a parameter for each name found, automatically marking +it for @var{export} +to child processes. Executed commands inherit the environment. +The @code{export} and @samp{declare -x} +commands allow parameters and functions to be added to and +deleted from the environment. If the value of a parameter +in the environment is modified, the new value becomes part +of the environment, replacing the old. The environment +inherited by any executed command consists of the shell's +initial environment, whose values may be modified in the shell, +less any pairs removed by the @code{unset} and @samp{export -n} +commands, plus any additions via the @code{export} and +@samp{declare -x} commands. + +The environment for any simple command +or function may be augmented temporarily by prefixing it with +parameter assignments, as described in @ref{Shell Parameters}. +These assignment statements affect only the environment seen +by that command. + +If the @option{-k} option is set (@pxref{The Set Builtin}), then all +parameter assignments are placed in the environment for a command, +not just those that precede the command name. + +When Bash invokes an external command, the variable @samp{$_} +is set to the full path name of the command and passed to that +command in its environment. + +@node Exit Status +@subsection Exit Status +@cindex exit status + +For the shell's purposes, a command which exits with a +zero exit status has succeeded. +A non-zero exit status indicates failure. +This seemingly counter-intuitive scheme is used so there +is one well-defined way to indicate success and a variety of +ways to indicate various failure modes. +When a command terminates on a fatal signal whose number is @var{N}, +Bash uses the value 128+@var{N} as the exit status. + +If a command is not found, the child process created to +execute it returns a status of 127. If a command is found +but is not executable, the return status is 126. + +If a command fails because of an error during expansion or redirection, +the exit status is greater than zero. + +The exit status is used by the Bash conditional commands +(@pxref{Conditional Constructs}) and some of the list +constructs (@pxref{Lists}). + +All of the Bash builtins return an exit status of zero if they succeed +and a non-zero status on failure, so they may be used by the +conditional and list constructs. +All builtins return an exit status of 2 to indicate incorrect usage. + +@node Signals +@subsection Signals +@cindex signal handling + +When Bash is interactive, in the absence of any traps, it ignores +@code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell), +and @code{SIGINT} +is caught and handled (so that the @code{wait} builtin is interruptible). +When Bash receives a @code{SIGINT}, it breaks out of any executing loops. +In all cases, Bash ignores @code{SIGQUIT}. +If job control is in effect (@pxref{Job Control}), Bash +ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. + +Commands started by Bash have signal handlers set to the +values inherited by the shell from its parent. +When job control is not in effect, asynchronous commands +ignore @code{SIGINT} and @code{SIGQUIT} as well. +Commands run as a result of +command substitution ignore the keyboard-generated job control signals +@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. + +The shell exits by default upon receipt of a @code{SIGHUP}. +Before exiting, an interactive shell resends the @code{SIGHUP} to +all jobs, running or stopped. +Stopped jobs are sent @code{SIGCONT} to ensure that they receive +the @code{SIGHUP}. +To prevent the shell from sending the @code{SIGHUP} signal to a +particular job, it should be removed +from the jobs table with the @code{disown} +builtin (@pxref{Job Control Builtins}) or marked +to not receive @code{SIGHUP} using @code{disown -h}. + +If the @code{huponexit} shell option has been set with @code{shopt} +(@pxref{Bash Builtins}), Bash sends a @code{SIGHUP} to all jobs when +an interactive login shell exits. + +When Bash receives a signal for which a trap has been set while waiting +for a command to complete, the trap will not be executed until the +command completes. +When Bash is waiting for an asynchronous +command via the @code{wait} builtin, the reception of a signal for +which a trap has been set will cause the @code{wait} builtin to return +immediately with an exit status greater than 128, immediately after +which the trap is executed. + +@node Shell Scripts +@section Shell Scripts +@cindex shell script + +A shell script is a text file containing shell commands. When such +a file is used as the first non-option argument when invoking Bash, +and neither the @option{-c} nor @option{-s} option is supplied +(@pxref{Invoking Bash}), +Bash reads and executes commands from the file, then exits. This +mode of operation creates a non-interactive shell. The shell first +searches for the file in the current directory, and looks in the +directories in @env{$PATH} if not found there. + +When Bash runs +a shell script, it sets the special parameter @code{0} to the name +of the file, rather than the name of the shell, and the positional +parameters are set to the remaining arguments, if any are given. +If no additional arguments are supplied, the positional parameters +are unset. + +A shell script may be made executable by using the @code{chmod} command +to turn on the execute bit. When Bash finds such a file while +searching the @env{$PATH} for a command, it spawns a subshell to +execute it. In other words, executing +@example +filename @var{arguments} +@end example +@noindent +is equivalent to executing +@example +bash filename @var{arguments} +@end example + +@noindent +if @code{filename} is an executable shell script. +This subshell reinitializes itself, so that the effect is as if a +new shell had been invoked to interpret the script, with the +exception that the locations of commands remembered by the parent +(see the description of @code{hash} in @ref{Bourne Shell Builtins}) +are retained by the child. + +Most versions of Unix make this a part of the operating system's command +execution mechanism. If the first line of a script begins with +the two characters @samp{#!}, the remainder of the line specifies +an interpreter for the program. +Thus, you can specify Bash, @code{awk}, Perl, or some other +interpreter and write the rest of the script file in that language. + +The arguments to the interpreter +consist of a single optional argument following the interpreter +name on the first line of the script file, followed by the name of +the script file, followed by the rest of the arguments. Bash +will perform this action on operating systems that do not handle it +themselves. Note that some older versions of Unix limit the interpreter +name and argument to a maximum of 32 characters. + +Bash scripts often begin with @code{#! /bin/bash} (assuming that +Bash has been installed in @file{/bin}), since this ensures that +Bash will be used to interpret the script, even if it is executed +under another shell. + +@node Shell Builtin Commands +@chapter Shell Builtin Commands + +@menu +* Bourne Shell Builtins:: Builtin commands inherited from the Bourne + Shell. +* Bash Builtins:: Table of builtins specific to Bash. +* The Set Builtin:: This builtin is so overloaded it + deserves its own section. +* Special Builtins:: Builtin commands classified specially by + POSIX.2. +@end menu + +Builtin commands are contained within the shell itself. +When the name of a builtin command is used as the first word of +a simple command (@pxref{Simple Commands}), the shell executes +the command directly, without invoking another program. +Builtin commands are necessary to implement functionality impossible +or inconvenient to obtain with separate utilities. + +This section briefly the builtins which Bash inherits from +the Bourne Shell, as well as the builtin commands which are unique +to or have been extended in Bash. + +Several builtin commands are described in other chapters: builtin +commands which provide the Bash interface to the job control +facilities (@pxref{Job Control Builtins}), the directory stack +(@pxref{Directory Stack Builtins}), the command history +(@pxref{Bash History Builtins}), and the programmable completion +facilities (@pxref{Programmable Completion Builtins}). + +Many of the builtins have been extended by @sc{posix} or Bash. + +@node Bourne Shell Builtins +@section Bourne Shell Builtins + +The following shell builtin commands are inherited from the Bourne Shell. +These commands are implemented as specified by the @sc{posix} 1003.2 standard. + +@table @code +@item : @r{(a colon)} +@btindex : +@example +: [@var{arguments}] +@end example +Do nothing beyond expanding @var{arguments} and performing redirections. +The return status is zero. + +@item . @r{(a period)} +@btindex . +@example +. @var{filename} [@var{arguments}] +@end example +Read and execute commands from the @var{filename} argument in the +current shell context. If @var{filename} does not contain a slash, +the @env{PATH} variable is used to find @var{filename}. +When Bash is not in @sc{posix} mode, the current directory is searched +if @var{filename} is not found in @env{$PATH}. +If any @var{arguments} are supplied, they become the positional +parameters when @var{filename} is executed. Otherwise the positional +parameters are unchanged. +The return status is the exit status of the last command executed, or +zero if no commands are executed. If @var{filename} is not found, or +cannot be read, the return status is non-zero. +This builtin is equivalent to @code{source}. + +@item break +@btindex break +@example +break [@var{n}] +@end example +Exit from a @code{for}, @code{while}, @code{until}, or @code{select} loop. +If @var{n} is supplied, the @var{n}th enclosing loop is exited. +@var{n} must be greater than or equal to 1. +The return status is zero unless @var{n} is not greater than or equal to 1. + +@item cd +@btindex cd +@example +cd [-L|-P] [@var{directory}] +@end example +Change the current working directory to @var{directory}. If @var{directory} +is not given, the value of the @env{HOME} shell variable is used. If the +shell variable @env{CDPATH} exists, it is used as a search path. If +@var{directory} begins with a slash, @env{CDPATH} is not used. +The @option{-P} option means +to not follow symbolic links; symbolic links are followed by default +or with the @option{-L} option. +If @var{directory} is @samp{-}, it is equivalent to @env{$OLDPWD}. +The return status is zero if the directory is successfully changed, +non-zero otherwise. + +@item continue +@btindex continue +@example +continue [@var{n}] +@end example +Resume the next iteration of an enclosing @code{for}, @code{while}, +@code{until}, or @code{select} loop. +If @var{n} is supplied, the execution of the @var{n}th enclosing loop +is resumed. +@var{n} must be greater than or equal to 1. +The return status is zero unless @var{n} is not greater than or equal to 1. + +@item eval +@btindex eval +@example +eval [@var{arguments}] +@end example +The arguments are concatenated together into a single command, which is +then read and executed, and its exit status returned as the exit status +of @code{eval}. +If there are no arguments or only empty arguments, the return status is +zero. + +@item exec +@btindex exec +@example +exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]] +@end example +If @var{command} +is supplied, it replaces the shell without creating a new process. +If the @option{-l} option is supplied, the shell places a dash at the +beginning of the zeroth arg passed to @var{command}. +This is what the @code{login} program does. +The @option{-c} option causes @var{command} to be executed with an empty +environment. +If @option{-a} is supplied, the shell passes @var{name} as the zeroth +argument to @var{command}. +If no @var{command} is specified, redirections may be used to affect +the current shell environment. If there are no redirection errors, the +return status is zero; otherwise the return status is non-zero. + +@item exit +@btindex exit +@example +exit [@var{n}] +@end example +Exit the shell, returning a status of @var{n} to the shell's parent. +If @var{n} is omitted, the exit status is that of the last command executed. +Any trap on @code{EXIT} is executed before the shell terminates. + +@item export +@btindex export +@example +export [-fn] [-p] [@var{name}[=@var{value}]] +@end example +Mark each @var{name} to be passed to child processes +in the environment. If the @option{-f} option is supplied, the @var{name}s +refer to shell functions; otherwise the names refer to shell variables. +The @option{-n} option means to no longer mark each @var{name} for export. +If no @var{names} are supplied, or if the @option{-p} option is given, a +list of exported names is displayed. +The @option{-p} option displays output in a form that may be reused as input. +If a variable name is followed by =@var{value}, the value of +the variable is set to @var{value}. + +The return status is zero unless an invalid option is supplied, one of +the names is not a valid shell variable name, or @option{-f} is supplied +with a name that is not a shell function. + +@item getopts +@btindex getopts +@example +getopts @var{optstring} @var{name} [@var{args}] +@end example +@code{getopts} is used by shell scripts to parse positional parameters. +@var{optstring} contains the option characters to be recognized; if a +character is followed by a colon, the option is expected to have an +argument, which should be separated from it by white space. +The colon (@samp{:}) and question mark (@samp{?}) may not be +used as option characters. +Each time it is invoked, @code{getopts} +places the next option in the shell variable @var{name}, initializing +@var{name} if it does not exist, +and the index of the next argument to be processed into the +variable @env{OPTIND}. +@env{OPTIND} is initialized to 1 each time the shell or a shell script +is invoked. +When an option requires an argument, +@code{getopts} places that argument into the variable @env{OPTARG}. +The shell does not reset @env{OPTIND} automatically; it must be manually +reset between multiple calls to @code{getopts} within the same shell +invocation if a new set of parameters is to be used. + +When the end of options is encountered, @code{getopts} exits with a +return value greater than zero. +@env{OPTIND} is set to the index of the first non-option argument, +and @code{name} is set to @samp{?}. + +@code{getopts} +normally parses the positional parameters, but if more arguments are +given in @var{args}, @code{getopts} parses those instead. + +@code{getopts} can report errors in two ways. If the first character of +@var{optstring} is a colon, @var{silent} +error reporting is used. In normal operation diagnostic messages +are printed when invalid options or missing option arguments are +encountered. +If the variable @env{OPTERR} +is set to 0, no error messages will be displayed, even if the first +character of @code{optstring} is not a colon. + +If an invalid option is seen, +@code{getopts} places @samp{?} into @var{name} and, if not silent, +prints an error message and unsets @env{OPTARG}. +If @code{getopts} is silent, the option character found is placed in +@env{OPTARG} and no diagnostic message is printed. + +If a required argument is not found, and @code{getopts} +is not silent, a question mark (@samp{?}) is placed in @var{name}, +@code{OPTARG} is unset, and a diagnostic message is printed. +If @code{getopts} is silent, then a colon (@samp{:}) is placed in +@var{name} and @env{OPTARG} is set to the option character found. + +@item hash +@btindex hash +@example +hash [-'r] [-p @var{filename}] [-dt] [@var{name}] +@end example +Remember the full pathnames of commands specified as @var{name} arguments, +so they need not be searched for on subsequent invocations. +The commands are found by searching through the directories listed in +@env{$PATH}. +The @option{-p} option inhibits the path search, and @var{filename} is +used as the location of @var{name}. +The @option{-r} option causes the shell to forget all remembered locations. +The @option{-d} option causes the shell to forget the remembered location +of each @var{name}. +If the @option{-t} option is supplied, the full pathname to which each +@var{name} corresponds is printed. If multiple @var{name} arguments are +supplied with @option{-t} the @var{name} is printed before the hashed +full pathname. +The @option{-l} option causes output to be displayed in a format +that may be reused as input. +If no arguments are given, or if only @option{-l} is supplied, +information about remembered commands is printed. +The return status is zero unless a @var{name} is not found or an invalid +option is supplied. + +@item pwd +@btindex pwd +@example +pwd [-LP] +@end example +Print the absolute pathname of the current working directory. +If the @option{-P} option is supplied, the pathname printed will not +contain symbolic links. +If the @option{-L} option is supplied, the pathname printed may contain +symbolic links. +The return status is zero unless an error is encountered while +determining the name of the current directory or an invalid option +is supplied. + +@item readonly +@btindex readonly +@example +readonly [-apf] [@var{name}[=@var{value}]] @dots{} +@end example +Mark each @var{name} as readonly. +The values of these names may not be changed by subsequent assignment. +If the @option{-f} option is supplied, each @var{name} refers to a shell +function. +The @option{-a} option means each @var{name} refers to an array variable. +If no @var{name} arguments are given, or if the @option{-p} +option is supplied, a list of all readonly names is printed. +The @option{-p} option causes output to be displayed in a format that +may be reused as input. +If a variable name is followed by =@var{value}, the value of +the variable is set to @var{value}. +The return status is zero unless an invalid option is supplied, one of +the @var{name} arguments is not a valid shell variable or function name, +or the @option{-f} option is supplied with a name that is not a shell function. + +@item return +@btindex return +@example +return [@var{n}] +@end example +Cause a shell function to exit with the return value @var{n}. +If @var{n} is not supplied, the return value is the exit status of the +last command executed in the function. +This may also be used to terminate execution of a script being executed +with the @code{.} (or @code{source}) builtin, returning either @var{n} or +the exit status of the last command executed within the script as the exit +status of the script. +Any command associated with the @code{RETURN} trap is executed +before execution resumes after the function or script. +The return status is non-zero if @code{return} is used outside a function +and not during the execution of a script by @code{.} or @code{source}. + +@item shift +@btindex shift +@example +shift [@var{n}] +@end example +Shift the positional parameters to the left by @var{n}. +The positional parameters from @var{n}+1 @dots{} @code{$#} are +renamed to @code{$1} @dots{} @code{$#}-@var{n}+1. +Parameters represented by the numbers @code{$#} to @var{n}+1 are unset. +@var{n} must be a non-negative number less than or equal to @code{$#}. +If @var{n} is zero or greater than @code{$#}, the positional parameters +are not changed. +If @var{n} is not supplied, it is assumed to be 1. +The return status is zero unless @var{n} is greater than @code{$#} or +less than zero, non-zero otherwise. + +@item test +@itemx [ +@btindex test +@btindex [ +Evaluate a conditional expression @var{expr}. +Each operator and operand must be a separate argument. +Expressions are composed of the primaries described below in +@ref{Bash Conditional Expressions}. + +When the @code{[} form is used, the last argument to the command must +be a @code{]}. + +Expressions may be combined using the following operators, listed in +decreasing order of precedence. + +@table @code +@item ! @var{expr} +True if @var{expr} is false. + +@item ( @var{expr} ) +Returns the value of @var{expr}. +This may be used to override the normal precedence of operators. + +@item @var{expr1} -a @var{expr2} +True if both @var{expr1} and @var{expr2} are true. + +@item @var{expr1} -o @var{expr2} +True if either @var{expr1} or @var{expr2} is true. +@end table + +The @code{test} and @code{[} builtins evaluate conditional +expressions using a set of rules based on the number of arguments. + +@table @asis +@item 0 arguments +The expression is false. + +@item 1 argument +The expression is true if and only if the argument is not null. + +@item 2 arguments +If the first argument is @samp{!}, the expression is true if and +only if the second argument is null. +If the first argument is one of the unary conditional operators +(@pxref{Bash Conditional Expressions}), the expression +is true if the unary test is true. +If the first argument is not a valid unary operator, the expression is +false. + +@item 3 arguments +If the second argument is one of the binary conditional +operators (@pxref{Bash Conditional Expressions}), the +result of the expression is the result of the binary test using the +first and third arguments as operands. +If the first argument is @samp{!}, the value is the negation of +the two-argument test using the second and third arguments. +If the first argument is exactly @samp{(} and the third argument is +exactly @samp{)}, the result is the one-argument test of the second +argument. +Otherwise, the expression is false. +The @samp{-a} and @samp{-o} operators are considered binary operators +in this case. + +@item 4 arguments +If the first argument is @samp{!}, the result is the negation of +the three-argument expression composed of the remaining arguments. +Otherwise, the expression is parsed and evaluated according to +precedence using the rules listed above. + +@item 5 or more arguments +The expression is parsed and evaluated according to precedence +using the rules listed above. +@end table + +@item times +@btindex times +@example +times +@end example +Print out the user and system times used by the shell and its children. +The return status is zero. + +@item trap +@btindex trap +@example +trap [-lp] [@var{arg}] [@var{sigspec} @dots{}] +@end example +The commands in @var{arg} are to be read and executed when the +shell receives signal @var{sigspec}. If @var{arg} is absent or +equal to @samp{-}, all specified signals are reset to the values +they had when the shell was started. +If @var{arg} is the null string, then the signal specified by +each @var{sigspec} is ignored by the shell and commands it invokes. +If @var{arg} is not present and @option{-p} has been supplied, +the shell displays the trap commands associated with each @var{sigspec}. +If no arguments are supplied, or +only @option{-p} is given, @code{trap} prints the list of commands +associated with each signal number in a form that may be reused as +shell input. +The @option{-l} option causes the shell to print a list of signal names +and their corresponding numbers. + +Each @var{sigspec} is either a signal name such as @code{SIGINT} (with +or without the @code{SIG} prefix) or a signal number. +If a @var{sigspec} +is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits. +If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed +before every simple command, @code{for} command, @code{case} command, +@code{select} command, every arithmetic @code{for} command, and before +the first command executes in a shell function. +Refer to the description of the @code{extglob} option to the +@code{shopt} builtin (@pxref{Bash Builtins}) for details of its +effect on the @code{DEBUG} trap. +If a @var{sigspec} is @code{ERR}, the command @var{arg} +is executed whenever a simple command has a non-zero exit status. +The @code{ERR} trap is not executed if the failed command is part of the +command list immediately following an @code{until} or @code{while} keyword, +part of the test in an @code{if} statement, +part of a @code{&&} or @code{||} list, or if the command's return +status is being inverted using @code{!}. +If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed +each time a shell function or a script executed with the @code{.} or +@code{source} builtins finishes executing. + +Signals ignored upon entry to the shell cannot be trapped or reset. +Trapped signals are reset to their original values in a child +process when it is created. + +The return status is zero unless a @var{sigspec} does not specify a +valid signal. + +@item umask +@btindex umask +@example +umask [-p] [-S] [@var{mode}] +@end example +Set the shell process's file creation mask to @var{mode}. If +@var{mode} begins with a digit, it is interpreted as an octal number; +if not, it is interpreted as a symbolic mode mask similar +to that accepted by the @code{chmod} command. If @var{mode} is +omitted, the current value of the mask is printed. If the @option{-S} +option is supplied without a @var{mode} argument, the mask is printed +in a symbolic format. +If the @option{-p} option is supplied, and @var{mode} +is omitted, the output is in a form that may be reused as input. +The return status is zero if the mode is successfully changed or if +no @var{mode} argument is supplied, and non-zero otherwise. + +Note that when the mode is interpreted as an octal number, each number +of the umask is subtracted from @code{7}. Thus, a umask of @code{022} +results in permissions of @code{755}. + +@item unset +@btindex unset +@example +unset [-fv] [@var{name}] +@end example +Each variable or function @var{name} is removed. +If no options are supplied, or the @option{-v} option is given, each +@var{name} refers to a shell variable. +If the @option{-f} option is given, the @var{name}s refer to shell +functions, and the function definition is removed. +Readonly variables and functions may not be unset. +The return status is zero unless a @var{name} is readonly. +@end table + +@node Bash Builtins +@section Bash Builtin Commands + +This section describes builtin commands which are unique to +or have been extended in Bash. +Some of these commands are specified in the @sc{posix} 1003.2 standard. + +@table @code + +@item alias +@btindex alias +@example +alias [@code{-p}] [@var{name}[=@var{value}] @dots{}] +@end example + +Without arguments or with the @option{-p} option, @code{alias} prints +the list of aliases on the standard output in a form that allows +them to be reused as input. +If arguments are supplied, an alias is defined for each @var{name} +whose @var{value} is given. If no @var{value} is given, the name +and value of the alias is printed. +Aliases are described in @ref{Aliases}. + +@item bind +@btindex bind +@example +bind [-m @var{keymap}] [-lpsvPSV] +bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}] +bind [-m @var{keymap}] -f @var{filename} +bind [-m @var{keymap}] -x @var{keyseq:shell-command} +bind [-m @var{keymap}] @var{keyseq:function-name} +bind @var{readline-command} +@end example + +Display current Readline (@pxref{Command Line Editing}) +key and function bindings, +bind a key sequence to a Readline function or macro, +or set a Readline variable. +Each non-option argument is a command as it would appear in a +a Readline initialization file (@pxref{Readline Init File}), +but each binding or command must be passed as a separate argument; e.g., +@samp{"\C-x\C-r":re-read-init-file}. +Options, if supplied, have the following meanings: + +@table @code +@item -m @var{keymap} +Use @var{keymap} as the keymap to be affected by +the subsequent bindings. Acceptable @var{keymap} +names are +@code{emacs}, +@code{emacs-standard}, +@code{emacs-meta}, +@code{emacs-ctlx}, +@code{vi}, +@code{vi-move}, +@code{vi-command}, and +@code{vi-insert}. +@code{vi} is equivalent to @code{vi-command}; +@code{emacs} is equivalent to @code{emacs-standard}. + +@item -l +List the names of all Readline functions. + +@item -p +Display Readline function names and bindings in such a way that they +can be used as input or in a Readline initialization file. + +@item -P +List current Readline function names and bindings. + +@item -v +Display Readline variable names and values in such a way that they +can be used as input or in a Readline initialization file. + +@item -V +List current Readline variable names and values. + +@item -s +Display Readline key sequences bound to macros and the strings they output +in such a way that they can be used as input or in a Readline +initialization file. + +@item -S +Display Readline key sequences bound to macros and the strings they output. + +@item -f @var{filename} +Read key bindings from @var{filename}. + +@item -q @var{function} +Query about which keys invoke the named @var{function}. + +@item -u @var{function} +Unbind all keys bound to the named @var{function}. + +@item -r @var{keyseq} +Remove any current binding for @var{keyseq}. + +@item -x @var{keyseq:shell-command} +Cause @var{shell-command} to be executed whenever @var{keyseq} is +entered. + +@end table + +@noindent +The return status is zero unless an invalid option is supplied or an +error occurs. + +@item builtin +@btindex builtin +@example +builtin [@var{shell-builtin} [@var{args}]] +@end example +Run a shell builtin, passing it @var{args}, and return its exit status. +This is useful when defining a shell function with the same +name as a shell builtin, retaining the functionality of the builtin within +the function. +The return status is non-zero if @var{shell-builtin} is not a shell +builtin command. + +@item caller +@btindex caller +@example +caller [@var{expr}] +@end example +Returns the context of any active subroutine call (a shell function or +a script executed with the @code{.} or @code{source} builtins. + +Without @var{expr}, @code{caller} displays the line number and source +filename of the current subroutine call. +If a non-negative integer is supplied as @var{expr}, @code{caller} +displays the line number, subroutine name, and source file corresponding +to that position in the current execution call stack. This extra +information may be used, for example, to print a stack trace. The +current frame is frame 0. + +The return value is 0 unless the shell is not executing a subroutine +call or @var{expr} does not correspond to a valid position in the +call stack. + +@item command +@btindex command +@example +command [-pVv] @var{command} [@var{arguments} @dots{}] +@end example +Runs @var{command} with @var{arguments} ignoring any shell function +named @var{command}. +Only shell builtin commands or commands found by searching the +@env{PATH} are executed. +If there is a shell function named @code{ls}, running @samp{command ls} +within the function will execute the external command @code{ls} +instead of calling the function recursively. +The @option{-p} option means to use a default value for @env{PATH} +that is guaranteed to find all of the standard utilities. +The return status in this case is 127 if @var{command} cannot be +found or an error occurred, and the exit status of @var{command} +otherwise. + +If either the @option{-V} or @option{-v} option is supplied, a +description of @var{command} is printed. The @option{-v} option +causes a single word indicating the command or file name used to +invoke @var{command} to be displayed; the @option{-V} option produces +a more verbose description. In this case, the return status is +zero if @var{command} is found, and non-zero if not. + +@item declare +@btindex declare +@example +declare [-afFirtx] [-p] [@var{name}[=@var{value}] @dots{}] +@end example + +Declare variables and give them attributes. If no @var{name}s +are given, then display the values of variables instead. + +The @option{-p} option will display the attributes and values of each +@var{name}. +When @option{-p} is used, additional options are ignored. +The @option{-F} option inhibits the display of function definitions; +only the function name and attributes are printed. +If the @code{extdebug} shell option is enabled using @code{shopt} +(@pxref{Bash Builtins}), the source file name and line number where +the function is defined are displayed as well. +@option{-F} implies @option{-f}. +The following options can be used to restrict output to variables with +the specified attributes or to give variables attributes: + +@table @code +@item -a +Each @var{name} is an array variable (@pxref{Arrays}). + +@item -f +Use function names only. + +@item -i +The variable is to be treated as +an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is +performed when the variable is assigned a value. + +@item -r +Make @var{name}s readonly. These names cannot then be assigned values +by subsequent assignment statements or unset. + +@item -t +Give each @var{name} the @code{trace} attribute. +Traced functions inherit the @code{DEBUG} trap from the calling shell. +The trace attribute has no special meaning for variables. + +@item -x +Mark each @var{name} for export to subsequent commands via +the environment. +@end table + +Using @samp{+} instead of @samp{-} turns off the attribute instead. +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}. + +The return status is zero unless an invalid option is encountered, +an attempt is made to define a function using @samp{-f foo=bar}, +an attempt is made to assign a value to a readonly variable, +an attempt is made to assign a value to an array variable without +using the compound assignment syntax (@pxref{Arrays}), +one of the @var{names} is not a valid shell variable name, +an attempt is made to turn off readonly status for a readonly variable, +an attempt is made to turn off array status for an array variable, +or an attempt is made to display a non-existent function with @option{-f}. + +@item echo +@btindex echo +@example +echo [-neE] [@var{arg} @dots{}] +@end example +Output the @var{arg}s, separated by spaces, terminated with a +newline. +The return status is always 0. +If @option{-n} is specified, the trailing newline is suppressed. +If the @option{-e} option is given, interpretation of the following +backslash-escaped characters is enabled. +The @option{-E} option disables the interpretation of these escape characters, +even on systems where they are interpreted by default. +The @code{xpg_echo} shell option may be used to +dynamically determine whether or not @code{echo} expands these +escape characters by default. +@code{echo} interprets the following escape sequences: +@table @code +@item \a +alert (bell) +@item \b +backspace +@item \c +suppress trailing newline +@item \e +escape +@item \f +form feed +@item \n +new line +@item \r +carriage return +@item \t +horizontal tab +@item \v +vertical tab +@item \\ +backslash +@item \0@var{nnn} +the eight-bit character whose value is the octal value @var{nnn} +(zero to three octal digits) +@item \@var{nnn} +the eight-bit character whose value is the octal value @var{nnn} +(one to three octal digits) +@item \x@var{HH} +the eight-bit character whose value is the hexadecimal value @var{HH} +(one or two hex digits) +@end table + +@item enable +@btindex enable +@example +enable [-n] [-p] [-f @var{filename}] [-ads] [@var{name} @dots{}] +@end example +Enable and disable builtin shell commands. +Disabling a builtin allows a disk command which has the same name +as a shell builtin to be executed without specifying a full pathname, +even though the shell normally searches for builtins before disk commands. +If @option{-n} is used, the @var{name}s become disabled. Otherwise +@var{name}s are enabled. For example, to use the @code{test} binary +found via @env{$PATH} instead of the shell builtin version, type +@samp{enable -n test}. + +If the @option{-p} option is supplied, or no @var{name} arguments appear, +a list of shell builtins is printed. With no other arguments, the list +consists of all enabled shell builtins. +The @option{-a} option means to list +each builtin with an indication of whether or not it is enabled. + +The @option{-f} option means to load the new builtin command @var{name} +from shared object @var{filename}, on systems that support dynamic loading. +The @option{-d} option will delete a builtin loaded with @option{-f}. + +If there are no options, a list of the shell builtins is displayed. +The @option{-s} option restricts @code{enable} to the @sc{posix} special +builtins. If @option{-s} is used with @option{-f}, the new builtin becomes +a special builtin (@pxref{Special Builtins}). + +The return status is zero unless a @var{name} is not a shell builtin +or there is an error loading a new builtin from a shared object. + +@item help +@btindex help +@example +help [-s] [@var{pattern}] +@end example +Display helpful information about builtin commands. +If @var{pattern} is specified, @code{help} gives detailed help +on all commands matching @var{pattern}, otherwise a list of +the builtins is printed. +The @option{-s} option restricts the information displayed to a short +usage synopsis. +The return status is zero unless no command matches @var{pattern}. + +@item let +@btindex let +@example +let @var{expression} [@var{expression}] +@end example +The @code{let} builtin allows arithmetic to be performed on shell +variables. Each @var{expression} is evaluated according to the +rules given below in @ref{Shell Arithmetic}. If the +last @var{expression} evaluates to 0, @code{let} returns 1; +otherwise 0 is returned. + +@item local +@btindex local +@example +local [@var{option}] @var{name}[=@var{value}] @dots{} +@end example +For each argument, a local variable named @var{name} is created, +and assigned @var{value}. +The @var{option} can be any of the options accepted by @code{declare}. +@code{local} can only be used within a function; it makes the variable +@var{name} have a visible scope restricted to that function and its +children. The return status is zero unless @code{local} is used outside +a function, an invalid @var{name} is supplied, or @var{name} is a +readonly variable. + +@item logout +@btindex logout +@example +logout [@var{n}] +@end example +Exit a login shell, returning a status of @var{n} to the shell's +parent. + +@item printf +@btindex printf +@example +@code{printf} @var{format} [@var{arguments}] +@end example +Write the formatted @var{arguments} to the standard output under the +control of the @var{format}. +The @var{format} is a character string which contains three types of objects: +plain characters, which are simply copied to standard output, character +escape sequences, which are converted and copied to the standard output, and +format specifications, each of which causes printing of the next successive +@var{argument}. +In addition to the standard @code{printf(1)} formats, @samp{%b} causes +@code{printf} to expand backslash escape sequences in the corresponding +@var{argument}, and @samp{%q} causes @code{printf} to output the +corresponding @var{argument} in a format that can be reused as shell input. + +The @var{format} is reused as necessary to consume all of the @var{arguments}. +If the @var{format} requires more @var{arguments} than are supplied, the +extra format specifications behave as if a zero value or null string, as +appropriate, had been supplied. The return value is zero on success, +non-zero on failure. + +@item read +@btindex read +@example +read [-ers] [-a @var{aname}] [-d @var{delim}] [-n @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}] +@end example +One line is read from the standard input, or from the file descriptor +@var{fd} supplied as an argument to the @option{-u} option, and the first word +is assigned to the first @var{name}, the second word to the second @var{name}, +and so on, with leftover words and their intervening separators assigned +to the last @var{name}. +If there are fewer words read from the input stream than names, +the remaining names are assigned empty values. +The characters in the value of the @env{IFS} variable +are used to split the line into words. +The backslash character @samp{\} may be used to remove any special +meaning for the next character read and for line continuation. +If no names are supplied, the line read is assigned to the +variable @env{REPLY}. +The return code is zero, unless end-of-file is encountered, @code{read} +times out, or an invalid file descriptor is supplied as the argument to +@option{-u}. +Options, if supplied, have the following meanings: + +@table @code +@item -a @var{aname} +The words are assigned to sequential indices of the array variable +@var{aname}, starting at 0. +All elements are removed from @var{aname} before the assignment. +Other @var{name} arguments are ignored. + +@item -d @var{delim} +The first character of @var{delim} is used to terminate the input line, +rather than newline. + +@item -e +Readline (@pxref{Command Line Editing}) is used to obtain the line. + +@item -n @var{nchars} +@code{read} returns after reading @var{nchars} characters rather than +waiting for a complete line of input. + +@item -p @var{prompt} +Display @var{prompt}, without a trailing newline, before attempting +to read any input. +The prompt is displayed only if input is coming from a terminal. + +@item -r +If this option is given, backslash does not act as an escape character. +The backslash is considered to be part of the line. +In particular, a backslash-newline pair may not be used as a line +continuation. + +@item -s +Silent mode. If input is coming from a terminal, characters are +not echoed. + +@item -t @var{timeout} +Cause @code{read} to time out and return failure if a complete line of +input is not read within @var{timeout} seconds. +This option has no effect if @code{read} is not reading input from the +terminal or a pipe. + +@item -u @var{fd} +Read input from file descriptor @var{fd}. + +@end table + +@item shopt +@btindex shopt +@example +shopt [-pqsu] [-o] [@var{optname} @dots{}] +@end example +Toggle the values of variables controlling optional shell behavior. +With no options, or with the @option{-p} option, a list of all settable +options is displayed, with an indication of whether or not each is set. +The @option{-p} option causes output to be displayed in a form that +may be reused as input. +Other options have the following meanings: + +@table @code +@item -s +Enable (set) each @var{optname}. + +@item -u +Disable (unset) each @var{optname}. + +@item -q +Suppresses normal output; the return status +indicates whether the @var{optname} is set or unset. +If multiple @var{optname} arguments are given with @option{-q}, +the return status is zero if all @var{optnames} are enabled; +non-zero otherwise. + +@item -o +Restricts the values of +@var{optname} to be those defined for the @option{-o} option to the +@code{set} builtin (@pxref{The Set Builtin}). +@end table + +If either @option{-s} or @option{-u} +is used with no @var{optname} arguments, the display is limited to +those options which are set or unset, respectively. + +Unless otherwise noted, the @code{shopt} options are disabled (off) +by default. + +The return status when listing options is zero if all @var{optnames} +are enabled, non-zero otherwise. When setting or unsetting options, +the return status is zero unless an @var{optname} is not a valid shell +option. + +The list of @code{shopt} options is: +@table @code +@item cdable_vars +If this is set, an argument to the @code{cd} +builtin command that +is not a directory is assumed to be the name of a variable whose +value is the directory to change to. + +@item cdspell +If set, minor errors in the spelling of a directory component in a +@code{cd} command will be corrected. +The errors checked for are transposed characters, +a missing character, and a character too many. +If a correction is found, the corrected path is printed, +and the command proceeds. +This option is only used by interactive shells. + +@item checkhash +If this is set, Bash checks that a command found in the hash +table exists before trying to execute it. If a hashed command no +longer exists, a normal path search is performed. + +@item checkwinsize +If set, Bash checks the window size after each command +and, if necessary, updates the values of +@env{LINES} and @env{COLUMNS}. + +@item cmdhist +If set, Bash +attempts to save all lines of a multiple-line +command in the same history entry. This allows +easy re-editing of multi-line commands. + +@item dotglob +If set, Bash includes filenames beginning with a `.' in +the results of filename expansion. + +@item execfail +If this is set, a non-interactive shell will not exit if +it cannot execute the file specified as an argument to the @code{exec} +builtin command. An interactive shell does not exit if @code{exec} +fails. + +@item expand_aliases +If set, aliases are expanded as described below under Aliases, +@ref{Aliases}. +This option is enabled by default for interactive shells. + +@item extdebug +If set, behavior intended for use by debuggers is enabled: + +@enumerate +@item +The @option{-F} option to the @code{declare} builtin (@pxref{Bash Builtins}) +displays the source file name and line number corresponding to each function +name supplied as an argument. + +@item +If the command run by the @code{DEBUG} trap returns a non-zero value, the +next command is skipped and not executed. + +@item +If the command run by the @code{DEBUG} trap returns a value of 2, and the +shell is executing in a subroutine (a shell function or a shell script +executed by the @code{.} or @code{source} builtins), a call to +@code{return} is simulated. +@end enumerate + +@item extglob +If set, the extended pattern matching features described above +(@pxref{Pattern Matching}) are enabled. + +@item extquote +If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is +performed within @code{$@{@var{parameter}@}} expansions +enclosed in double quotes. This option is enabled by default. + +@item histappend +If set, the history list is appended to the file named by the value +of the @env{HISTFILE} +variable when the shell exits, rather than overwriting the file. + +@item histreedit +If set, and Readline +is being used, a user is given the opportunity to re-edit a +failed history substitution. + +@item histverify +If set, and Readline +is being used, the results of history substitution are not immediately +passed to the shell parser. Instead, the resulting line is loaded into +the Readline editing buffer, allowing further modification. + +@item hostcomplete +If set, and Readline is being used, Bash will attempt to perform +hostname completion when a word containing a @samp{@@} is being +completed (@pxref{Commands For Completion}). This option is enabled +by default. + +@item huponexit +If set, Bash will send @code{SIGHUP} to all jobs when an interactive +login shell exits (@pxref{Signals}). + +@item interactive_comments +Allow a word beginning with @samp{#} +to cause that word and all remaining characters on that +line to be ignored in an interactive shell. +This option is enabled by default. + +@item lithist +If enabled, and the @code{cmdhist} +option is enabled, multi-line commands are saved to the history with +embedded newlines rather than using semicolon separators where possible. + +@item login_shell +The shell sets this option if it is started as a login shell +(@pxref{Invoking Bash}). +The value may not be changed. + +@item mailwarn +If set, and a file that Bash is checking for mail has been +accessed since the last time it was checked, the message +@code{"The mail in @var{mailfile} has been read"} is displayed. + +@item no_empty_cmd_completion +If set, and Readline is being used, Bash will not attempt to search +the @env{PATH} for possible completions when completion is attempted +on an empty line. + +@item nocaseglob +If set, Bash matches filenames in a case-insensitive fashion when +performing filename expansion. + +@item nullglob +If set, Bash allows filename patterns which match no +files to expand to a null string, rather than themselves. + +@item progcomp +If set, the programmable completion facilities +(@pxref{Programmable Completion}) are enabled. +This option is enabled by default. + +@item promptvars +If set, prompt strings undergo variable and parameter expansion after +being expanded (@pxref{Printing a Prompt}). +This option is enabled by default. + +@item restricted_shell +The shell sets this option if it is started in restricted mode +(@pxref{The Restricted Shell}). +The value may not be changed. +This is not reset when the startup files are executed, allowing +the startup files to discover whether or not a shell is restricted. + +@item shift_verbose +If this is set, the @code{shift} +builtin prints an error message when the shift count exceeds the +number of positional parameters. + +@item sourcepath +If set, the @code{source} builtin uses the value of @env{PATH} +to find the directory containing the file supplied as an argument. +This option is enabled by default. + +@item xpg_echo +If set, the @code{echo} builtin expands backslash-escape sequences +by default. + +@end table + +@noindent +The return status when listing options is zero if all @var{optnames} +are enabled, non-zero otherwise. +When setting or unsetting options, the return status is zero unless an +@var{optname} is not a valid shell option. + +@item source +@btindex source +@example +source @var{filename} +@end example +A synonym for @code{.} (@pxref{Bourne Shell Builtins}). + +@item type +@btindex type +@example +type [-afptP] [@var{name} @dots{}] +@end example +For each @var{name}, indicate how it would be interpreted if used as a +command name. + +If the @option{-t} option is used, @code{type} prints a single word +which is one of @samp{alias}, @samp{function}, @samp{builtin}, +@samp{file} or @samp{keyword}, +if @var{name} is an alias, shell function, shell builtin, +disk file, or shell reserved word, respectively. +If the @var{name} is not found, then nothing is printed, and +@code{type} returns a failure status. + +If the @option{-p} option is used, @code{type} either returns the name +of the disk file that would be executed, or nothing if @option{-t} +would not return @samp{file}. + +The @option{-P} option forces a path search for each @var{name}, even if +@option{-t} would not return @samp{file}. + +If a command is hashed, @option{-p} and @option{-P} print the hashed value, +not necessarily the file that appears first in @code{$PATH}. + +If the @option{-a} option is used, @code{type} returns all of the places +that contain an executable named @var{file}. +This includes aliases and functions, if and only if the @option{-p} option +is not also used. + +If the @option{-f} option is used, @code{type} does not attempt to find +shell functions, as with the @code{command} builtin. + +The return status is zero if any of the @var{names} are found, non-zero +if none are found. + +@item typeset +@btindex typeset +@example +typeset [-afFrxi] [-p] [@var{name}[=@var{value}] @dots{}] +@end example +The @code{typeset} command is supplied for compatibility with the Korn +shell; however, it has been deprecated in favor of the @code{declare} +builtin command. + +@item ulimit +@btindex ulimit +@example +ulimit [-acdflmnpstuvSH] [@var{limit}] +@end example +@code{ulimit} provides control over the resources available to processes +started by the shell, on systems that allow such control. If an +option is given, it is interpreted as follows: +@table @code +@item -S +Change and report the soft limit associated with a resource. + +@item -H +Change and report the hard limit associated with a resource. + +@item -a +All current limits are reported. + +@item -c +The maximum size of core files created. + +@item -d +The maximum size of a process's data segment. + +@item -f +The maximum size of files created by the shell. + +@item -l +The maximum size that may be locked into memory. + +@item -m +The maximum resident set size. + +@item -n +The maximum number of open file descriptors. + +@item -p +The pipe buffer size. + +@item -s +The maximum stack size. + +@item -t +The maximum amount of cpu time in seconds. + +@item -u +The maximum number of processes available to a single user. + +@item -v +The maximum amount of virtual memory available to the process. + +@end table + +If @var{limit} is given, it is the new value of the specified resource; +the special @var{limit} values @code{hard}, @code{soft}, and +@code{unlimited} stand for the current hard limit, the current soft limit, +and no limit, respectively. +Otherwise, the current value of the soft limit for the specified resource +is printed, unless the @option{-H} option is supplied. +When setting new limits, if neither @option{-H} nor @option{-S} is supplied, +both the hard and soft limits are set. +If no option is given, then @option{-f} is assumed. Values are in 1024-byte +increments, except for @option{-t}, which is in seconds, @option{-p}, +which is in units of 512-byte blocks, and @option{-n} and @option{-u}, which +are unscaled values. + +The return status is zero unless an invalid option or argument is supplied, +or an error occurs while setting a new limit. + +@item unalias +@btindex unalias +@example +unalias [-a] [@var{name} @dots{} ] +@end example + +Remove each @var{name} from the list of aliases. If @option{-a} is +supplied, all aliases are removed. +Aliases are described in @ref{Aliases}. + +@end table + +@node The Set Builtin +@section The Set Builtin + +This builtin is so complicated that it deserves its own section. + +@table @code +@item set +@btindex set +@example +set [--abefhkmnptuvxBCHP] [-o @var{option}] [@var{argument} @dots{}] +@end example + +If no options or arguments are supplied, @code{set} displays the names +and values of all shell variables and functions, sorted according to the +current locale, in a format that may be reused as input. + +When options are supplied, they set or unset shell attributes. +Options, if specified, have the following meanings: + +@table @code +@item -a +Mark variables and function which are modified or created for export +to the environment of subsequent commands. + +@item -b +Cause the status of terminated background jobs to be reported +immediately, rather than before printing the next primary prompt. + +@item -e +Exit immediately if a 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{!}. +A trap on @code{ERR}, if set, is executed before the shell exits. + +@item -f +Disable file name generation (globbing). + +@item -h +Locate and remember (hash) commands as they are looked up for execution. +This option is enabled by default. + +@item -k +All arguments in the form of assignment statements are placed +in the environment for a command, not just those that precede +the command name. + +@item -m +Job control is enabled (@pxref{Job Control}). + +@item -n +Read commands but do not execute them; this may be used to check a +script for syntax errors. +This option is ignored by interactive shells. + +@item -o @var{option-name} + +Set the option corresponding to @var{option-name}: + +@table @code +@item allexport +Same as @code{-a}. + +@item braceexpand +Same as @code{-B}. + +@item emacs +Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}). + +@item errexit +Same as @code{-e}. + +@item errtrace +Same as @code{-E}. + +@item functrace +Same as @code{-T}. + +@item hashall +Same as @code{-h}. + +@item histexpand +Same as @code{-H}. + +@item history +Enable command history, as described in @ref{Bash History Facilities}. +This option is on by default in interactive shells. + +@item ignoreeof +An interactive shell will not exit upon reading EOF. + +@item keyword +Same as @code{-k}. + +@item monitor +Same as @code{-m}. + +@item noclobber +Same as @code{-C}. + +@item noexec +Same as @code{-n}. + +@item noglob +Same as @code{-f}. + +@item nolog +Currently ignored. + +@item notify +Same as @code{-b}. + +@item nounset +Same as @code{-u}. + +@item onecmd +Same as @code{-t}. + +@item physical +Same as @code{-P}. + +@item posix +Change the behavior of Bash where the default operation differs +from the @sc{posix} 1003.2 standard to match the standard +(@pxref{Bash POSIX Mode}). +This is intended to make Bash behave as a strict superset of that +standard. + +@item privileged +Same as @code{-p}. + +@item verbose +Same as @code{-v}. + +@item vi +Use a @code{vi}-style line editing interface. + +@item xtrace +Same as @code{-x}. +@end table + +@item -p +Turn on privileged mode. +In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not +processed, shell functions are not inherited from the environment, +and the @env{SHELLOPTS} variable, if it appears in the environment, +is ignored. +If the shell is started with the effective user (group) id not equal to the +real user (group) id, and the @code{-p} option is not supplied, these actions +are taken and the effective user id is set to the real user id. +If the @code{-p} option is supplied at startup, the effective user id is +not reset. +Turning this option off causes the effective user +and group ids to be set to the real user and group ids. + +@item -t +Exit after reading and executing one command. + +@item -u +Treat unset variables as an error when performing parameter expansion. +An error message will be written to the standard error, and a non-interactive +shell will exit. + +@item -v +Print shell input lines as they are read. + +@item -x +Print a trace of simple commands, \fBfor\fP commands, \fBcase\fP +commands, \fBselect\fP commands, and arithmetic \fBfor\fP commands +and their arguments or associated word lists after they are +expanded and before they are executed. The value of the @env{PS4} +variable is expanded and the resultant value is printed before +the command and its expanded arguments. + +@item -B +The shell will perform brace expansion (@pxref{Brace Expansion}). +This option is on by default. + +@item -C +Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>} +from overwriting existing files. + +@item -E +If set, any trap on @code{ERR} is inherited by shell functions, command +substitutions, and commands executed in a subshell environment. +The @code{ERR} trap is normally not inherited in such cases. + +@item -H +Enable @samp{!} style history substitution (@pxref{History Interaction}). +This option is on by default for interactive shells. + +@item -P +If set, do not follow symbolic links when performing commands such as +@code{cd} which change the current directory. The physical directory +is used instead. By default, Bash follows +the logical chain of directories when performing commands +which change the current directory. + +For example, if @file{/usr/sys} is a symbolic link to @file{/usr/local/sys} +then: +@example +$ cd /usr/sys; echo $PWD +/usr/sys +$ cd ..; pwd +/usr +@end example + +@noindent +If @code{set -P} is on, then: +@example +$ cd /usr/sys; echo $PWD +/usr/local/sys +$ cd ..; pwd +/usr/local +@end example + +@item -T +If set, any trap on @code{DEBUG} is inherited by shell functions, command +substitutions, and commands executed in a subshell environment. +The @code{DEBUG} trap is normally not inherited in such cases. + +@item -- +If no arguments follow this option, then the positional parameters are +unset. Otherwise, the positional parameters are set to the +@var{arguments}, even if some of them begin with a @samp{-}. + +@item - +Signal the end of options, cause all remaining @var{arguments} +to be assigned to the positional parameters. The @option{-x} +and @option{-v} options are turned off. +If there are no arguments, the positional parameters remain unchanged. +@end table + +Using @samp{+} rather than @samp{-} causes these options to be +turned off. The options can also be used upon invocation of the +shell. The current set of options may be found in @code{$-}. + +The remaining N @var{arguments} are positional parameters and are +assigned, in order, to @code{$1}, @code{$2}, @dots{} @code{$N}. +The special parameter @code{#} is set to N. + +The return status is always zero unless an invalid option is supplied. +@end table + +@node Special Builtins +@section Special Builtins +@cindex special builtin + +For historical reasons, the @sc{posix} 1003.2 standard has classified +several builtin commands as @emph{special}. +When Bash is executing in @sc{posix} mode, the special builtins +differ from other builtin commands in three respects: + +@enumerate +@item +Special builtins are found before shell functions during command lookup. + +@item +If a special builtin returns an error status, a non-interactive shell exits. + +@item +Assignment statements preceding the command stay in effect in the shell +environment after the command completes. +@end enumerate + +When Bash is not executing in @sc{posix} mode, these builtins behave no +differently than the rest of the Bash builtin commands. +The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}. + +These are the @sc{posix} special builtins: +@example +@w{break : . continue eval exec exit export readonly return set} +@w{shift trap unset} +@end example + +@node Shell Variables +@chapter Shell Variables + +@menu +* Bourne Shell Variables:: Variables which Bash uses in the same way + as the Bourne Shell. +* Bash Variables:: List of variables that exist in Bash. +@end menu + +This chapter describes the shell variables that Bash uses. +Bash automatically assigns default values to a number of variables. + +@node Bourne Shell Variables +@section Bourne Shell Variables + +Bash uses certain shell variables in the same way as the Bourne shell. +In some cases, Bash assigns a default value to the variable. + +@vtable @code + +@item CDPATH +A colon-separated list of directories used as a search path for +the @code{cd} builtin command. + +@item HOME +The current user's home directory; the default for the @code{cd} builtin +command. +The value of this variable is also used by tilde expansion +(@pxref{Tilde Expansion}). + +@item IFS +A list of characters that separate fields; used when the shell splits +words as part of expansion. + +@item MAIL +If this parameter is set to a filename and the @env{MAILPATH} variable +is not set, Bash informs the user of the arrival of mail in +the specified file. + +@item MAILPATH +A colon-separated list of filenames which the shell periodically checks +for new mail. +Each list entry can specify the message that is printed when new mail +arrives in the mail file by separating the file name from the message with +a @samp{?}. +When used in the text of the message, @code{$_} expands to the name of +the current mail file. + +@item OPTARG +The value of the last option argument processed by the @code{getopts} builtin. + +@item OPTIND +The index of the last option argument processed by the @code{getopts} builtin. + +@item PATH +A colon-separated list of directories in which the shell looks for +commands. +A zero-length (null) directory name in the value of @code{PATH} indicates the +current directory. +A null directory name may appear as two adjacent colons, or as an initial +or trailing colon. + + +@item PS1 +The primary prompt string. The default value is @samp{\s-\v\$ }. +@xref{Printing a Prompt}, for the complete list of escape +sequences that are expanded before @env{PS1} is displayed. + +@item PS2 +The secondary prompt string. The default value is @samp{> }. + +@end vtable + +@node Bash Variables +@section Bash Variables + +These variables are set or used by Bash, but other shells +do not normally treat them specially. + +A few variables used by Bash are described in different chapters: +variables for controlling the job control facilities +(@pxref{Job Control Variables}). + +@vtable @code + +@item BASH +The full pathname used to execute the current instance of Bash. + +@item BASH_ARGC +An array variable whose values are the number of parameters in each +frame of the current bash execution call stack. The number of +parameters to the current subroutine (shell function or script executed +with @code{.} or @code{source}) is at the top of the stack. When a +subroutine is executed, the number of parameters passed is pushed onto +@code{BASH_ARGC}. + +@item BASH_ARGV +An array variable containing all of the parameters in the current bash +execution call stack. The final parameter of the last subroutine call +is at the top of the stack; the first parameter of the initial call is +at the bottom. When a subroutine is executed, the parameters supplied +are pushed onto @code{BASH_ARGV}. + +@item BASH_COMMAND +The command currently being executed or about to be executed, unless the +shell is executing a command as the result of a trap, +in which case it is the command executing at the time of the trap. + +@item BASH_ENV +If this variable is set when Bash is invoked to execute a shell +script, its value is expanded and used as the name of a startup file +to read before executing the script. @xref{Bash Startup Files}. + +@item BASH_EXECUTION_STRING +The command argument to the @option{-c} invocation option. + +@item BASH_LINENO +An array variable whose members are the line numbers in source files +corresponding to each member of @var{FUNCNAME}. +@code{$@{BASH_LINENO[$i]@}} is the line number in the source file where +@code{$@{FUNCNAME[$i + 1]@}} was called. +The corresponding source file name is @code{$@{BASH_SOURCE[$i + 1]@}}. +Use @code{LINENO} to obtain the current line number. + +@item BASH_SOURCE +An array variable whose members are the source filenames corresponding +to the elements in the @code{FUNCNAME} array variable. + +@item BASH_SUBSHELL +Incremented by one each time a subshell or subshell environment is spawned. +The initial value is 0. + +@item BASH_VERSINFO +A readonly array variable (@pxref{Arrays}) +whose members hold version information for this instance of Bash. +The values assigned to the array members are as follows: + +@table @code + +@item BASH_VERSINFO[0] +The major version number (the @var{release}). + +@item BASH_VERSINFO[1] +The minor version number (the @var{version}). + +@item BASH_VERSINFO[2] +The patch level. + +@item BASH_VERSINFO[3] +The build version. + +@item BASH_VERSINFO[4] +The release status (e.g., @var{beta1}). + +@item BASH_VERSINFO[5] +The value of @env{MACHTYPE}. + +@end table + +@item BASH_VERSION +The version number of the current instance of Bash. + +@item COLUMNS +Used by the @code{select} builtin command to determine the terminal width +when printing selection lists. Automatically set upon receipt of a +@code{SIGWINCH}. + +@item COMP_CWORD +An index into @env{$@{COMP_WORDS@}} of the word containing the current +cursor position. +This variable is available only in shell functions invoked by the +programmable completion facilities (@pxref{Programmable Completion}). + +@item COMP_LINE +The current command line. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (@pxref{Programmable Completion}). + +@item COMP_POINT +The index of the current cursor position relative to the beginning of +the current command. +If the current cursor position is at the end of the current command, +the value of this variable is equal to @code{$@{#COMP_LINE@}}. +This variable is available only in shell functions and external +commands invoked by the +programmable completion facilities (@pxref{Programmable Completion}). + +@item COMP_WORDBREAKS +The set of characters that the Readline library treats as word +separators when performing word completion. +If @code{COMP_WORDBREAKS} is unset, it loses its special properties, +even if it is subsequently reset. + +@item COMP_WORDS +An array variable consisting of the individual +words in the current command line. +This variable is available only in shell functions invoked by the +programmable completion facilities (@pxref{Programmable Completion}). + +@item COMPREPLY +An array variable from which Bash reads the possible completions +generated by a shell function invoked by the programmable completion +facility (@pxref{Programmable Completion}). + +@item DIRSTACK +An array variable containing the current contents of the directory stack. +Directories appear in the stack in the order they are displayed by the +@code{dirs} builtin. +Assigning to members of this array variable may be used to modify +directories already in the stack, but the @code{pushd} and @code{popd} +builtins must be used to add and remove directories. +Assignment to this variable will not change the current directory. +If @env{DIRSTACK} is unset, it loses its special properties, even if +it is subsequently reset. + +@item EMACS +If Bash finds this variable in the environment when the shell +starts with value @samp{t}, it assumes that the shell is running in an +emacs shell buffer and disables line editing. + +@item EUID +The numeric effective user id of the current user. This variable +is readonly. + +@item FCEDIT +The editor used as a default by the @option{-e} option to the @code{fc} +builtin command. + +@item FIGNORE +A colon-separated list of suffixes to ignore when performing +filename completion. +A file name whose suffix matches one of the entries in +@env{FIGNORE} +is excluded from the list of matched file names. A sample +value is @samp{.o:~} + +@item FUNCNAME +An array variable containing the names of all shell functions +currently in the execution call stack. +The element with index 0 is the name of any currently-executing +shell function. +The bottom-most element is "main". +This variable exists only when a shell function is executing. +Assignments to @env{FUNCNAME} have no effect and return an error status. +If @env{FUNCNAME} is unset, it loses its special properties, even if +it is subsequently reset. + +@item GLOBIGNORE +A colon-separated list of patterns defining the set of filenames to +be ignored by filename expansion. +If a filename matched by a filename expansion pattern also matches one +of the patterns in @env{GLOBIGNORE}, it is removed from the list +of matches. + +@item GROUPS +An array variable containing the list of groups of which the current +user is a member. +Assignments to @env{GROUPS} have no effect and return an error status. +If @env{GROUPS} is unset, it loses its special properties, even if it is +subsequently reset. + +@item histchars +Up to three characters which control history expansion, quick +substitution, and tokenization (@pxref{History Interaction}). +The first character is the +@var{history expansion} character, that is, the character which signifies the +start of a history expansion, normally @samp{!}. The second character is the +character which signifies `quick substitution' when seen as the first +character on a line, normally @samp{^}. The optional third character is the +character which indicates that the remainder of the line is a comment when +found as the first character of a word, usually @samp{#}. The history +comment character causes history substitution to be skipped for the +remaining words on the line. It does not necessarily cause the shell +parser to treat the rest of the line as a comment. + +@item HISTCMD +The history number, or index in the history list, of the current +command. If @env{HISTCMD} is unset, it loses its special properties, +even if it is subsequently reset. + +@item HISTCONTROL +A colon-separated list of values controlling how commands are saved on +the history list. +If the list of values includes @samp{ignorespace}, lines which begin +with a space character are not saved in the history list. +A value of @samp{ignoredups} causes lines which match the previous +history entry to not be saved. +A value of @samp{ignoreboth} is shorthand for +@samp{ignorespace} and @samp{ignoredups}. +A value of @samp{erasedups} causes all previous lines matching the +current line to be removed from the history list before that line +is saved. +Any value not in the above list is ignored. +If @env{HISTCONTROL} is unset, or does not include a valid value, +all lines read by the shell parser are saved on the history list, +subject to the value of @env{HISTIGNORE}. +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +@env{HISTCONTROL}. + +@item HISTFILE +The name of the file to which the command history is saved. The +default value is @file{~/.bash_history}. + +@item HISTFILESIZE +The maximum number of lines contained in the history file. When this +variable is assigned a value, the history file is truncated, if +necessary, to contain no more than that number of lines. +The history file is also truncated to this size after +writing it when an interactive shell exits. +The default value is 500. + +@item HISTIGNORE +A colon-separated list of patterns used to decide which command +lines should be saved on the history list. Each pattern is +anchored at the beginning of the line and must match the complete +line (no implicit @samp{*} is appended). Each pattern is tested +against the line after the checks specified by @env{HISTCONTROL} +are applied. In addition to the normal shell pattern matching +characters, @samp{&} matches the previous history line. @samp{&} +may be escaped using a backslash; the backslash is removed +before attempting a match. +The second and subsequent lines of a multi-line compound command are +not tested, and are added to the history regardless of the value of +@env{HISTIGNORE}. + +@env{HISTIGNORE} subsumes the function of @env{HISTCONTROL}. A +pattern of @samp{&} is identical to @code{ignoredups}, and a +pattern of @samp{[ ]*} is identical to @code{ignorespace}. +Combining these two patterns, separating them with a colon, +provides the functionality of @code{ignoreboth}. + +@item HISTSIZE +The maximum number of commands to remember on the history list. +The default value is 500. + +@item HOSTFILE +Contains the name of a file in the same format as @file{/etc/hosts} that +should be read when the shell needs to complete a hostname. +The list of possible hostname completions may be changed while the shell +is running; +the next time hostname completion is attempted after the +value is changed, Bash adds the contents of the new file to the +existing list. +If @env{HOSTFILE} is set, but has no value, Bash attempts to read +@file{/etc/hosts} to obtain the list of possible hostname completions. +When @env{HOSTFILE} is unset, the hostname list is cleared. + +@item HOSTNAME +The name of the current host. + +@item HOSTTYPE +A string describing the machine Bash is running on. + +@item IGNOREEOF +Controls the action of the shell on receipt of an @code{EOF} character +as the sole input. If set, the value denotes the number +of consecutive @code{EOF} characters that can be read as the +first character on an input line +before the shell will exit. If the variable exists but does not +have a numeric value (or has no value) then the default is 10. +If the variable does not exist, then @code{EOF} signifies the end of +input to the shell. This is only in effect for interactive shells. + +@item INPUTRC +The name of the Readline initialization file, overriding the default +of @file{~/.inputrc}. + +@item LANG +Used to determine the locale category for any category not specifically +selected with a variable starting with @code{LC_}. + +@item LC_ALL +This variable overrides the value of @env{LANG} and any other +@code{LC_} variable specifying a locale category. + +@item LC_COLLATE +This variable determines the collation order used when sorting the +results of filename expansion, and +determines the behavior of range expressions, equivalence classes, +and collating sequences within filename expansion and pattern matching +(@pxref{Filename Expansion}). + +@item LC_CTYPE +This variable determines the interpretation of characters and the +behavior of character classes within filename expansion and pattern +matching (@pxref{Filename Expansion}). + +@item LC_MESSAGES +This variable determines the locale used to translate double-quoted +strings preceded by a @samp{$} (@pxref{Locale Translation}). + +@item LC_NUMERIC +This variable determines the locale category used for number formatting. + +@item LINENO +The line number in the script or shell function currently executing. + +@item LINES +Used by the @code{select} builtin command to determine the column length +for printing selection lists. Automatically set upon receipt of a +@code{SIGWINCH}. + +@item MACHTYPE +A string that fully describes the system type on which Bash +is executing, in the standard @sc{gnu} @var{cpu-company-system} format. + +@item MAILCHECK +How often (in seconds) that the shell should check for mail in the +files specified in the @env{MAILPATH} or @env{MAIL} variables. +The default is 60 seconds. When it is time to check +for mail, the shell does so before displaying the primary prompt. +If this variable is unset, or set to a value that is not a number +greater than or equal to zero, the shell disables mail checking. + +@item OLDPWD +The previous working directory as set by the @code{cd} builtin. + +@item OPTERR +If set to the value 1, Bash displays error messages +generated by the @code{getopts} builtin command. + +@item OSTYPE +A string describing the operating system Bash is running on. + +@item PIPESTATUS +An array variable (@pxref{Arrays}) +containing a list of exit status values from the processes +in the most-recently-executed foreground pipeline (which may +contain only a single command). + +@item POSIXLY_CORRECT +If this variable is in the environment when @code{bash} starts, the shell +enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the +startup files, as if the @option{--posix} invocation option had been supplied. +If it is set while the shell is running, @code{bash} enables @sc{posix} mode, +as if the command +@example +@code{set -o posix} +@end example +@noindent +had been executed. + +@item PPID +The process @sc{id} of the shell's parent process. This variable +is readonly. + +@item PROMPT_COMMAND +If set, the value is interpreted as a command to execute +before the printing of each primary prompt (@env{$PS1}). + +@item PS3 +The value of this variable is used as the prompt for the +@code{select} command. If this variable is not set, the +@code{select} command prompts with @samp{#? } + +@item PS4 +The value is the prompt printed before the command line is echoed +when the @option{-x} option is set (@pxref{The Set Builtin}). +The first character of @env{PS4} is replicated multiple times, as +necessary, to indicate multiple levels of indirection. +The default is @samp{+ }. + +@item PWD +The current working directory as set by the @code{cd} builtin. + +@item RANDOM +Each time this parameter is referenced, a random integer +between 0 and 32767 is generated. Assigning a value to this +variable seeds the random number generator. + +@item REPLY +The default variable for the @code{read} builtin. + +@item SECONDS +This variable expands to the number of seconds since the +shell was started. Assignment to this variable resets +the count to the value assigned, and the expanded value +becomes the value assigned plus the number of seconds +since the assignment. + +@item SHELLOPTS +A colon-separated list of enabled shell options. Each word in +the list is a valid argument for the @option{-o} option to the +@code{set} builtin command (@pxref{The Set Builtin}). +The options appearing in @env{SHELLOPTS} are those reported +as @samp{on} by @samp{set -o}. +If this variable is in the environment when Bash +starts up, each shell option in the list will be enabled before +reading any startup files. This variable is readonly. + +@item SHLVL +Incremented by one each time a new instance of Bash is started. This is +intended to be a count of how deeply your Bash shells are nested. + +@item TIMEFORMAT +The value of this parameter is used as a format string specifying +how the timing information for pipelines prefixed with the @code{time} +reserved word should be displayed. +The @samp{%} character introduces an +escape sequence that is expanded to a time value or other +information. +The escape sequences and their meanings are as +follows; the braces denote optional portions. + +@table @code + +@item %% +A literal @samp{%}. + +@item %[@var{p}][l]R +The elapsed time in seconds. + +@item %[@var{p}][l]U +The number of CPU seconds spent in user mode. + +@item %[@var{p}][l]S +The number of CPU seconds spent in system mode. + +@item %P +The CPU percentage, computed as (%U + %S) / %R. +@end table + +The optional @var{p} is a digit specifying the precision, the number of +fractional digits after a decimal point. +A value of 0 causes no decimal point or fraction to be output. +At most three places after the decimal point may be specified; values +of @var{p} greater than 3 are changed to 3. +If @var{p} is not specified, the value 3 is used. + +The optional @code{l} specifies a longer format, including minutes, of +the form @var{MM}m@var{SS}.@var{FF}s. +The value of @var{p} determines whether or not the fraction is included. + +If this variable is not set, Bash acts as if it had the value +@example +@code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'} +@end example +If the value is null, no timing information is displayed. +A trailing newline is added when the format string is displayed. + +@item TMOUT +If set to a value greater than zero, @code{TMOUT} is treated as the +default timeout for the @code{read} builtin (@pxref{Bash Builtins}). +The @code{select} command (@pxref{Conditional Constructs}) terminates +if input does not arrive after @code{TMOUT} seconds when input is coming +from a terminal. + +In an interative 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. + +@item UID +The numeric real user id of the current user. This variable is readonly. + +@end vtable + +@node Bash Features +@chapter Bash Features + +This section describes features unique to Bash. + +@menu +* Invoking Bash:: Command line options that you can give + to Bash. +* Bash Startup Files:: When and how Bash executes scripts. +* Interactive Shells:: What an interactive shell is. +* Bash Conditional Expressions:: Primitives used in composing expressions for + the @code{test} builtin. +* Shell Arithmetic:: Arithmetic on shell variables. +* Aliases:: Substituting one command for another. +* Arrays:: Array Variables. +* The Directory Stack:: History of visited directories. +* Printing a Prompt:: Controlling the PS1 string. +* The Restricted Shell:: A more controlled mode of shell execution. +* Bash POSIX Mode:: Making Bash behave more closely to what + the POSIX standard specifies. +@end menu + +@node Invoking Bash +@section Invoking Bash + +@example +bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}] +bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}] +bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}] +@end example + +In addition to the single-character shell command-line options +(@pxref{The Set Builtin}), there are several multi-character +options that you can use. These options must appear on the command +line before the single-character options to be recognized. + +@table @code +@item --debugger +Arrange for the debugger profile to be executed before the shell +starts. Turns on extended debugging mode (see @ref{Bash Builtins} +for a description of the @code{extdebug} option to the @code{shopt} +builtin) and shell function tracing +(see @ref{The Set Builtin} for a description of the @code{-o functrace} +option). + +@item --dump-po-strings +A list of all double-quoted strings preceded by @samp{$} +is printed on the standard ouput +in the @sc{gnu} @code{gettext} PO (portable object) file format. +Equivalent to @option{-D} except for the output format. + +@item --dump-strings +Equivalent to @option{-D}. + +@item --help +Display a usage message on standard output and exit sucessfully. + +@item --init-file @var{filename} +@itemx --rcfile @var{filename} +Execute commands from @var{filename} (instead of @file{~/.bashrc}) +in an interactive shell. + +@item --login +Equivalent to @option{-l}. + +@item --noediting +Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing}) +to read command lines when the shell is interactive. + +@item --noprofile +Don't load the system-wide startup file @file{/etc/profile} +or any of the personal initialization files +@file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile} +when Bash is invoked as a login shell. + +@item --norc +Don't read the @file{~/.bashrc} initialization file in an +interactive shell. This is on by default if the shell is +invoked as @code{sh}. + +@item --posix +Change the behavior of Bash where the default operation differs +from the @sc{posix} 1003.2 standard to match the standard. This +is intended to make Bash behave as a strict superset of that +standard. @xref{Bash POSIX Mode}, for a description of the Bash +@sc{posix} mode. + +@item --restricted +Make the shell a restricted shell (@pxref{The Restricted Shell}). + +@item --verbose +Equivalent to @option{-v}. Print shell input lines as they're read. + +@item --version +Show version information for this instance of +Bash on the standard output and exit successfully. + +@end table + +There are several single-character options that may be supplied at +invocation which are not available with the @code{set} builtin. + +@table @code +@item -c @var{string} +Read and execute commands from @var{string} after processing the +options, then exit. Any remaining arguments are assigned to the +positional parameters, starting with @code{$0}. + +@item -i +Force the shell to run interactively. Interactive shells are +described in @ref{Interactive Shells}. + +@item -l +Make this shell act as if it had been directly invoked by login. +When the shell is interactive, this is equivalent to starting a +login shell with @samp{exec -l bash}. +When the shell is not interactive, the login shell startup files will +be executed. +@samp{exec bash -l} or @samp{exec bash --login} +will replace the current shell with a Bash login shell. +@xref{Bash Startup Files}, for a description of the special behavior +of a login shell. + +@item -r +Make the shell a restricted shell (@pxref{The Restricted Shell}). + +@item -s +If this option is present, or if no arguments remain after option +processing, then commands are read from the standard input. +This option allows the positional parameters to be set +when invoking an interactive shell. + +@item -D +A list of all double-quoted strings preceded by @samp{$} +is printed on the standard ouput. +These are the strings that +are subject to language translation when the current locale +is not @code{C} or @code{POSIX} (@pxref{Locale Translation}). +This implies the @option{-n} option; no commands will be executed. + +@item [-+]O [@var{shopt_option}] +@var{shopt_option} is one of the shell options accepted by the +@code{shopt} builtin (@pxref{Shell Builtin Commands}). +If @var{shopt_option} is present, @option{-O} sets the value of that option; +@option{+O} unsets it. +If @var{shopt_option} is not supplied, the names and values of the shell +options accepted by @code{shopt} are printed on the standard output. +If the invocation option is @option{+O}, the output is displayed in a format +that may be reused as input. + +@item -- +A @code{--} signals the end of options and disables further option +processing. +Any arguments after the @code{--} are treated as filenames and arguments. + +@end table + +@cindex login shell +A @emph{login} shell is one whose first character of argument zero is +@samp{-}, or one invoked with the @option{--login} option. + +@cindex interactive shell +An @emph{interactive} shell is one started without non-option arguments, +unless @option{-s} is specified, +without specifying the @option{-c} option, and whose input and output are both +connected to terminals (as determined by @code{isatty(3)}), or one +started with the @option{-i} option. @xref{Interactive Shells}, for more +information. + +If arguments remain after option processing, and neither the +@option{-c} nor the @option{-s} +option has been supplied, the first argument is assumed to +be the name of a file containing shell commands (@pxref{Shell Scripts}). +When Bash is invoked in this fashion, @code{$0} +is set to the name of the file, and the positional parameters +are set to the remaining arguments. +Bash reads and executes commands from this file, then exits. +Bash's exit status is the exit status of the last command executed +in the script. If no commands are executed, the exit status is 0. + +@node Bash Startup Files +@section Bash Startup Files +@cindex startup files + +This section describs how Bash executes its startup files. +If any of the files exist but cannot be read, Bash reports an error. +Tildes are expanded in file names as described above under +Tilde Expansion (@pxref{Tilde Expansion}). + +Interactive shells are described in @ref{Interactive Shells}. + +@subsubheading Invoked as an interactive login shell, or with @option{--login} + +When Bash is invoked as an interactive login shell, or as a +non-interactive shell with the @option{--login} option, it first reads and +executes commands from the file @file{/etc/profile}, if that file exists. +After reading that file, it looks for @file{~/.bash_profile}, +@file{~/.bash_login}, and @file{~/.profile}, in that order, and reads +and executes commands from the first one that exists and is readable. +The @option{--noprofile} option may be used when the shell is started to +inhibit this behavior. + +When a login shell exits, Bash reads and executes commands from +the file @file{~/.bash_logout}, if it exists. + +@subsubheading Invoked as an interactive non-login shell + +When an interactive shell that is not a login shell is started, Bash +reads and executes commands from @file{~/.bashrc}, if that file exists. +This may be inhibited by using the @option{--norc} option. +The @option{--rcfile @var{file}} option will force Bash to read and +execute commands from @var{file} instead of @file{~/.bashrc}. + +So, typically, your @file{~/.bash_profile} contains the line +@example +@code{if [ -f ~/.bashrc ]; then . ~/.bashrc; fi} +@end example +@noindent +after (or before) any login-specific initializations. + +@subsubheading Invoked non-interactively + +When Bash is started non-interactively, to run a shell script, +for example, it looks for the variable @env{BASH_ENV} in the environment, +expands its value if it appears there, and uses the expanded value as +the name of a file to read and execute. Bash behaves as if the +following command were executed: +@example +@code{if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi} +@end example +@noindent +but the value of the @env{PATH} variable is not used to search for the +file name. + +As noted above, if a non-interactive shell is invoked with the +@option{--login} option, Bash attempts to read and execute commands from the +login shell startup files. + +@subsubheading Invoked with name @code{sh} + +If Bash is invoked with the name @code{sh}, it tries to mimic the +startup behavior of historical versions of @code{sh} as closely as +possible, while conforming to the @sc{posix} standard as well. + +When invoked as an interactive login shell, or as a non-interactive +shell with the @option{--login} option, it first attempts to read +and execute commands from @file{/etc/profile} and @file{~/.profile}, in +that order. +The @option{--noprofile} option may be used to inhibit this behavior. +When invoked as an interactive shell with the name @code{sh}, Bash +looks for the variable @env{ENV}, expands its value if it is defined, +and uses the expanded value as the name of a file to read and execute. +Since a shell invoked as @code{sh} does not attempt to read and execute +commands from any other startup files, the @option{--rcfile} option has +no effect. +A non-interactive shell invoked with the name @code{sh} does not attempt +to read any other startup files. + +When invoked as @code{sh}, Bash enters @sc{posix} mode after +the startup files are read. + +@subsubheading Invoked in @sc{posix} mode + +When Bash is started in @sc{posix} mode, as with the +@option{--posix} command line option, it follows the @sc{posix} standard +for startup files. +In this mode, interactive shells expand the @env{ENV} variable +and commands are read and executed from the file whose name is the +expanded value. +No other startup files are read. + +@subsubheading Invoked by remote shell daemon + +Bash attempts to determine when it is being run by the remote shell +daemon, usually @code{rshd}. If Bash determines it is being run by +rshd, it reads and executes commands from @file{~/.bashrc}, if that +file exists and is readable. +It will not do this if invoked as @code{sh}. +The @option{--norc} option may be used to inhibit this behavior, and the +@option{--rcfile} option may be used to force another file to be read, but +@code{rshd} does not generally invoke the shell with those options or +allow them to be specified. + +@subsubheading Invoked with unequal effective and real @sc{uid/gid}s + +If Bash is started with the effective user (group) id not equal to the +real user (group) id, and the @code{-p} option is not supplied, no startup +files are read, shell functions are not inherited from the environment, +the @env{SHELLOPTS} variable, if it appears in the environment, is ignored, +and the effective user id is set to the real user id. +If the @code{-p} option is supplied at invocation, the startup behavior is +the same, but the effective user id is not reset. + +@node Interactive Shells +@section Interactive Shells +@cindex interactive shell +@cindex shell, interactive + +@menu +* What is an Interactive Shell?:: What determines whether a shell is Interactive. +* Is this Shell Interactive?:: How to tell if a shell is interactive. +* Interactive Shell Behavior:: What changes in a interactive shell? +@end menu + +@node What is an Interactive Shell? +@subsection What is an Interactive Shell? + +An interactive shell +is one started without non-option arguments, unless @option{-s} is +specified, without specifiying the @option{-c} option, and +whose input and output are both +connected to terminals (as determined by @code{isatty(3)}), +or one started with the @option{-i} option. + +An interactive shell generally reads from and writes to a user's +terminal. + +The @option{-s} invocation option may be used to set the positional parameters +when an interactive shell is started. + +@node Is this Shell Interactive? +@subsection Is this Shell Interactive? + +To determine within a startup script whether or not Bash is +running interactively, +test the value of the @samp{-} special parameter. +It contains @code{i} when the shell is interactive. For example: + +@example +case "$-" in +*i*) echo This shell is interactive ;; +*) echo This shell is not interactive ;; +esac +@end example + +Alternatively, startup scripts may examine the variable +@env{PS1}; it is unset in non-interactive shells, and set in +interactive shells. Thus: + +@example +if [ -z "$PS1" ]; then + echo This shell is not interactive +else + echo This shell is interactive +fi +@end example + +@node Interactive Shell Behavior +@subsection Interactive Shell Behavior + +When the shell is running interactively, it changes its behavior in +several ways. + +@enumerate +@item +Startup files are read and executed as described in @ref{Bash Startup Files}. + +@item +Job Control (@pxref{Job Control}) is enabled by default. When job +control is in effect, Bash ignores the keyboard-generated job control +signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}. + +@item +Bash expands and displays @env{PS1} before reading the first line +of a command, and expands and displays @env{PS2} before reading the +second and subsequent lines of a multi-line command. + +@item +Bash executes the value of the @env{PROMPT_COMMAND} variable as a command +before printing the primary prompt, @env{$PS1} +(@pxref{Bash Variables}). + +@item +Readline (@pxref{Command Line Editing}) is used to read commands from +the user's terminal. + +@item +Bash inspects the value of the @code{ignoreeof} option to @code{set -o} +instead of exiting immediately when it receives an @code{EOF} on its +standard input when reading a command (@pxref{The Set Builtin}). + +@item +Command history (@pxref{Bash History Facilities}) +and history expansion (@pxref{History Interaction}) +are enabled by default. +Bash will save the command history to the file named by @env{$HISTFILE} +when an interactive shell exits. + +@item +Alias expansion (@pxref{Aliases}) is performed by default. + +@item +In the absence of any traps, Bash ignores @code{SIGTERM} +(@pxref{Signals}). + +@item +In the absence of any traps, @code{SIGINT} is caught and handled +((@pxref{Signals}). +@code{SIGINT} will interrupt some shell builtins. + +@item +An interactive login shell sends a @code{SIGHUP} to all jobs on exit +if the @code{hupoxexit} shell option has been enabled (@pxref{Signals}). + +@item +The @option{-n} invocation option is ignored, and @samp{set -n} has +no effect (@pxref{The Set Builtin}). + +@item +Bash will check for mail periodically, depending on the values of the +@env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables +(@pxref{Bash Variables}). + +@item +Expansion errors due to references to unbound shell variables after +@samp{set -u} has been enabled will not cause the shell to exit +(@pxref{The Set Builtin}). + +@item +The shell will not exit on expansion errors caused by @var{var} being unset +or null in @code{$@{@var{var}:?@var{word}@}} expansions +(@pxref{Shell Parameter Expansion}). + +@item +Redirection errors encountered by shell builtins will not cause the +shell to exit. + +@item +When running in @sc{posix} mode, a special builtin returning an error +status will not cause the shell to exit (@pxref{Bash POSIX Mode}). +@item +A failed @code{exec} will not cause the shell to exit +(@pxref{Bourne Shell Builtins}). + +@item +Parser syntax errors will not cause the shell to exit. + +@item +Simple spelling correction for directory arguments to the @code{cd} +builtin is enabled by default (see the description of the @code{cdspell} +option to the @code{shopt} builtin in @ref{Bash Builtins}). + +@item +The shell will check the value of the @env{TMOUT} variable and exit +if a command is not read within the specified number of seconds after +printing @env{$PS1} (@pxref{Bash Variables}). + +@end enumerate + +@node Bash Conditional Expressions +@section Bash Conditional Expressions +@cindex expressions, conditional + +Conditional expressions are used by the @code{[[} compound command +and the @code{test} and @code{[} builtin commands. + +Expressions may be unary or binary. +Unary expressions are often used to examine the status of a file. +There are string operators and numeric comparison operators as well. +If the @var{file} argument to one of the primaries is of the form +@file{/dev/fd/@var{N}}, then file descriptor @var{N} is checked. +If the @var{file} argument to one of the primaries is one of +@file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file +descriptor 0, 1, or 2, respectively, is checked. + +@table @code +@item -a @var{file} +True if @var{file} exists. + +@item -b @var{file} +True if @var{file} exists and is a block special file. + +@item -c @var{file} +True if @var{file} exists and is a character special file. + +@item -d @var{file} +True if @var{file} exists and is a directory. + +@item -e @var{file} +True if @var{file} exists. + +@item -f @var{file} +True if @var{file} exists and is a regular file. + +@item -g @var{file} +True if @var{file} exists and its set-group-id bit is set. + +@item -h @var{file} +True if @var{file} exists and is a symbolic link. + +@item -k @var{file} +True if @var{file} exists and its "sticky" bit is set. + +@item -p @var{file} +True if @var{file} exists and is a named pipe (FIFO). + +@item -r @var{file} +True if @var{file} exists and is readable. + +@item -s @var{file} +True if @var{file} exists and has a size greater than zero. + +@item -t @var{fd} +True if file descriptor @var{fd} is open and refers to a terminal. + +@item -u @var{file} +True if @var{file} exists and its set-user-id bit is set. + +@item -w @var{file} +True if @var{file} exists and is writable. + +@item -x @var{file} +True if @var{file} exists and is executable. + +@item -O @var{file} +True if @var{file} exists and is owned by the effective user id. + +@item -G @var{file} +True if @var{file} exists and is owned by the effective group id. + +@item -L @var{file} +True if @var{file} exists and is a symbolic link. + +@item -S @var{file} +True if @var{file} exists and is a socket. + +@item -N @var{file} +True if @var{file} exists and has been modified since it was last read. + +@item @var{file1} -nt @var{file2} +True if @var{file1} is newer (according to modification date) +than @var{file2}, or if @var{file1} exists and @var{file2} does not. + +@item @var{file1} -ot @var{file2} +True if @var{file1} is older than @var{file2}, +or if @var{file2} exists and @var{file1} does not. + +@item @var{file1} -ef @var{file2} +True if @var{file1} and @var{file2} refer to the same device and +inode numbers. + +@item -o @var{optname} +True if shell option @var{optname} is enabled. +The list of options appears in the description of the @option{-o} +option to the @code{set} builtin (@pxref{The Set Builtin}). + +@item -z @var{string} +True if the length of @var{string} is zero. + +@item -n @var{string} +@itemx @var{string} +True if the length of @var{string} is non-zero. + +@item @var{string1} == @var{string2} +True if the strings are equal. +@samp{=} may be used in place of @samp{==} for strict @sc{posix} compliance. + +@item @var{string1} != @var{string2} +True if the strings are not equal. + +@item @var{string1} < @var{string2} +True if @var{string1} sorts before @var{string2} lexicographically +in the current locale. + +@item @var{string1} > @var{string2} +True if @var{string1} sorts after @var{string2} lexicographically +in the current locale. + +@item @var{arg1} OP @var{arg2} +@code{OP} is one of +@samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}. +These arithmetic binary operators return true if @var{arg1} +is equal to, not equal to, less than, less than or equal to, +greater than, or greater than or equal to @var{arg2}, +respectively. @var{Arg1} and @var{arg2} +may be positive or negative integers. + +@end table + +@node Shell Arithmetic +@section Shell Arithmetic +@cindex arithmetic, shell +@cindex shell arithmetic +@cindex expressions, arithmetic +@cindex evaluation, arithmetic +@cindex arithmetic evaluation + +The shell allows arithmetic expressions to be evaluated, as one of +the shell expansions or by the @code{let} and the @option{-i} option +to the @code{declare} builtins. + +Evaluation is done in fixed-width integers with no check for overflow, +though division by 0 is trapped and flagged as an error. +The operators and their precedence, associativity, and values +are the same as in the C language. +The following list of operators is grouped into levels of +equal-precedence operators. +The levels are listed in order of decreasing precedence. + +@table @code + +@item @var{id}++ @var{id}-- +variable post-increment and post-decrement + +@item ++@var{id} --@var{id} +variable pre-increment and pre-decrement + +@item - + +unary minus and plus + +@item ! ~ +logical and bitwise negation + +@item ** +exponentiation + +@item * / % +multiplication, division, remainder + +@item + - +addition, subtraction + +@item << >> +left and right bitwise shifts + +@item <= >= < > +comparison + +@item == != +equality and inequality + +@item & +bitwise AND + +@item ^ +bitwise exclusive OR + +@item | +bitwise OR + +@item && +logical AND + +@item || +logical OR + +@item expr ? expr : expr +conditional operator + +@item = *= /= %= += -= <<= >>= &= ^= |= +assignment + +@item expr1 , expr2 +comma +@end table + +Shell variables are allowed as operands; parameter expansion is +performed before the expression is evaluated. +Within an expression, shell variables may also be referenced by name +without using the parameter expansion syntax. +A shell variable that is null or unset evaluates to 0 when referenced +by name without using the parameter expansion syntax. +The value of a variable is evaluated as an arithmetic expression +when it is referenced, or when a variable which has been given the +@var{integer} attribute using @samp{declare -i} is assigned a value. +A null value evaluates to 0. +A shell variable need not have its integer attribute turned on +to be used in an expression. + +Constants with a leading 0 are interpreted as octal numbers. +A leading @samp{0x} or @samp{0X} denotes hexadecimal. Otherwise, +numbers take the form [@var{base}@code{#}]@var{n}, where @var{base} +is a decimal number between 2 and 64 representing the arithmetic +base, and @var{n} is a number in that base. If @var{base}@code{#} is +omitted, then base 10 is used. +The digits greater than 9 are represented by the lowercase letters, +the uppercase letters, @samp{@@}, and @samp{_}, in that order. +If @var{base} is less than or equal to 36, lowercase and uppercase +letters may be used interchangably to represent numbers between 10 +and 35. + +Operators are evaluated in order of precedence. Sub-expressions in +parentheses are evaluated first and may override the precedence +rules above. + +@node Aliases +@section Aliases +@cindex alias expansion + +@var{Aliases} allow a string to be substituted for a word when it is used +as the first word of a simple command. +The shell maintains a list of aliases that may be set and unset with +the @code{alias} and @code{unalias} builtin commands. + +The first word of each simple command, if unquoted, is checked to see +if it has an alias. +If so, that word is replaced by the text of the alias. +The alias name and the replacement text may contain any valid +shell input, including shell metacharacters, with the exception +that the alias name may not contain @samp{=}. +The first word of the replacement text is tested for +aliases, but a word that is identical to an alias being expanded +is not expanded a second time. This means that one may alias +@code{ls} to @code{"ls -F"}, +for instance, and Bash does not try to recursively expand the +replacement text. If the last character of the alias value is a +space or tab character, then the next command word following the +alias is also checked for alias expansion. + +Aliases are created and listed with the @code{alias} +command, and removed with the @code{unalias} command. + +There is no mechanism for using arguments in the replacement text, +as in @code{csh}. +If arguments are needed, a shell function should be used +(@pxref{Shell Functions}). + +Aliases are not expanded when the shell is not interactive, +unless the @code{expand_aliases} shell option is set using +@code{shopt} (@pxref{Bash Builtins}). + +The rules concerning the definition and use of aliases are +somewhat confusing. Bash +always reads at least one complete line +of input before executing any +of the commands on that line. Aliases are expanded when a +command is read, not when it is executed. Therefore, an +alias definition appearing on the same line as another +command does not take effect until the next line of input is read. +The commands following the alias definition +on that line are not affected by the new alias. +This behavior is also an issue when functions are executed. +Aliases are expanded when a function definition is read, +not when the function is executed, because a function definition +is itself a compound command. As a consequence, aliases +defined in a function are not available until after that +function is executed. To be safe, always put +alias definitions on a separate line, and do not use @code{alias} +in compound commands. + +For almost every purpose, shell functions are preferred over aliases. + +@node Arrays +@section Arrays +@cindex arrays + +Bash provides one-dimensional array variables. Any variable may be used as +an array; the @code{declare} builtin will explicitly declare an array. +There is no maximum +limit on the size of an array, nor any requirement that members +be indexed or assigned contiguously. Arrays are zero-based. + +An array is created automatically if any variable is assigned to using +the syntax +@example +name[@var{subscript}]=@var{value} +@end example + +@noindent +The @var{subscript} +is treated as an arithmetic expression that must evaluate to a number +greater than or equal to zero. To explicitly declare an array, use +@example +declare -a @var{name} +@end example +@noindent +The syntax +@example +declare -a @var{name}[@var{subscript}] +@end example +@noindent +is also accepted; the @var{subscript} is ignored. Attributes may be +specified for an array variable using the @code{declare} and +@code{readonly} builtins. Each attribute applies to all members of +an array. + +Arrays are assigned to using compound assignments of the form +@example +name=(value@var{1} @dots{} value@var{n}) +@end example +@noindent +where each +@var{value} is of the form @code{[[@var{subscript}]=]}@var{string}. If +the optional subscript is supplied, that index is assigned to; +otherwise the index of the element assigned is the last index assigned +to by the statement plus one. Indexing starts at zero. +This syntax is also accepted by the @code{declare} +builtin. Individual array elements may be assigned to using the +@code{name[}@var{subscript}@code{]=}@var{value} syntax introduced above. + +Any element of an array may be referenced using +@code{$@{name[}@var{subscript}@code{]@}}. +The braces are required to avoid +conflicts with the shell's filename expansion operators. If the +@var{subscript} is @samp{@@} or @samp{*}, the word expands to all members +of the array @var{name}. These subscripts differ only when the word +appears within double quotes. If the word is double-quoted, +@code{$@{name[*]@}} expands to a single word with +the value of each array member separated by the first character of the +@env{IFS} variable, and @code{$@{name[@@]@}} expands each element of +@var{name} to a separate word. When there are no array members, +@code{$@{name[@@]@}} expands to nothing. This is analogous to the +expansion of the special parameters @samp{@@} and @samp{*}. +@code{$@{#name[}@var{subscript}@code{]@}} expands to the length of +@code{$@{name[}@var{subscript}@code{]@}}. +If @var{subscript} is @samp{@@} or +@samp{*}, the expansion is the number of elements in the array. +Referencing an array variable without a subscript is equivalent to +referencing element zero. + +The @code{unset} builtin is used to destroy arrays. +@code{unset} @var{name}[@var{subscript}] +destroys the array element at index @var{subscript}. +@code{unset} @var{name}, where @var{name} is an array, removes the +entire array. A subscript of @samp{*} or @samp{@@} also removes the +entire array. + +The @code{declare}, @code{local}, and @code{readonly} +builtins each accept a @option{-a} +option to specify an array. The @code{read} +builtin accepts a @option{-a} +option to assign a list of words read from the standard input +to an array, and can read values from the standard input into +individual array elements. The @code{set} and @code{declare} +builtins display array values in a way that allows them to be +reused as input. + +@node The Directory Stack +@section The Directory Stack +@cindex directory stack + +@menu +* Directory Stack Builtins:: Bash builtin commands to manipulate + the directory stack. +@end menu + +The directory stack is a list of recently-visited directories. The +@code{pushd} builtin adds directories to the stack as it changes +the current directory, and the @code{popd} builtin removes specified +directories from the stack and changes the current directory to +the directory removed. The @code{dirs} builtin displays the contents +of the directory stack. + +The contents of the directory stack are also visible +as the value of the @env{DIRSTACK} shell variable. + +@node Directory Stack Builtins +@subsection Directory Stack Builtins + +@table @code + +@item dirs +@btindex dirs +@example +dirs [+@var{N} | -@var{N}] [-clpv] +@end example +Display the list of currently remembered directories. Directories +are added to the list with the @code{pushd} command; the +@code{popd} command removes directories from the list. +@table @code +@item +@var{N} +Displays the @var{N}th directory (counting from the left of the +list printed by @code{dirs} when invoked without options), starting +with zero. +@item -@var{N} +Displays the @var{N}th directory (counting from the right of the +list printed by @code{dirs} when invoked without options), starting +with zero. +@item -c +Clears the directory stack by deleting all of the elements. +@item -l +Produces a longer listing; the default listing format uses a +tilde to denote the home directory. +@item -p +Causes @code{dirs} to print the directory stack with one entry per +line. +@item -v +Causes @code{dirs} to print the directory stack with one entry per +line, prefixing each entry with its index in the stack. +@end table + +@item popd +@btindex popd +@example +popd [+@var{N} | -@var{N}] [-n] +@end example + +Remove the top entry from the directory stack, and @code{cd} +to the new top directory. +When no arguments are given, @code{popd} +removes the top directory from the stack and +performs a @code{cd} to the new top directory. The +elements are numbered from 0 starting at the first directory listed with +@code{dirs}; i.e., @code{popd} is equivalent to @code{popd +0}. +@table @code +@item +@var{N} +Removes the @var{N}th directory (counting from the left of the +list printed by @code{dirs}), starting with zero. +@item -@var{N} +Removes the @var{N}th directory (counting from the right of the +list printed by @code{dirs}), starting with zero. +@item -n +Suppresses the normal change of directory when removing directories +from the stack, so that only the stack is manipulated. +@end table + +@btindex pushd +@item pushd +@example +pushd [@var{dir} | @var{+N} | @var{-N}] [-n] +@end example + +Save the current directory on the top of the directory stack +and then @code{cd} to @var{dir}. +With no arguments, @code{pushd} exchanges the top two directories. + +@table @code +@item +@var{N} +Brings the @var{N}th directory (counting from the left of the +list printed by @code{dirs}, starting with zero) to the top of +the list by rotating the stack. +@item -@var{N} +Brings the @var{N}th directory (counting from the right of the +list printed by @code{dirs}, starting with zero) to the top of +the list by rotating the stack. +@item -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}'. +@code{cd}s to @var{dir}. +@end table + +@end table + +@node Printing a Prompt +@section Controlling the Prompt +@cindex prompting + +The value of the variable @env{PROMPT_COMMAND} is examined just before +Bash prints each primary prompt. If @env{PROMPT_COMMAND} is set and +has a non-null value, then the +value is executed just as if it had been typed on the command line. + +In addition, the following table describes the special characters which +can appear in the prompt variables: + +@table @code +@item \a +A bell character. +@item \d +The date, in "Weekday Month Date" format (e.g., "Tue May 26"). +@item \D@{@var{format}@} +The @var{format} is passed to @code{strftime}(3) and the result is inserted +into the prompt string; an empty @var{format} results in a locale-specific +time representation. The braces are required. +@item \e +An escape character. +@item \h +The hostname, up to the first `.'. +@item \H +The hostname. +@item \j +The number of jobs currently managed by the shell. +@item \l +The basename of the shell's terminal device name. +@item \n +A newline. +@item \r +A carriage return. +@item \s +The name of the shell, the basename of @code{$0} (the portion +following the final slash). +@item \t +The time, in 24-hour HH:MM:SS format. +@item \T +The time, in 12-hour HH:MM:SS format. +@item \@@ +The time, in 12-hour am/pm format. +@item \A +The time, in 24-hour HH:MM format. +@item \u +The username of the current user. +@item \v +The version of Bash (e.g., 2.00) +@item \V +The release of Bash, version + patchlevel (e.g., 2.00.0) +@item \w +The current working directory. +@item \W +The basename of @env{$PWD}. +@item \! +The history number of this command. +@item \# +The command number of this command. +@item \$ +If the effective uid is 0, @code{#}, otherwise @code{$}. +@item \@var{nnn} +The character whose ASCII code is the octal value @var{nnn}. +@item \\ +A backslash. +@item \[ +Begin a sequence of non-printing characters. This could be used to +embed a terminal control sequence into the prompt. +@item \] +End a sequence of non-printing characters. +@end table + +The command number and the history number are usually different: +the history number of a command is its position in the history +list, which may include commands restored from the history file +(@pxref{Bash History Facilities}), while the command number is +the position in the sequence of commands executed during the current +shell session. + +After the string is decoded, it is expanded via +parameter expansion, command substitution, arithmetic +expansion, and quote removal, subject to the value of the +@code{promptvars} shell option (@pxref{Bash Builtins}). + +@node The Restricted Shell +@section The Restricted Shell +@cindex restricted shell + +If Bash is started with the name @code{rbash}, or the +@option{--restricted} +or +@option{-r} +option is supplied at invocation, the shell becomes restricted. +A restricted shell is used to +set up an environment more controlled than the standard shell. +A restricted shell behaves identically to @code{bash} +with the exception that the following are disallowed or not performed: + +@itemize @bullet +@item +Changing directories with the @code{cd} builtin. +@item +Setting or unsetting the values of the @env{SHELL}, @env{PATH}, +@env{ENV}, or @env{BASH_ENV} variables. +@item +Specifying command names containing slashes. +@item +Specifying a filename containing a slash as an argument to the @code{.} +builtin command. +@item +Specifying a filename containing a slash as an argument to the @option{-p} +option to the @code{hash} builtin command. +@item +Importing function definitions from the shell environment at startup. +@item +Parsing the value of @env{SHELLOPTS} from the shell environment at startup. +@item +Redirecting output using the @samp{>}, @samp{>|}, @samp{<>}, @samp{>&}, +@samp{&>}, and @samp{>>} redirection operators. +@item +Using the @code{exec} builtin to replace the shell with another command. +@item +Adding or deleting builtin commands with the +@option{-f} and @option{-d} options to the @code{enable} builtin. +@item +Using the @code{enable} builtin command to enable disabled shell builtins. +@item +Specifying the @option{-p} option to the @code{command} builtin. +@item +Turning off restricted mode with @samp{set +r} or @samp{set +o restricted}. +@end itemize + +These restrictions are enforced after any startup files are read. + +When a command that is found to be a shell script is executed +(@pxref{Shell Scripts}), @code{rbash} turns off any restrictions in +the shell spawned to execute the script. + +@node Bash POSIX Mode +@section Bash POSIX Mode +@cindex POSIX Mode + +Starting Bash with the @option{--posix} command-line option or executing +@samp{set -o posix} while Bash is running will cause Bash to conform more +closely to the @sc{posix} 1003.2 standard by changing the behavior to +match that specified by @sc{posix} in areas where the Bash default differs. + +When invoked as @code{sh}, Bash enters @sc{posix} mode after reading the +startup files. + +The following list is what's changed when `@sc{posix} mode' is in effect: + +@enumerate +@item +When a command in the hash table no longer exists, Bash will re-search +@env{$PATH} to find the new location. This is also available with +@samp{shopt -s checkhash}. + +@item +The message printed by the job control code and builtins when a job +exits with a non-zero status is `Done(status)'. + +@item +The message printed by the job control code and builtins when a job +is stopped is `Stopped(@var{signame})', where @var{signame} is, for +example, @code{SIGTSTP}. + +@item +Reserved words may not be aliased. + +@item +The @sc{posix} 1003.2 @env{PS1} and @env{PS2} expansions of @samp{!} to +the history number and @samp{!!} to @samp{!} are enabled, +and parameter expansion is performed on the values of @env{PS1} and +@env{PS2} regardless of the setting of the @code{promptvars} option. + +@item +Interactive comments are enabled by default. (Bash has them on by +default anyway.) + +@item +The @sc{posix} 1003.2 startup files are executed (@env{$ENV}) rather than +the normal Bash files. + +@item +Tilde expansion is only performed on assignments preceding a command +name, rather than on all assignment statements on the line. + +@item +The default history file is @file{~/.sh_history} (this is the +default value of @env{$HISTFILE}). + +@item +The output of @samp{kill -l} prints all the signal names on a single line, +separated by spaces. + +@item +Non-interactive shells exit if @var{filename} in @code{.} @var{filename} +is not found. + +@item +Non-interactive shells exit if a syntax error in an arithmetic expansion +results in an invalid expression. + +@item +Redirection operators do not perform filename expansion on the word +in the redirection unless the shell is interactive. + +@item +Redirection operators do not perform word splitting on the word in the +redirection. + +@item +Function names must be valid shell @code{name}s. That is, they may not +contain characters other than letters, digits, and underscores, and +may not start with a digit. Declaring a function with an invalid name +causes a fatal syntax error in non-interactive shells. + +@item +@sc{posix} 1003.2 `special' builtins are found before shell functions +during command lookup. + +@item +If a @sc{posix} 1003.2 special builtin returns an error status, a +non-interactive shell exits. The fatal errors are those listed in +the POSIX.2 standard, and include things like passing incorrect options, +redirection errors, variable assignment errors for assignments preceding +the command name, and so on. + +@item +If the @code{cd} builtin finds a directory to change to +using @env{$CDPATH}, the +value it assigns to the @env{PWD} variable does not contain any +symbolic links, as if @samp{cd -P} had been executed. + +@item +If @env{CDPATH} is set, the @code{cd} builtin will not implicitly +append the current directory to it. This means that @code{cd} will +fail if no valid directory name can be constructed from +any of the entries in @env{$CDPATH}, even if the a directory with +the same name as the name given as an argument to @code{cd} exists +in the current directory. + +@item +A non-interactive shell exits with an error status if a variable +assignment error occurs when no command name follows the assignment +statements. +A variable assignment error occurs, for example, when trying to assign +a value to a readonly variable. + +@item +A non-interactive shell exits with an error status if the iteration +variable in a @code{for} statement or the selection variable in a +@code{select} statement is a readonly variable. + +@item +Process substitution is not available. + +@item +Assignment statements preceding @sc{posix} 1003.2 special builtins +persist in the shell environment after the builtin completes. + +@item +Assignment statements preceding shell function calls persist in the +shell environment after the function returns, as if a @sc{posix} +special builtin command had been executed. + +@item +The @code{export} and @code{readonly} builtin commands display their +output in the format required by @sc{posix} 1003.2. + +@item +The @code{trap} builtin displays signal names without the leading +@code{SIG}. + +@item +The @code{.} and @code{source} builtins do not search the current directory +for the filename argument if it is not found by searching @env{PATH}. + +@item +Subshells spawned to execute command substitutions inherit the value of +the @option{-e} option from the parent shell. When not in @sc{posix} mode, +Bash clears the @option{-e} option in such subshells. + +@item +Alias expansion is always enabled, even in non-interactive shells. + +@item +When the @code{set} builtin is invoked without options, it does not display +shell function names and definitions. + +@item +When the @code{set} builtin is invoked without options, it displays +variable values without quotes, unless they contain shell metacharacters, +even if the result contains nonprinting characters. + +@item +When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname +constructed from @code{$PWD} and the directory name supplied as an argument +does not refer to an existing directory, @code{cd} will fail instead of +falling back to @var{physical} mode. +@end enumerate + +There is other @sc{posix} 1003.2 behavior that Bash does not implement. +Specifically: + +@enumerate +@item +Assignment statements affect the execution environment of all +builtins, not just special ones. + +@item +When a subshell is created to execute a shell script with execute permission, +but without a leading @samp{#!}, Bash sets @code{$0} to the full pathname of +the script as found by searching @code{$PATH}, rather than the command as +typed by the user. + +@item +When using @samp{.} to source a shell script found in @code{$PATH}, bash +checks execute permission bits rather than read permission bits, just as +if it were searching for a command. + +@end enumerate + +@node Job Control +@chapter Job Control + +This chapter discusses what job control is, how it works, and how +Bash allows you to access its facilities. + +@menu +* Job Control Basics:: How job control works. +* Job Control Builtins:: Bash builtin commands used to interact + with job control. +* Job Control Variables:: Variables Bash uses to customize job + control. +@end menu + +@node Job Control Basics +@section Job Control Basics +@cindex job control +@cindex foreground +@cindex background +@cindex suspending jobs + +Job control +refers to the ability to selectively stop (suspend) +the execution of processes and continue (resume) +their execution at a later point. A user typically employs +this facility via an interactive interface supplied jointly +by the system's terminal driver and Bash. + +The shell associates a @var{job} with each pipeline. It keeps a +table of currently executing jobs, which may be listed with the +@code{jobs} command. When Bash starts a job +asynchronously, it prints a line that looks +like: +@example +[1] 25647 +@end example +@noindent +indicating that this job is job number 1 and that the process @sc{id} +of the last process in the pipeline associated with this job is +25647. All of the processes in a single pipeline are members of +the same job. Bash uses the @var{job} abstraction as the +basis for job control. + +To facilitate the implementation of the user interface to job +control, the operating system maintains the notion of a current terminal +process group @sc{id}. Members of this process group (processes whose +process group @sc{id} is equal to the current terminal process group +@sc{id}) receive keyboard-generated signals such as @code{SIGINT}. +These processes are said to be in the foreground. Background +processes are those whose process group @sc{id} differs from the +terminal's; such processes are immune to keyboard-generated +signals. Only foreground processes are allowed to read from or +write to the terminal. Background processes which attempt to +read from (write to) the terminal are sent a @code{SIGTTIN} +(@code{SIGTTOU}) signal by the terminal driver, which, unless +caught, suspends the process. + +If the operating system on which Bash is running supports +job control, Bash contains facilities to use it. Typing the +@var{suspend} character (typically @samp{^Z}, Control-Z) while a +process is running causes that process to be stopped and returns +control to Bash. Typing the @var{delayed suspend} character +(typically @samp{^Y}, Control-Y) causes the process to be stopped +when it attempts to read input from the terminal, and control to +be returned to Bash. The user then manipulates the state of +this job, using the @code{bg} command to continue it in the +background, the @code{fg} command to continue it in the +foreground, or the @code{kill} command to kill it. A @samp{^Z} +takes effect immediately, and has the additional side effect of +causing pending output and typeahead to be discarded. + +There are a number of ways to refer to a job in the shell. The +character @samp{%} introduces a job name. + +Job number @code{n} may be referred to as @samp{%n}. +The symbols @samp{%%} and +@samp{%+} refer to the shell's notion of the current job, which +is the last job stopped while it was in the foreground or started +in the background. The +previous job may be referenced using @samp{%-}. In output +pertaining to jobs (e.g., the output of the @code{jobs} command), +the current job is always flagged with a @samp{+}, and the +previous job with a @samp{-}. + +A job may also be referred to +using a prefix of the name used to start it, or using a substring +that appears in its command line. For example, @samp{%ce} refers +to a stopped @code{ce} job. Using @samp{%?ce}, on the +other hand, refers to any job containing the string @samp{ce} in +its command line. If the prefix or substring matches more than one job, +Bash reports an error. + +Simply naming a job can be used to bring it into the foreground: +@samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the +background into the foreground. Similarly, @samp{%1 &} resumes +job 1 in the background, equivalent to @samp{bg %1} + +The shell learns immediately whenever a job changes state. +Normally, Bash waits until it is about to print a prompt +before reporting changes in a job's status so as to not interrupt +any other output. +If the @option{-b} option to the @code{set} builtin is enabled, +Bash reports such changes immediately (@pxref{The Set Builtin}). +Any trap on @code{SIGCHLD} is executed for each child process +that exits. + +If an attempt to exit Bash is while jobs are stopped, the +shell prints a message warning that there are stopped jobs. +The @code{jobs} command may then be used to inspect their status. +If a second attempt to exit is made without an intervening command, +Bash does not print another warning, and the stopped jobs are terminated. + +@node Job Control Builtins +@section Job Control Builtins + +@table @code + +@item bg +@btindex bg +@example +bg [@var{jobspec}] +@end example +Resume the suspended job @var{jobspec} in the background, as if it +had been started with @samp{&}. +If @var{jobspec} is not supplied, the current job is used. +The return status is zero unless it is run when job control is not +enabled, or, when run with job control enabled, if @var{jobspec} was +not found or @var{jobspec} specifies a job that was started without +job control. + +@item fg +@btindex fg +@example +fg [@var{jobspec}] +@end example +Resume the job @var{jobspec} in the foreground and make it the current job. +If @var{jobspec} is not supplied, the current job is used. +The return status is that of the command placed into the foreground, +or non-zero if run when job control is disabled or, when run with +job control enabled, @var{jobspec} does not specify a valid job or +@var{jobspec} specifies a job that was started without job control. + +@item jobs +@btindex jobs +@example +jobs [-lnprs] [@var{jobspec}] +jobs -x @var{command} [@var{arguments}] +@end example + +The first form lists the active jobs. The options have the +following meanings: + +@table @code +@item -l +List process @sc{id}s in addition to the normal information. + +@item -n +Display information only about jobs that have changed status since +the user was last notified of their status. + +@item -p +List only the process @sc{id} of the job's process group leader. + +@item -r +Restrict output to running jobs. + +@item -s +Restrict output to stopped jobs. +@end table + +If @var{jobspec} is given, +output is restricted to information about that job. +If @var{jobspec} is not supplied, the status of all jobs is +listed. + +If the @option{-x} option is supplied, @code{jobs} replaces any +@var{jobspec} found in @var{command} or @var{arguments} with the +corresponding process group @sc{id}, and executes @var{command}, +passing it @var{argument}s, returning its exit status. + +@item kill +@btindex kill +@example +kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec} or @var{pid} +kill -l [@var{exit_status}] +@end example +Send a signal specified by @var{sigspec} or @var{signum} to the process +named by job specification @var{jobspec} or process @sc{id} @var{pid}. +@var{sigspec} is either a signal name such as @code{SIGINT} (with or without +the @code{SIG} prefix) or a signal number; @var{signum} is a signal number. +If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used. +The @option{-l} option lists the signal names. +If any arguments are supplied when @option{-l} is given, the names of the +signals corresponding to the arguments are listed, and the return status +is zero. +@var{exit_status} is a number specifying a signal number or the exit +status of a process terminated by a signal. +The return status is zero if at least one signal was successfully sent, +or non-zero if an error occurs or an invalid option is encountered. + +@item wait +@btindex wait +@example +wait [@var{jobspec} or @var{pid}] +@end example +Wait until the child process specified by process @sc{id} @var{pid} or job +specification @var{jobspec} exits and return the exit status of the last +command waited for. +If a job spec is given, all processes in the job are waited for. +If no arguments are given, all currently active child processes are +waited for, and the return status is zero. +If neither @var{jobspec} nor @var{pid} specifies an active child process +of the shell, the return status is 127. + +@item disown +@btindex disown +@example +disown [-ar] [-h] [@var{jobspec} @dots{}] +@end example +Without options, each @var{jobspec} is removed from the table of +active jobs. +If the @option{-h} option is given, the job is not removed from the table, +but is marked so that @code{SIGHUP} is not sent to the job if the shell +receives a @code{SIGHUP}. +If @var{jobspec} is not present, and neither the @option{-a} nor @option{-r} +option is supplied, the current job is used. +If no @var{jobspec} is supplied, the @option{-a} option means to remove or +mark all jobs; the @option{-r} option without a @var{jobspec} +argument restricts operation to running jobs. + +@item suspend +@btindex suspend +@example +suspend [-f] +@end example +Suspend the execution of this shell until it receives a +@code{SIGCONT} signal. The @option{-f} option means to suspend +even if the shell is a login shell. + +@end table + +When job control is not active, the @code{kill} and @code{wait} +builtins do not accept @var{jobspec} arguments. They must be +supplied process @sc{id}s. + +@node Job Control Variables +@section Job Control Variables + +@vtable @code + +@item auto_resume +This variable controls how the shell interacts with the user and +job control. If this variable exists then single word simple +commands without redirections are treated as candidates for resumption +of an existing job. There is no ambiguity allowed; if there is +more than one job beginning with the string typed, then +the most recently accessed job will be selected. +The name of a stopped job, in this context, is the command line +used to start it. If this variable is set to the value @samp{exact}, +the string supplied must match the name of a stopped job exactly; +if set to @samp{substring}, +the string supplied needs to match a substring of the name of a +stopped job. The @samp{substring} value provides functionality +analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}). +If set to any other value, the supplied string must +be a prefix of a stopped job's name; this provides functionality +analogous to the @samp{%} job @sc{id}. + +@end vtable + +@set readline-appendix +@set history-appendix +@cindex Readline, how to use +@include rluser.texi +@cindex History, how to use +@include hsuser.texi +@clear readline-appendix +@clear history-appendix + +@node Installing Bash +@chapter Installing Bash + +This chapter provides basic instructions for installing Bash on +the various supported platforms. The distribution supports the +@sc{gnu} operating systems, nearly every version of Unix, and several +non-Unix systems such as BeOS and Interix. +Other independent ports exist for +@sc{ms-dos}, @sc{os/2}, Windows @sc{95/98}, and Windows @sc{nt}. + +@menu +* Basic Installation:: Installation instructions. + +* Compilers and Options:: How to set special options for various + systems. + +* Compiling For Multiple Architectures:: How to compile Bash for more + than one kind of system from + the same source tree. + +* Installation Names:: How to set the various paths used by the installation. + +* Specifying the System Type:: How to configure Bash for a particular system. + +* Sharing Defaults:: How to share default configuration values among GNU + programs. + +* Operation Controls:: Options recognized by the configuration program. + +* Optional Features:: How to enable and disable optional features when + building Bash. +@end menu + +@node Basic Installation +@section Basic Installation +@cindex installation +@cindex configuration +@cindex Bash installation +@cindex Bash configuration + +These are installation instructions for Bash. + +The simplest way to compile Bash is: + +@enumerate +@item +@code{cd} to the directory containing the source code and type +@samp{./configure} to configure Bash for your system. If you're +using @code{csh} on an old version of System V, you might need to +type @samp{sh ./configure} instead to prevent @code{csh} from trying +to execute @code{configure} itself. + +Running @code{configure} takes some time. +While running, it prints messages telling which features it is +checking for. + +@item +Type @samp{make} to compile Bash and build the @code{bashbug} bug +reporting script. + +@item +Optionally, type @samp{make tests} to run the Bash test suite. + +@item +Type @samp{make install} to install @code{bash} and @code{bashbug}. +This will also install the manual pages and Info file. + +@end enumerate + +The @code{configure} shell script attempts to guess correct +values for various system-dependent variables used during +compilation. It uses those values to create a @file{Makefile} in +each directory of the package (the top directory, the +@file{builtins}, @file{doc}, and @file{support} directories, +each directory under @file{lib}, and several others). It also creates a +@file{config.h} file containing system-dependent definitions. +Finally, it creates a shell script named @code{config.status} that you +can run in the future to recreate the current configuration, a +file @file{config.cache} that saves the results of its tests to +speed up reconfiguring, and a file @file{config.log} containing +compiler output (useful mainly for debugging @code{configure}). +If at some point +@file{config.cache} contains results you don't want to keep, you +may remove or edit it. + +To find out more about the options and arguments that the +@code{configure} script understands, type + +@example +bash-2.04$ ./configure --help +@end example + +@noindent +at the Bash prompt in your Bash source directory. + +If you need to do unusual things to compile Bash, please +try to figure out how @code{configure} could check whether or not +to do them, and mail diffs or instructions to +@email{bash-maintainers@@gnu.org} so they can be +considered for the next release. + +The file @file{configure.in} is used to create @code{configure} +by a program called Autoconf. You only need +@file{configure.in} if you want to change it or regenerate +@code{configure} using a newer version of Autoconf. If +you do this, make sure you are using Autoconf version 2.50 or +newer. + +You can remove the program binaries and object files from the +source code directory by typing @samp{make clean}. To also remove the +files that @code{configure} created (so you can compile Bash for +a different kind of computer), type @samp{make distclean}. + +@node Compilers and Options +@section Compilers and Options + +Some systems require unusual options for compilation or linking +that the @code{configure} script does not know about. You can +give @code{configure} initial values for variables by setting +them in the environment. Using a Bourne-compatible shell, you +can do that on the command line like this: + +@example +CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure +@end example + +On systems that have the @code{env} program, you can do it like this: + +@example +env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure +@end example + +The configuration process uses GCC to build Bash if it +is available. + +@node Compiling For Multiple Architectures +@section Compiling For Multiple Architectures + +You can compile Bash for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of @code{make} that +supports the @code{VPATH} variable, such as GNU @code{make}. +@code{cd} to the +directory where you want the object files and executables to go and run +the @code{configure} script from the source directory. You may need to +supply the @option{--srcdir=PATH} argument to tell @code{configure} where the +source files are. @code{configure} automatically checks for the +source code in the directory that @code{configure} is in and in `..'. + +If you have to use a @code{make} that does not supports the @code{VPATH} +variable, you can compile Bash for one architecture at a +time in the source code directory. After you have installed +Bash for one architecture, use @samp{make distclean} before +reconfiguring for another architecture. + +Alternatively, if your system supports symbolic links, you can use the +@file{support/mkclone} script to create a build tree which has +symbolic links back to each file in the source directory. Here's an +example that creates a build directory in the current directory from a +source directory @file{/usr/gnu/src/bash-2.0}: + +@example +bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 . +@end example + +@noindent +The @code{mkclone} script requires Bash, so you must have already built +Bash for at least one architecture before you can create build +directories for other architectures. + +@node Installation Names +@section Installation Names + +By default, @samp{make install} will install into +@file{/usr/local/bin}, @file{/usr/local/man}, etc. You can +specify an installation prefix other than @file{/usr/local} by +giving @code{configure} the option @option{--prefix=@var{PATH}}, +or by specifying a value for the @code{DESTDIR} @samp{make} +variable when running @samp{make install}. + +You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. +If you give @code{configure} the option +@option{--exec-prefix=@var{PATH}}, @samp{make install} will use +@var{PATH} as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + +@node Specifying the System Type +@section Specifying the System Type + +There may be some features @code{configure} can not figure out +automatically, but need to determine by the type of host Bash +will run on. Usually @code{configure} can figure that +out, but if it prints a message saying it can not guess the host +type, give it the @option{--host=TYPE} option. @samp{TYPE} can +either be a short name for the system type, such as @samp{sun4}, +or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM} +(e.g., @samp{i386-unknown-freebsd4.2}). + +See the file @file{support/config.sub} for the possible +values of each field. + +@node Sharing Defaults +@section Sharing Defaults + +If you want to set default values for @code{configure} scripts to +share, you can create a site shell script called +@code{config.site} that gives default values for variables like +@code{CC}, @code{cache_file}, and @code{prefix}. @code{configure} +looks for @file{PREFIX/share/config.site} if it exists, then +@file{PREFIX/etc/config.site} if it exists. Or, you can set the +@code{CONFIG_SITE} environment variable to the location of the site +script. A warning: the Bash @code{configure} looks for a site script, +but not all @code{configure} scripts do. + +@node Operation Controls +@section Operation Controls + +@code{configure} recognizes the following options to control how it +operates. + +@table @code + +@item --cache-file=@var{file} +Use and save the results of the tests in +@var{file} instead of @file{./config.cache}. Set @var{file} to +@file{/dev/null} to disable caching, for debugging +@code{configure}. + +@item --help +Print a summary of the options to @code{configure}, and exit. + +@item --quiet +@itemx --silent +@itemx -q +Do not print messages saying which checks are being made. + +@item --srcdir=@var{dir} +Look for the Bash source code in directory @var{dir}. Usually +@code{configure} can determine that directory automatically. + +@item --version +Print the version of Autoconf used to generate the @code{configure} +script, and exit. +@end table + +@code{configure} also accepts some other, not widely used, boilerplate +options. @samp{configure --help} prints the complete list. + +@node Optional Features +@section Optional Features + +The Bash @code{configure} has a number of @option{--enable-@var{feature}} +options, where @var{feature} indicates an optional part of Bash. +There are also several @option{--with-@var{package}} options, +where @var{package} is something like @samp{bash-malloc} or @samp{purify}. +To turn off the default use of a package, use +@option{--without-@var{package}}. To configure Bash without a feature +that is enabled by default, use @option{--disable-@var{feature}}. + +Here is a complete list of the @option{--enable-} and +@option{--with-} options that the Bash @code{configure} recognizes. + +@table @code +@item --with-afs +Define if you are using the Andrew File System from Transarc. + +@item --with-bash-malloc +Use the Bash version of +@code{malloc} in @file{lib/malloc/malloc.c}. This is not the same +@code{malloc} that appears in @sc{gnu} libc, but an older version +derived from the 4.2 @sc{bsd} @code{malloc}. This @code{malloc} is +very fast, but wastes some space on each allocation. +This option is enabled by default. +The @file{NOTES} file contains a list of systems for +which this should be turned off, and @code{configure} disables this +option automatically for a number of systems. + +@item --with-curses +Use the curses library instead of the termcap library. This should +be supplied if your system has an inadequate or incomplete termcap +database. + +@item --with-gnu-malloc +A synonym for @code{--with-bash-malloc}. + +@item --with-installed-readline[=@var{PREFIX}] +Define this to make Bash link with a locally-installed version of Readline +rather than the version in @file{lib/readline}. This works only with +Readline 4.3 and later versions. If @var{PREFIX} is @code{yes} or not +supplied, @code{configure} uses the values of the make variables +@code{includedir} and @code{libdir}, which are subdirectories of @code{prefix} +by default, to find the installed version of Readline if it is not in +the standard system include and library directories. +If @var{PREFIX} is @code{no}, Bash links with the version in +@file{lib/readline}. +If @var{PREFIX} is set to any other value, @code{configure} treats it as +a directory pathname and looks for +the installed version of Readline in subdirectories of that directory +(include files in @var{PREFIX}/@code{include} and the library in +@var{PREFIX}/@code{lib}). + +@item --with-purify +Define this to use the Purify memory allocation checker from Rational +Software. + +@item --enable-minimal-config +This produces a shell with minimal features, close to the historical +Bourne shell. +@end table + +There are several @option{--enable-} options that alter how Bash is +compiled and linked, rather than changing run-time features. + +@table @code +@item --enable-largefile +Enable support for @uref{http://www.sas.com/standards/large_file/x_open.20Mar96.html, +large files} if the operating system requires special compiler options +to build programs which can access large files. This is enabled by +default, if the operating system provides large file support. + +@item --enable-profiling +This builds a Bash binary that produces profiling information to be +processed by @code{gprof} each time it is executed. + +@item --enable-static-link +This causes Bash to be linked statically, if @code{gcc} is being used. +This could be used to build a version to use as root's shell. +@end table + +The @samp{minimal-config} option can be used to disable all of +the following options, but it is processed first, so individual +options may be enabled using @samp{enable-@var{feature}}. + +All of the following options except for @samp{disabled-builtins} and +@samp{xpg-echo-default} are +enabled by default, unless the operating system does not provide the +necessary support. + +@table @code +@item --enable-alias +Allow alias expansion and include the @code{alias} and @code{unalias} +builtins (@pxref{Aliases}). + +@item --enable-arith-for-command +Include support for the alternate form of the @code{for} command +that behaves like the C language @code{for} statement +(@pxref{Looping Constructs}). + +@item --enable-array-variables +Include support for one-dimensional array shell variables +(@pxref{Arrays}). + +@item --enable-bang-history +Include support for @code{csh}-like history substitution +(@pxref{History Interaction}). + +@item --enable-brace-expansion +Include @code{csh}-like brace expansion +( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ). +See @ref{Brace Expansion}, for a complete description. + +@item --enable-command-timing +Include support for recognizing @code{time} as a reserved word and for +displaying timing statistics for the pipeline following @code{time} +(@pxref{Pipelines}). +This allows pipelines as well as shell builtins and functions to be timed. + +@item --enable-cond-command +Include support for the @code{[[} conditional command +(@pxref{Conditional Constructs}). + +@item --enable-directory-stack +Include support for a @code{csh}-like directory stack and the +@code{pushd}, @code{popd}, and @code{dirs} builtins +(@pxref{The Directory Stack}). + +@item --enable-disabled-builtins +Allow builtin commands to be invoked via @samp{builtin xxx} +even after @code{xxx} has been disabled using @samp{enable -n xxx}. +See @ref{Bash Builtins}, for details of the @code{builtin} and +@code{enable} builtin commands. + +@item --enable-dparen-arithmetic +Include support for the @code{((@dots{}))} command +(@pxref{Conditional Constructs}). + +@item --enable-extended-glob +Include support for the extended pattern matching features described +above under @ref{Pattern Matching}. + +@item --enable-help-builtin +Include the @code{help} builtin, which displays help on shell builtins and +variables (@pxref{Bash Builtins}). + +@item --enable-history +Include command history and the @code{fc} and @code{history} +builtin commands (@pxref{Bash History Facilities}). + +@item --enable-job-control +This enables the job control features (@pxref{Job Control}), +if the operating system supports them. + +@item --enable-multibyte +This enables support for multibyte characters if the operating +system provides the necessary support. + +@item --enable-net-redirections +This enables the special handling of filenames of the form +@code{/dev/tcp/@var{host}/@var{port}} and +@code{/dev/udp/@var{host}/@var{port}} +when used in redirections (@pxref{Redirections}). + +@item --enable-process-substitution +This enables process substitution (@pxref{Process Substitution}) if +the operating system provides the necessary support. + +@item --enable-prompt-string-decoding +Turn on the interpretation of a number of backslash-escaped characters +in the @env{$PS1}, @env{$PS2}, @env{$PS3}, and @env{$PS4} prompt +strings. See @ref{Printing a Prompt}, for a complete list of prompt +string escape sequences. + +@item --enable-progcomp +Enable the programmable completion facilities +(@pxref{Programmable Completion}). +If Readline is not enabled, this option has no effect. + +@item --enable-readline +Include support for command-line editing and history with the Bash +version of the Readline library (@pxref{Command Line Editing}). + +@item --enable-restricted +Include support for a @dfn{restricted shell}. If this is enabled, Bash, +when called as @code{rbash}, enters a restricted mode. See +@ref{The Restricted Shell}, for a description of restricted mode. + +@item --enable-select +Include the @code{select} builtin, which allows the generation of simple +menus (@pxref{Conditional Constructs}). + +@item --enable-usg-echo-default +A synonym for @code{--enable-xpg-echo-default}. + +@item --enable-xpg-echo-default +Make the @code{echo} builtin expand backslash-escaped characters by default, +without requiring the @option{-e} option. +This sets the default value of the @code{xpg_echo} shell option to @code{on}, +which makes the Bash @code{echo} behave more like the version specified in +the Single Unix Specification, version 2. +@xref{Bash Builtins}, for a description of the escape sequences that +@code{echo} recognizes. + +@end table + +The file @file{config-top.h} contains C Preprocessor +@samp{#define} statements for options which are not settable from +@code{configure}. +Some of these are not meant to be changed; beware of the consequences if +you do. +Read the comments associated with each definition for more +information about its effect. + +@node Reporting Bugs +@appendix Reporting Bugs + +Please report all bugs you find in Bash. +But first, you should +make sure that it really is a bug, and that it appears in the latest +version of Bash. +The latest version of Bash is always available for FTP from +@uref{ftp://ftp.gnu.org/pub/bash/}. + +Once you have determined that a bug actually exists, use the +@code{bashbug} command to submit a bug report. +If you have a fix, you are encouraged to mail that as well! +Suggestions and `philosophical' bug reports may be mailed +to @email{bug-bash@@gnu.org} or posted to the Usenet +newsgroup @code{gnu.bash.bug}. + +All bug reports should include: +@itemize @bullet +@item +The version number of Bash. +@item +The hardware and operating system. +@item +The compiler used to compile Bash. +@item +A description of the bug behaviour. +@item +A short script or `recipe' which exercises the bug and may be used +to reproduce it. +@end itemize + +@noindent +@code{bashbug} inserts the first three items automatically into +the template it provides for filing a bug report. + +Please send all reports concerning this manual to +@email{chet@@po.CWRU.Edu}. + +@node Major Differences From The Bourne Shell +@appendix Major Differences From The Bourne Shell + +Bash implements essentially the same grammar, parameter and +variable expansion, redirection, and quoting as the Bourne Shell. +Bash uses the @sc{posix} 1003.2 standard as the specification of +how these features are to be implemented. There are some +differences between the traditional Bourne shell and Bash; this +section quickly details the differences of significance. A +number of these differences are explained in greater depth in +previous sections. +This section uses the version of @code{sh} included in SVR4.2 as +the baseline reference. + +@itemize @bullet + +@item +Bash is @sc{posix}-conformant, even where the @sc{posix} specification +differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}). + +@item +Bash has multi-character invocation options (@pxref{Invoking Bash}). + +@item +Bash has command-line editing (@pxref{Command Line Editing}) and +the @code{bind} builtin. + +@item +Bash provides a programmable word completion mechanism +(@pxref{Programmable Completion}), and two builtin commands, +@code{complete} and @code{compgen}, to manipulate it. + +@item +Bash has command history (@pxref{Bash History Facilities}) and the +@code{history} and @code{fc} builtins to manipulate it. + +@item +Bash implements @code{csh}-like history expansion +(@pxref{History Interaction}). + +@item +Bash has one-dimensional array variables (@pxref{Arrays}), and the +appropriate variable expansions and assignment syntax to use them. +Several of the Bash builtins take options to act on arrays. +Bash provides a number of built-in array variables. + +@item +The @code{$'@dots{}'} quoting syntax, which expands ANSI-C +backslash-escaped characters in the text between the single quotes, +is supported (@pxref{ANSI-C Quoting}). + +@item +Bash supports the @code{$"@dots{}"} quoting syntax to do +locale-specific translation of the characters between the double +quotes. The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings} +invocation options list the translatable strings found in a script +(@pxref{Locale Translation}). + +@item +Bash implements the @code{!} keyword to negate the return value of +a pipeline (@pxref{Pipelines}). +Very useful when an @code{if} statement needs to act only if a test fails. + +@item +Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}). +The display of the timing statistics may be controlled with the +@env{TIMEFORMAT} variable. + +@item +Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))} +arithmetic for command, similar to the C language (@pxref{Looping Constructs}). + +@item +Bash includes the @code{select} compound command, which allows the +generation of simple menus (@pxref{Conditional Constructs}). + +@item +Bash includes the @code{[[} compound command, which makes conditional +testing part of the shell grammar (@pxref{Conditional Constructs}). + +@item +Bash includes brace expansion (@pxref{Brace Expansion}) and tilde +expansion (@pxref{Tilde Expansion}). + +@item +Bash implements command aliases and the @code{alias} and @code{unalias} +builtins (@pxref{Aliases}). + +@item +Bash provides shell arithmetic, the @code{((} compound command +(@pxref{Conditional Constructs}), +and arithmetic expansion (@pxref{Shell Arithmetic}). + +@item +Variables present in the shell's initial environment are automatically +exported to child processes. The Bourne shell does not normally do +this unless the variables are explicitly marked using the @code{export} +command. + +@item +Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%} +and @samp{##} expansions to remove leading or trailing substrings from +variable values (@pxref{Shell Parameter Expansion}). + +@item +The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}}, +is supported (@pxref{Shell Parameter Expansion}). + +@item +The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}}, +which expands to the substring of @code{var}'s value of length +@var{length}, beginning at @var{offset}, is present +(@pxref{Shell Parameter Expansion}). + +@item +The expansion +@code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}}, +which matches @var{pattern} and replaces it with @var{replacement} in +the value of @code{var}, is available (@pxref{Shell Parameter Expansion}). + +@item +The expansion @code{$@{!@var{prefix@}*}} expansion, which expands to +the names of all shell variables whose names begin with @var{prefix}, +is available (@pxref{Shell Parameter Expansion}). + +@item +Bash has @var{indirect} variable expansion using @code{$@{!word@}} +(@pxref{Shell Parameter Expansion}). + +@item +Bash can expand positional parameters beyond @code{$9} using +@code{$@{@var{num}@}}. + +@item +The @sc{posix} @code{$()} form of command substitution +is implemented (@pxref{Command Substitution}), +and preferred to the Bourne shell's @code{``} (which +is also implemented for backwards compatibility). + +@item +Bash has process substitution (@pxref{Process Substitution}). + +@item +Bash automatically assigns variables that provide information about the +current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host +(@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}), +and the instance of Bash that is running (@env{BASH}, +@env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables}, +for details. + +@item +The @env{IFS} variable is used to split only the results of expansion, +not all words (@pxref{Word Splitting}). +This closes a longstanding shell security hole. + +@item +Bash implements the full set of @sc{posix} 1003.2 filename expansion operators, +including @var{character classes}, @var{equivalence classes}, and +@var{collating symbols} (@pxref{Filename Expansion}). + +@item +Bash implements extended pattern matching features when the @code{extglob} +shell option is enabled (@pxref{Pattern Matching}). + +@item +It is possible to have a variable and a function with the same name; +@code{sh} does not separate the two name spaces. + +@item +Bash functions are permitted to have local variables using the +@code{local} builtin, and thus useful recursive functions may be written +(@pxref{Bash Builtins}). + +@item +Variable assignments preceding commands affect only that command, even +builtins and functions (@pxref{Environment}). +In @code{sh}, all variable assignments +preceding commands are global unless the command is executed from the +file system. + +@item +Bash performs filename expansion on filenames specified as operands +to input and output redirection operators (@pxref{Redirections}). + +@item +Bash contains the @samp{<>} redirection operator, allowing a file to be +opened for both reading and writing, and the @samp{&>} redirection +operator, for directing standard output and standard error to the same +file (@pxref{Redirections}). + +@item +Bash treats a number of filenames specially when they are +used in redirection operators (@pxref{Redirections}). + +@item +Bash can open network connections to arbitrary machines and services +with the redirection operators (@pxref{Redirections}). + +@item +The @code{noclobber} option is available to avoid overwriting existing +files with output redirection (@pxref{The Set Builtin}). +The @samp{>|} redirection operator may be used to override @code{noclobber}. + +@item +The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins}) +each take @option{-L} and @option{-P} options to switch between logical and +physical modes. + +@item +Bash allows a function to override a builtin with the same name, and provides +access to that builtin's functionality within the function via the +@code{builtin} and @code{command} builtins (@pxref{Bash Builtins}). + +@item +The @code{command} builtin allows selective disabling of functions +when command lookup is performed (@pxref{Bash Builtins}). + +@item +Individual builtins may be enabled or disabled using the @code{enable} +builtin (@pxref{Bash Builtins}). + +@item +The Bash @code{exec} builtin takes additional options that allow users +to control the contents of the environment passed to the executed +command, and what the zeroth argument to the command is to be +(@pxref{Bourne Shell Builtins}). + +@item +Shell functions may be exported to children via the environment +using @code{export -f} (@pxref{Shell Functions}). + +@item +The Bash @code{export}, @code{readonly}, and @code{declare} builtins can +take a @option{-f} option to act on shell functions, a @option{-p} option to +display variables with various attributes set in a format that can be +used as shell input, a @option{-n} option to remove various variable +attributes, and @samp{name=value} arguments to set variable attributes +and values simultaneously. + +@item +The Bash @code{hash} builtin allows a name to be associated with +an arbitrary filename, even when that filename cannot be found by +searching the @env{$PATH}, using @samp{hash -p} +(@pxref{Bourne Shell Builtins}). + +@item +Bash includes a @code{help} builtin for quick reference to shell +facilities (@pxref{Bash Builtins}). + +@item +The @code{printf} builtin is available to display formatted output +(@pxref{Bash Builtins}). + +@item +The Bash @code{read} builtin (@pxref{Bash Builtins}) +will read a line ending in @samp{\} with +the @option{-r} option, and will use the @env{REPLY} variable as a +default if no non-option arguments are supplied. +The Bash @code{read} builtin +also accepts a prompt string with the @option{-p} option and will use +Readline to obtain the line when given the @option{-e} option. +The @code{read} builtin also has additional options to control input: +the @option{-s} option will turn off echoing of input characters as +they are read, the @option{-t} option will allow @code{read} to time out +if input does not arrive within a specified number of seconds, the +@option{-n} option will allow reading only a specified number of +characters rather than a full line, and the @option{-d} option will read +until a particular character rather than newline. + +@item +The @code{return} builtin may be used to abort execution of scripts +executed with the @code{.} or @code{source} builtins +(@pxref{Bourne Shell Builtins}). + +@item +Bash includes the @code{shopt} builtin, for finer control of shell +optional capabilities (@pxref{Bash Builtins}), and allows these options +to be set and unset at shell invocation (@pxref{Invoking Bash}). + +@item +Bash has much more optional behavior controllable with the @code{set} +builtin (@pxref{The Set Builtin}). + +@item +The @code{test} builtin (@pxref{Bourne Shell Builtins}) +is slightly different, as it implements the @sc{posix} algorithm, +which specifies the behavior based on the number of arguments. + +@item +The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a +@code{DEBUG} pseudo-signal specification, similar to @code{EXIT}. +Commands specified with a @code{DEBUG} trap are executed before every +simple command, @code{for} command, @code{case} command, +@code{select} command, every arithmetic @code{for} command, and before +the first command executes in a shell function. +The @code{DEBUG} trap is not inherited by shell functions unless the +function has been given the @code{trace} attribute or the +@code{functrace} option has been enabled using the @code{shopt} builtin. +The @code{extdebug} shell option has additional effects on the +@code{DEBUG} trap. + +The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an +@code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}. +Commands specified with an @code{ERR} trap are executed after a simple +command fails, with a few exceptions. +The @code{ERR} trap is not inherited by shell functions unless the +@code{-o errtrace} option to the @code{set} builtin is enabled. + +The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a +@code{RETURN} pseudo-signal specification, similar to +@code{EXIT} and @code{DEBUG}. +Commands specified with an @code{RETURN} trap are executed before +execution resumes after a shell function or a shell script executed with +@code{.} or @code{source} returns. +The @code{RETURN} trap is not inherited by shell functions. + +@item +The Bash @code{type} builtin is more extensive and gives more information +about the names it finds (@pxref{Bash Builtins}). + +@item +The Bash @code{umask} builtin permits a @option{-p} option to cause +the output to be displayed in the form of a @code{umask} command +that may be reused as input (@pxref{Bourne Shell Builtins}). + +@item +Bash implements a @code{csh}-like directory stack, and provides the +@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it +(@pxref{The Directory Stack}). +Bash also makes the directory stack visible as the value of the +@env{DIRSTACK} shell variable. + +@item +Bash interprets special backslash-escaped characters in the prompt +strings when interactive (@pxref{Printing a Prompt}). + +@item +The Bash restricted mode is more useful (@pxref{The Restricted Shell}); +the SVR4.2 shell restricted mode is too limited. + +@item +The @code{disown} builtin can remove a job from the internal shell +job table (@pxref{Job Control Builtins}) or suppress the sending +of @code{SIGHUP} to a job when the shell exits as the result of a +@code{SIGHUP}. + +@item +The SVR4.2 shell has two privilege-related builtins +(@code{mldmode} and @code{priv}) not present in Bash. + +@item +Bash does not have the @code{stop} or @code{newgrp} builtins. + +@item +Bash does not use the @env{SHACCT} variable or perform shell accounting. + +@item +The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses +@env{TMOUT}. + +@end itemize + +@noindent +More features unique to Bash may be found in @ref{Bash Features}. + + +@appendixsec Implementation Differences From The SVR4.2 Shell + +Since Bash is a completely new implementation, it does not suffer from +many of the limitations of the SVR4.2 shell. For instance: + +@itemize @bullet + +@item +Bash does not fork a subshell when redirecting into or out of +a shell control structure such as an @code{if} or @code{while} +statement. + +@item +Bash does not allow unbalanced quotes. The SVR4.2 shell will silently +insert a needed closing quote at @code{EOF} under certain circumstances. +This can be the cause of some hard-to-find errors. + +@item +The SVR4.2 shell uses a baroque memory management scheme based on +trapping @code{SIGSEGV}. If the shell is started from a process with +@code{SIGSEGV} blocked (e.g., by using the @code{system()} C library +function call), it misbehaves badly. + +@item +In a questionable attempt at security, the SVR4.2 shell, +when invoked without the @option{-p} option, will alter its real +and effective @sc{uid} and @sc{gid} if they are less than some +magic threshold value, commonly 100. +This can lead to unexpected results. + +@item +The SVR4.2 shell does not allow users to trap @code{SIGSEGV}, +@code{SIGALRM}, or @code{SIGCHLD}. + +@item +The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK}, +@env{PATH}, @env{PS1}, or @env{PS2} variables to be unset. + +@item +The SVR4.2 shell treats @samp{^} as the undocumented equivalent of +@samp{|}. + +@item +Bash allows multiple option arguments when it is invoked (@code{-x -v}); +the SVR4.2 shell allows only one option argument (@code{-xv}). In +fact, some versions of the shell dump core if the second argument begins +with a @samp{-}. + +@item +The SVR4.2 shell exits a script if any builtin fails; Bash exits +a script only if one of the @sc{posix} 1003.2 special builtins fails, and +only for certain failures, as enumerated in the @sc{posix} 1003.2 standard. + +@item +The SVR4.2 shell behaves differently when invoked as @code{jsh} +(it turns on job control). +@end itemize + +@node Copying This Manual +@appendix Copying This Manual + +@menu +* GNU Free Documentation License:: License for copying this manual. +@end menu + +@include fdl.texi + +@node Builtin Index +@unnumbered Index of Shell Builtin Commands +@printindex bt + +@node Reserved Word Index +@unnumbered Index of Shell Reserved Words +@printindex rw + +@node Variable Index +@unnumbered Parameter and Variable Index +@printindex vr + +@node Function Index +@unnumbered Function Index +@printindex fn + +@node Concept Index +@unnumbered Concept Index +@printindex cp + +@bye diff --git a/doc/builtins.0 b/doc/builtins.0 index e7dd3c8d..8e042265 100644 --- a/doc/builtins.0 +++ b/doc/builtins.0 @@ -474,12 +474,12 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS to _l_a_s_t is selected from the history list. _F_i_r_s_t and _l_a_s_t may be specified as a string (to locate the last command beginning with that string) or as a number (an index into the history - list, where a negative number is used as an offset from the cur- - rent command number). If _l_a_s_t is not specified it is set to the - current command for listing (so that ``fc -l -10'' prints the - last 10 commands) and to _f_i_r_s_t otherwise. If _f_i_r_s_t is not spec- - ified it is set to the previous command for editing and -16 for - listing. + list, where a negative number is used as an offset from the + current command number). If _l_a_s_t is not specified it is set to + the current command for listing (so that ``fc -l -10'' prints + the last 10 commands) and to _f_i_r_s_t otherwise. If _f_i_r_s_t is not + specified it is set to the previous command for editing and -16 + for listing. The --nn option suppresses the command numbers when listing. The --rr option reverses the order of the commands. If the --ll option @@ -1043,8 +1043,8 @@ BBAASSHH BBUUIILLTTIINN CCOOMMMMAANNDDSS formed. cchheecckkwwiinnssiizzee If set, bbaasshh checks the window size after each command - and, if necessary, updates the values of LLIINNEESS and CCOOLL-- - UUMMNNSS. + and, if necessary, updates the values of LLIINNEESS and + CCOOLLUUMMNNSS. ccmmddhhiisstt If set, bbaasshh attempts to save all lines of a multiple- line command in the same history entry. This allows easy re-editing of multi-line commands. diff --git a/doc/builtins.ps b/doc/builtins.ps index ba6b767c..0a877ce4 100644 --- a/doc/builtins.ps +++ b/doc/builtins.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.18.1 -%%CreationDate: Tue Jun 29 10:37:28 2004 +%%CreationDate: Mon Jul 19 16:04:16 2004 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic diff --git a/doc/mkinstall-tmp b/doc/mkinstall-tmp new file mode 100755 index 00000000..37d78631 --- /dev/null +++ b/doc/mkinstall-tmp @@ -0,0 +1,44 @@ +#! /bin/sh +# +# mkinstall - make the INSTALL file from the `Installing Bash' node of the +# texinfo manual +# + +NODE="Installing Bash" +SUBNODE="Basic Installation" +TEXI=bashref.texi +TMPINFO=temp.info +TMPOUT=INSTALL.tmp + +OUT=${1:-INSTALL} + +trap 'rm -f $TMPOUT $TMPINFO $OUT; trap '' 0; exit 1' 1 2 3 6 15 +#trap 'rm -f $TMPOUT $TMPINFO' 0 + +# create an info file without paragraph indentation +makeinfo --no-split -I../lib/readline/doc --paragraph-indent 0 -o $TMPINFO $TEXI + +# write out the text from the `Installing Bash' node to INSTALL.tmp +info --file $TMPINFO --node "$NODE" --subnodes --output $TMPOUT + +exit 0 +# remove the info traversal information and the initial menu, and squeeze +# out multiple consecutive blank lines like `cat -s' +awk 'BEGIN { printline = 0; newlines = 0; } + +/^File: '$TMPINFO'/ { next; } + +/^'"$SUBNODE"'/ { printline = 1; } + +/^$/ { if (printline) newlines = 1; next; } + +/$/ { if (printline) { + if (newlines) { + printf "\n"; + newlines = 0; + } + print $0; + } + }' < $TMPOUT > $OUT + +exit 0 diff --git a/doc/rbash.0 b/doc/rbash.0 index 2c741291..9b05e0f3 100644 --- a/doc/rbash.0 +++ b/doc/rbash.0 @@ -30,8 +30,8 @@ RREESSTTRRIICCTTEEDD SSHHEELLLL +o parsing the value of SSHHEELLLLOOPPTTSS from the shell environment at startup - +o redirecting output using the >, >|, <>, >&, &>, and >> redirect- - ion operators + +o redirecting output using the >, >|, <>, >&, &>, and >> redirec- + tion operators +o using the eexxeecc builtin command to replace the shell with another command diff --git a/doc/rbash.ps b/doc/rbash.ps index 5174faf7..3ccaa697 100644 --- a/doc/rbash.ps +++ b/doc/rbash.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.18.1 -%%CreationDate: Tue Jun 29 10:37:29 2004 +%%CreationDate: Mon Jul 19 16:04:16 2004 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%DocumentSuppliedResources: procset grops 1.18 1 diff --git a/doc/texinfo.tex b/doc/texinfo.tex index 555a0770..1d74826d 100644..120000 --- a/doc/texinfo.tex +++ b/doc/texinfo.tex @@ -1,6688 +1 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2003-02-03.16} -% -% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -% -% This texinfo.tex file is free software; you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2, or (at -% your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this texinfo.tex file; see the file COPYING. If not, write -% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -% Boston, MA 02111-1307, USA. -% -% In other words, you are welcome to use, share and improve this program. -% You are forbidden to forbid anyone else to use, share and improve -% what you give them. Help stamp out software-hoarding! -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex -% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) -% ftp://tug.org/tex/texinfo.tex -% (and all CTAN mirrors, see http://www.ctan.org), -% and /home/gd/gnu/doc/texinfo.tex on the GNU machines. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. -% -% The texinfo.tex in any given Texinfo distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -\message{Basics,} -\chardef\other=12 - -% We never want plain's outer \+ definition in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some parts of plain tex whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexplus=+ -\let\ptexrbrace=\} -\let\ptexstar=\* -\let\ptext=\t - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi -\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi - -% In some macros, we cannot use the `\? notation---the left quote is -% in some cases the escape char. -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dotChar = `\. -\chardef\equalChar = `\= -\chardef\exclamChar= `\! -\chardef\questChar = `\? -\chardef\semiChar = `\; -\chardef\spaceChar = `\ % -\chardef\underChar = `\_ - -% Ignore a token. -% -\def\gobble#1{} - -% True if #1 is the empty string, i.e., called like `\ifempty{}'. -% -\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}% -\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}% - -% Hyphenation fixes. -\hyphenation{ap-pen-dix} -\hyphenation{mini-buf-fer mini-buf-fers} -\hyphenation{eshell} -\hyphenation{white-space} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\undefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines\maxdimen -}% - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% For @cropmarks command. -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \escapechar = `\\ % use backslash in output files. - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingxxx.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 2\baselineskip - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \normalturnoffactive - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg#1{% - \let\next = #1% - \begingroup - \obeylines - \futurelet\temp\parseargx -} - -% If the next token is an obeyed space (from an @example environment or -% the like), remove it and recurse. Otherwise, we're done. -\def\parseargx{% - % \obeyedspace is defined far below, after the definition of \sepspaces. - \ifx\obeyedspace\temp - \expandafter\parseargdiscardspace - \else - \expandafter\parseargline - \fi -} - -% Remove a single space (as the delimiter token to the macro call). -{\obeyspaces % - \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - % - % First remove any @c comment, then any @comment. - % Result of each macro is put in \toks0. - \argremovec #1\c\relax % - \expandafter\argremovecomment \the\toks0 \comment\relax % - % - % Call the caller's macro, saved as \next in \parsearg. - \expandafter\next\expandafter{\the\toks0}% - }% -} - -% Since all \c{,omment} does is throw away the argument, we can let TeX -% do that for us. The \relax here is matched by the \relax in the call -% in \parseargline; it could be more or less anything, its purpose is -% just to delimit the argument to the \c. -\def\argremovec#1\c#2\relax{\toks0 = {#1}} -\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} - -% \argremovec{,omment} might leave us with trailing spaces, though; e.g., -% @end itemize @c foo -% will have two active spaces as part of the argument with the -% `itemize'. Here we remove all active spaces from #1, and assign the -% result to \toks0. -% -% This loses if there are any *other* active characters besides spaces -% in the argument -- _ ^ +, for example -- since they get expanded. -% Fortunately, Texinfo does not define any such commands. (If it ever -% does, the catcode of the characters in questionwill have to be changed -% here.) But this means we cannot call \removeactivespaces as part of -% \argremovec{,omment}, since @c uses \parsearg, and thus the argument -% that \parsearg gets might well have any character at all in it. -% -\def\removeactivespaces#1{% - \begingroup - \ignoreactivespaces - \edef\temp{#1}% - \global\toks0 = \expandafter{\temp}% - \endgroup -} - -% Change the active space to expand to nothing. -% -\begingroup - \obeyspaces - \gdef\ignoreactivespaces{\obeyspaces\let =\empty} -\endgroup - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -%% These are used to keep @begin/@end levels from running away -%% Call \inENV within environments (after a \begingroup) -\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} -\def\ENVcheck{% -\ifENV\errmessage{Still within an environment; press RETURN to continue} -\endgroup\fi} % This is not perfect, but it should reduce lossage - -% @begin foo is the same as @foo, for now. -\newhelp\EMsimple{Press RETURN to continue.} - -\outer\def\begin{\parsearg\beginxxx} - -\def\beginxxx #1{% -\expandafter\ifx\csname #1\endcsname\relax -{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else -\csname #1\endcsname\fi} - -% @end foo executes the definition of \Efoo. -% -\def\end{\parsearg\endxxx} -\def\endxxx #1{% - \removeactivespaces{#1}% - \edef\endthing{\the\toks0}% - % - \expandafter\ifx\csname E\endthing\endcsname\relax - \expandafter\ifx\csname \endthing\endcsname\relax - % There's no \foo, i.e., no ``environment'' foo. - \errhelp = \EMsimple - \errmessage{Undefined command `@end \endthing'}% - \else - \unmatchedenderror\endthing - \fi - \else - % Everything's ok; the right environment has been started. - \csname E\endthing\endcsname - \fi -} - -% There is an environment #1, but it hasn't been started. Give an error. -% -\def\unmatchedenderror#1{% - \errhelp = \EMsimple - \errmessage{This `@end #1' doesn't have a matching `@#1'}% -} - -% Define the control sequence \E#1 to give an unmatched @end error. -% -\def\defineunmatchedend#1{% - \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% -} - - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt\char64}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt\char123}} -\def\myrbrace {{\tt\char125}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux file. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ptexi - \else\ifx\temp\jmacro \j - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=3000 } - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=3000 } - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\def\group{\begingroup - \ifnum\catcode13=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - % - % The \vtop we start below produces a box with normal height and large - % depth; thus, TeX puts \baselineskip glue before it, and (when the - % next line of text is done) \lineskip glue after it. (See p.82 of - % the TeXbook.) Thus, space below is not quite equal to space - % above. But it's pretty close. - \def\Egroup{% - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \copy\groupbox - \endgroup % End the \group. - }% - % - \setbox\groupbox = \vtop\bgroup - % We have to put a strut on the last line in case the @group is in - % the midst of an example, rather than completely enclosing it. - % Otherwise, the interline space between the last line of the group - % and the first line afterwards is too small. But we can't put the - % strut in \Egroup, since there it would be on a line by itself. - % Hence this just inserts a strut at the beginning of each line. - \everypar = {\strut}% - % - % Since we have a strut on every line, we don't need any of TeX's - % normal interline spacing. - \offinterlineskip - % - % OK, but now we have to do something about blank - % lines in the input in @example-like environments, which normally - % just turn into \lisppar, which will insert no space now that we've - % turned off the interline space. Simplest is to make them be an - % empty paragraph. - \ifx\par\lisppar - \edef\par{\leavevmode \par}% - % - % Reset ^^M's definition to new definition of \par. - \obeylines - \fi - % - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -\def\need{\parsearg\needx} - -% Old definition--didn't work. -%\def\needx #1{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak -%\prevdepth=-1000pt -%}} - -\def\needx#1{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break - -\let\br = \par - -% @dots{} output an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in a typewriter -% font as three actual period characters. -% -\def\dots{% - \leavevmode - \hbox to 1.5em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \leavevmode - \hbox to 2em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% - \spacefactor=3000 -} - - -% @page forces the start of a new page -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\def\exdent{\parsearg\exdentyyy} -\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} - -% This defn is used inside nofill environments such as @example. -\def\nofillexdent{\parsearg\nofillexdentyyy} -\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount -\leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @include file insert text of that file as input. -% Allow normal characters that we make active in the argument (a file name). -\def\include{\begingroup - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \parsearg\includezzz} -% Restore active chars for included file. -\def\includezzz#1{\endgroup\begingroup - % Read the included file in a group so nested @include's work. - \def\thisfile{#1}% - \let\value=\expandablevalue - \input\thisfile -\endgroup} - -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\def\center{\parsearg\docenter} -\def\docenter#1{{% - \ifhmode \hfil\break \fi - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{\hfil \ignorespaces#1\unskip \hfil}% - \ifhmode \break \fi -}} - -% @sp n outputs n lines of vertical space - -\def\sp{\parsearg\spxxx} -\def\spxxx #1{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% We cannot implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\def\paragraphindent{\parsearg\doparagraphindent} -\def\doparagraphindent#1{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\def\exampleindent{\parsearg\doexampleindent} -\def\doexampleindent#1{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% We don't use $'s directly in the definition of \math because we need -% to set catcodes according to plain TeX first, to allow for subscripts, -% superscripts, special math chars, etc. -% -\let\implicitmath = $%$ font-lock fix -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ within @math be active (mathcode "8000), and distinguish by seeing -% if the current family is \slfam, which is what @var uses. -% -{\catcode\underChar = \active -\gdef\mathunderscore{% - \catcode\underChar=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% -}} -% -% Another complication: we want \\ (and @\) to output a \ character. -% FYI, plain.tex uses \\ as a temporary control sequence (why?), but -% this is not advertised and we don't care. Texinfo does not -% otherwise define @\. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathcode`\_="8000 \mathunderscore - \let\\ = \mathbackslash - \mathactive - \implicitmath\finishmath} -\def\finishmath#1{#1\implicitmath\Etex} - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an -% argument to a command which set the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - } -} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{\implicitmath\ptexbullet\implicitmath} -\def\minus{\implicitmath-\implicitmath} - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \iflinks - \readauxfile - \fi % \openindices needs to do some work in any case. - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - % Just to be on the safe side, close the input stream before the \input. - \openin 1 texinfo.cnf - \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi - \closein1 - \temp - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -\ifx\pdfoutput\undefined - \pdffalse - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\linkcolor = \relax - \let\pdfmakeoutlines = \relax -\else - \pdftrue - \pdfoutput = 1 - \input pdfcolor - \def\dopdfimage#1#2#3{% - \def\imagewidth{#2}% - \def\imageheight{#3}% - % without \immediate, pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifx\empty\imagewidth\else width \imagewidth \fi - \ifx\empty\imageheight\else height \imageheight \fi - \ifnum\pdftexversion<13 - #1.pdf% - \else - {#1.pdf}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}} - \def\pdfmkpgn#1{#1} - \let\linkcolor = \Blue % was Cyan, but that seems light? - \def\endlink{\Black\pdfendlink} - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - \def\pdfmakeoutlines{{% - \openin 1 \jobname.toc - \ifeof 1\else\begingroup - \closein 1 - % Thanh's hack / proper braces in bookmarks - \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace - \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace - % - \def\chapentry ##1##2##3{} - \def\secentry ##1##2##3##4{\advancenumber{chap##2}} - \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} - \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} - \let\appendixentry = \chapentry - \let\unnumbchapentry = \chapentry - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry - \input \jobname.toc - \def\chapentry ##1##2##3{% - \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} - \def\secentry ##1##2##3##4{% - \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} - \def\subsecentry ##1##2##3##4##5{% - \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} - \def\subsubsecentry ##1##2##3##4##5##6{% - \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} - \let\appendixentry = \chapentry - \let\unnumbchapentry = \chapentry - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry - % - % Make special characters normal for writing to the pdf file. - % - \indexnofonts - \let\tt=\relax - \turnoffactive - \input \jobname.toc - \endgroup\fi - }} - \def\makelinks #1,{% - \def\params{#1}\def\E{END}% - \ifx\params\E - \let\nextmakelinks=\relax - \else - \let\nextmakelinks=\makelinks - \ifnum\lnkcount>0,\fi - \picknum{#1}% - \startlink attr{/Border [0 0 0]} - goto name{\pdfmkpgn{\the\pgn}}% - \linkcolor #1% - \advance\lnkcount by 1% - \endlink - \fi - \nextmakelinks - } - \def\picknum#1{\expandafter\pn#1} - \def\pn#1{% - \def\p{#1}% - \ifx\p\lbrace - \let\nextpn=\ppn - \else - \let\nextpn=\ppnn - \def\first{#1} - \fi - \nextpn - } - \def\ppn#1{\pgn=#1\gobble} - \def\ppnn{\pgn=\first} - \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \ifx\p\space\else\addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \fi - \nextsp} - \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - \def\pdfurl#1{% - \begingroup - \normalturnoffactive\def\@{@}% - \let\value=\expandablevalue - \leavevmode\Red - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - % #1 - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS| - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \linkcolor #1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\fi % \ifx\pdfoutput - - -\message{fonts,} -% Font-change commands. - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf analogous to plain's \rm, etc. -\newfam\sffam -\def\sf{\fam=\sffam \tensf} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this one. -\def\ttsl{\tenttsl} - -% Default leading. -\newdimen\textleading \textleading = 13.2pt - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -\def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -\newcount\mainmagstep -\ifx\bigger\relax - % not really supported. - \mainmagstep=\magstep1 - \setfont\textrm\rmshape{12}{1000} - \setfont\texttt\ttshape{12}{1000} -\else - \mainmagstep=\magstephalf - \setfont\textrm\rmshape{10}{\mainmagstep} - \setfont\texttt\ttshape{10}{\mainmagstep} -\fi -% Instead of cmb10, you may want to use cmbx10. -% cmbx10 is a prettier font on its own, but cmb10 -% looks better when embedded in a line with cmr10 -% (in Bob's opinion). -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun, etc. -\setfont\defbf\bxshape{10}{\magstep1} %was 1314 -\setfont\deftt\ttshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\setfont\smallrm\rmshape{9}{1000} -\setfont\smalltt\ttshape{9}{1000} -\setfont\smallbf\bfshape{10}{900} -\setfont\smallit\itshape{9}{1000} -\setfont\smallsl\slshape{9}{1000} -\setfont\smallsf\sfshape{9}{1000} -\setfont\smallsc\scshape{10}{900} -\setfont\smallttsl\ttslshape{10}{900} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 - -% Fonts for small examples (8pt). -\setfont\smallerrm\rmshape{8}{1000} -\setfont\smallertt\ttshape{8}{1000} -\setfont\smallerbf\bfshape{10}{800} -\setfont\smallerit\itshape{8}{1000} -\setfont\smallersl\slshape{8}{1000} -\setfont\smallersf\sfshape{8}{1000} -\setfont\smallersc\scshape{10}{800} -\setfont\smallerttsl\ttslshape{10}{800} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 - -% Fonts for title page: -\setfont\titlerm\rmbshape{12}{\magstep3} -\setfont\titleit\itbshape{10}{\magstep4} -\setfont\titlesl\slbshape{10}{\magstep4} -\setfont\titlett\ttbshape{12}{\magstep3} -\setfont\titlettsl\ttslshape{10}{\magstep4} -\setfont\titlesf\sfbshape{17}{\magstep1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\authorrm{\secrm} -\def\authortt{\sectt} - -% Chapter (and unnumbered) fonts (17.28pt). -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{17}{1000} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -% Section fonts (14.4pt). -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% Subsection fonts (13.15pt). -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{1315} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{\magstep1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 -% The smallcaps and symbol fonts should actually be scaled \magstep1.5, -% but that is not a standard magnification. - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this so that font changes will continue to work -% in math mode, where it is the current \fam that is relevant in most -% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam -% \tenbf}, for example. By redefining \tenbf, we obviate the need to -% redefine \bf itself. -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rm #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \resetmathfonts \setleading{9.5pt}} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \smallerfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% -% I wish we used A4 paper on this side of the Atlantic. -% -% --karl, 24jan03. - - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts - -% Define these so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bxshape{12}{1000} -\setfont\shortcontsl\slshape{12}{1000} -\setfont\shortconttt\ttshape{12}{1000} - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} -\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} -\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\var=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic -\let\cite=\smartslanted - -\def\b#1{{\bf #1}} -\let\strong=\b - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\frenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - } -\catcode`@=\other - -\def\t#1{% - {\tt \rawbackslash \frenchspacing #1}% - \null -} -\let\ttfont=\t -\def\samp#1{`\tclose{#1}'\null} -\setfont\keyrm\rmshape{8}{1000} -\font\keysy=cmsy9 -\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% - \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{\angleright}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @file, @option are the same as @samp. -\let\file=\samp -\let\option=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \frenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in \code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active - \catcode`\_=\active - % - \global\def\code{\begingroup - \catcode`\-=\active \let-\codedash - \catcode`\_=\active \let_\codeunder - \codex - } - % - % If we end up with any active - characters when handling the index, - % just treat them as a normal -. - \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} -} - -\def\realdash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} -\def\codex #1{\tclose{#1}\endgroup} - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\def\kbdinputstyle{\parsearg\kbdinputstylexxx} -\def\kbdinputstylexxx#1{% - \def\arg{#1}% - \ifx\arg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\arg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\arg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle `\arg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct.' -\kbdinputstyle distinct - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\look}}\fi -\else{\tclose{\kbdfont\look}}\fi} - -% For @url, @env, @command quotes seem unnecessary, so use \code. -\let\url=\code -\let\env=\code -\let\command=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. Perhaps eventually put in -% a hypertex \special here. -% -\def\uref#1{\douref #1,,,\finish} -\def\douref#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @acronym downcases the argument and prints in smallcaps. -\def\acronym#1{{\smallcaps \lowercase{#1}}} - -% @pounds{} is a sterling sign. -\def\pounds{{\it\$}} - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\def\shorttitlepage{\parsearg\shorttitlepagezzz} -\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\def\titlepage{\begingroup \parindent=0pt \textfonts - \let\subtitlerm=\tenrm - \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% - % - \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines - \let\tt=\authortt}% - % - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % - % Now you can print the title using @title. - \def\title{\parsearg\titlezzz}% - \def\titlezzz##1{\leftline{\titlefonts\rm ##1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Now you can put text using @subtitle. - \def\subtitle{\parsearg\subtitlezzz}% - \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% - % - % @author should come last, but may come many times. - \def\author{\parsearg\authorzzz}% - \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi - {\authorfont \leftline{##1}}}% - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \oldpage - \let\page = \oldpage - \hbox{}}% -% \def\page{\oldpage \hbox{}} -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make Tex use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - -\def\evenheading{\parsearg\evenheadingxxx} -\def\oddheading{\parsearg\oddheadingxxx} -\def\everyheading{\parsearg\everyheadingxxx} - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\oddfooting{\parsearg\oddfootingxxx} -\def\everyfooting{\parsearg\everyfootingxxx} - -{\catcode`\@=0 % - -\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} -\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} -\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} -\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} -\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -\baselineskip - \global\advance\vsize by -\baselineskip -} - -\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} -% -}% unbind the catcode of @. - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{ -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\undefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg\settitlezzz} -\def\settitlezzz #1{\gdef\thistitle{#1}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @vtable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} -\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} - -\def\internalBkitem{\smallbreak \parsearg\kitemzzz} -\def\internalBkitemx{\itemxpar \parsearg\kitemzzz} - -\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% - \itemzzz {#1}} - -\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% - \itemzzz {#1}} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemfont{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. (Unfortunately - % we can't prevent a possible page break at the following - % \baselineskip glue.) However, if what follows is an environment - % such as @example, there will be no \parskip glue; then - % the negative vskip we just would cause the example and the item to - % crash together. So we use this bizarre value of 10001 as a signal - % to \aboveenvbreak to insert \parskip glue after all. - % (Possibly there are other commands that could be followed by - % @example which need the same treatment, but not section titles; or - % maybe section titles are the only special case and they should be - % penalty 10001...) - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a table}} -\def\itemx{\errmessage{@itemx while not in a table}} -\def\kitem{\errmessage{@kitem while not in a table}} -\def\kitemx{\errmessage{@kitemx while not in a table}} -\def\xitem{\errmessage{@xitem while not in a table}} -\def\xitemx{\errmessage{@xitemx while not in a table}} - -% Contains a kludge to get @end[description] to work. -\def\description{\tablez{\dontindex}{1}{}{}{}{}} - -% @table, @ftable, @vtable. -\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} -{\obeylines\obeyspaces% -\gdef\tablex #1^^M{% -\tabley\dontindex#1 \endtabley}} - -\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} -{\obeylines\obeyspaces% -\gdef\ftablex #1^^M{% -\tabley\fnitemindex#1 \endtabley -\def\Eftable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} -{\obeylines\obeyspaces% -\gdef\vtablex #1^^M{% -\tabley\vritemindex#1 \endtabley -\def\Evtable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\dontindex #1{} -\def\fnitemindex #1{\doind {fn}{\code{#1}}}% -\def\vritemindex #1{\doind {vr}{\code{#1}}}% - -{\obeyspaces % -\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% -\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} - -\def\tablez #1#2#3#4#5#6{% -\aboveenvbreak % -\begingroup % -\def\Edescription{\Etable}% Necessary kludge. -\let\itemindex=#1% -\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % -\ifnum 0#4>0 \tableindent=#4\mil \fi % -\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % -\def\itemfont{#2}% -\itemmax=\tableindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \tableindent % -\exdentamount=\tableindent -\parindent = 0pt -\parskip = \smallskipamount -\ifdim \parskip=0pt \parskip=2pt \fi% -\def\Etable{\endgraf\afterenvbreak\endgroup}% -\let\item = \internalBitem % -\let\itemx = \internalBitemx % -\let\kitem = \internalBkitem % -\let\kitemx = \internalBkitemx % -\let\xitem = \internalBxitem % -\let\xitemx = \internalBxitemx % -} - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\def\itemize{\parsearg\itemizezzz} - -\def\itemizezzz #1{% - \begingroup % ended by the @end itemize - \itemizey {#1}{\Eitemize} -} - -\def\itemizey #1#2{% -\aboveenvbreak % -\itemmax=\itemindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \itemindent % -\exdentamount=\itemindent -\parindent = 0pt % -\parskip = \smallskipamount % -\ifdim \parskip=0pt \parskip=2pt \fi% -\def#2{\endgraf\afterenvbreak\endgroup}% -\def\itemcontents{#1}% -\let\item=\itemizeitem} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\def\enumerate{\parsearg\enumeratezzz} -\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - \begingroup % ended by the @end enumerate - % - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a <number>. - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call itemizey, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \itemizey{#1.}\Eenumerate\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - -% Definition of @item while inside @itemize. - -\def\itemizeitem{% -\advance\itemno by 1 -{\let\par=\endgraf \smallbreak}% -\ifhmode \errmessage{In hmode at itemizeitem}\fi -{\parskip=0in \hskip 0pt -\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% -\vadjust{\penalty 1200}}% -\flushcr} - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. -% -% For those who want to use more than one line's worth of words in -% the preamble, break the line within one argument and it -% will parse correctly, i.e., -% -% @multitable {Column 1 template} {Column 2 template} {Column 3 -% template} -% Not: -% @multitable {Column 1 template} {Column 2 template} -% {Column 3 template} - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab, @multitable or @end multitable do not need to be on their -% own lines, but it will not hurt if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the part of the @columnfraction before the decimal point, which -% is presumably either 0 or the empty string (but we don't check, we -% just throw it away). #2 is the decimal part, which we use as the -% percent of \hsize for this column. -\def\pickupwholefraction#1.#2 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% @multitable ... @end multitable definitions: -% -\def\multitable{\parsearg\dotable} -\def\dotable#1{\bgroup - \vskip\parskip - \let\item=\crcrwithfootnotes - % A \tab used to include \hskip1sp. But then the space in a template - % line is not enough. That is bad. So let's go back to just & until - % we encounter the problem it was intended to solve again. --karl, - % nathan@acm.org, 20apr99. - \let\tab=&% - \let\startfootins=\startsavedfootnote - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - \def\Emultitable{% - \global\setpercentfalse - \crcrwithfootnotes\crcr - \egroup\egroup - }% - % - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % \everycr will reset column counter, \colcount, at the end of - % each line. Every column entry will cause \colcount to advance by one. - % The table preamble - % looks at the current \colcount to find the correct column width. - \everycr{\noalign{% - % - % \filbreak%% keeps underfull box messages off when table breaks over pages. - % Maybe so, but it also creates really weird page breaks when the table - % breaks over pages. Wouldn't \vfil be better? Wait until the problem - % manifests itself, so it can be fixed for real --karl. - \global\colcount=0\relax}}% - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup&\global\advance\colcount by 1\relax - \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively marking - % characters. - \noindent\ignorespaces##\unskip\multistrut}\cr -} - -\def\setmultitablespacing{% test to see if user has set \multitablelinespace. -% If so, do nothing. If not, give it an appropriate dimension based on -% current baselineskip. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -%% strut to put in table in case some entry doesn't have descenders, -%% to keep lines equally spaced -\let\multistrut = \strut -\else -%% FIXME: what is \box0 supposed to be? -\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 -width0pt\relax} \fi -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - -% In case a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is -% finished. Otherwise, the insertion is lost, it never migrates to the -% main vertical list. --kasal, 22jan03. -% -\newbox\savedfootnotes -% -% \dotable \let's \startfootins to this, so that \dofootnote will call -% it instead of starting the insertion right away. -\def\startsavedfootnote{% - \global\setbox\savedfootnotes = \vbox\bgroup - \unvbox\savedfootnotes -} -\def\crcrwithfootnotes{% - \crcr - \ifvoid\savedfootnotes \else - \noalign{\insert\footins{\box\savedfootnotes}}% - \fi -} - -\message{conditionals,} -% Prevent errors for section commands. -% Used in @ignore and in failing conditionals. -\def\ignoresections{% - \let\chapter=\relax - \let\unnumbered=\relax - \let\top=\relax - \let\unnumberedsec=\relax - \let\unnumberedsection=\relax - \let\unnumberedsubsec=\relax - \let\unnumberedsubsection=\relax - \let\unnumberedsubsubsec=\relax - \let\unnumberedsubsubsection=\relax - \let\section=\relax - \let\subsec=\relax - \let\subsubsec=\relax - \let\subsection=\relax - \let\subsubsection=\relax - \let\appendix=\relax - \let\appendixsec=\relax - \let\appendixsection=\relax - \let\appendixsubsec=\relax - \let\appendixsubsection=\relax - \let\appendixsubsubsec=\relax - \let\appendixsubsubsection=\relax - \let\contents=\relax - \let\smallbook=\relax - \let\titlepage=\relax -} - -% Used in nested conditionals, where we have to parse the Texinfo source -% and so want to turn off most commands, in case they are used -% incorrectly. -% -% We use \empty instead of \relax for the @def... commands, so that \end -% doesn't throw an error. For instance: -% @ignore -% @deffn ... -% @end deffn -% @end ignore -% -% The @end deffn is going to get expanded, because we're trying to allow -% nested conditionals. But we don't want to expand the actual @deffn, -% since it might be syntactically correct and intended to be ignored. -% Since \end checks for \relax, using \empty does not cause an error. -% -\def\ignoremorecommands{% - \let\defcodeindex = \relax - \let\defcv = \empty - \let\defcvx = \empty - \let\Edefcv = \empty - \let\deffn = \empty - \let\deffnx = \empty - \let\Edeffn = \empty - \let\defindex = \relax - \let\defivar = \empty - \let\defivarx = \empty - \let\Edefivar = \empty - \let\defmac = \empty - \let\defmacx = \empty - \let\Edefmac = \empty - \let\defmethod = \empty - \let\defmethodx = \empty - \let\Edefmethod = \empty - \let\defop = \empty - \let\defopx = \empty - \let\Edefop = \empty - \let\defopt = \empty - \let\defoptx = \empty - \let\Edefopt = \empty - \let\defspec = \empty - \let\defspecx = \empty - \let\Edefspec = \empty - \let\deftp = \empty - \let\deftpx = \empty - \let\Edeftp = \empty - \let\deftypefn = \empty - \let\deftypefnx = \empty - \let\Edeftypefn = \empty - \let\deftypefun = \empty - \let\deftypefunx = \empty - \let\Edeftypefun = \empty - \let\deftypeivar = \empty - \let\deftypeivarx = \empty - \let\Edeftypeivar = \empty - \let\deftypemethod = \empty - \let\deftypemethodx = \empty - \let\Edeftypemethod = \empty - \let\deftypeop = \empty - \let\deftypeopx = \empty - \let\Edeftypeop = \empty - \let\deftypevar = \empty - \let\deftypevarx = \empty - \let\Edeftypevar = \empty - \let\deftypevr = \empty - \let\deftypevrx = \empty - \let\Edeftypevr = \empty - \let\defun = \empty - \let\defunx = \empty - \let\Edefun = \empty - \let\defvar = \empty - \let\defvarx = \empty - \let\Edefvar = \empty - \let\defvr = \empty - \let\defvrx = \empty - \let\Edefvr = \empty - \let\clear = \relax - \let\down = \relax - \let\evenfooting = \relax - \let\evenheading = \relax - \let\everyfooting = \relax - \let\everyheading = \relax - \let\headings = \relax - \let\include = \relax - \let\item = \relax - \let\lowersections = \relax - \let\oddfooting = \relax - \let\oddheading = \relax - \let\printindex = \relax - \let\pxref = \relax - \let\raisesections = \relax - \let\ref = \relax - \let\set = \relax - \let\setchapternewpage = \relax - \let\setchapterstyle = \relax - \let\settitle = \relax - \let\up = \relax - \let\verbatiminclude = \relax - \let\xref = \relax -} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescriptionword{documentdescription} -\def\documentdescription{\doignore{documentdescription}} -\def\html{\doignore{html}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory = \comment - -% Ignore text until a line `@end #1'. -% -\def\doignore#1{\begingroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define a command to swallow text until we reach `@end #1'. - % This @ is a catcode 12 token (that is the normal catcode of @ in - % this texinfo.tex file). We change the catcode of @ below to match. - \long\def\doignoretext##1@end #1{\enddoignore}% - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \catcode\spaceChar = 10 - % - % Ignore braces, too, so mismatched braces don't cause trouble. - \catcode`\{ = 9 - \catcode`\} = 9 - % - % We must not have @c interpreted as a control sequence. - \catcode`\@ = 12 - % - \def\ignoreword{#1}% - \ifx\ignoreword\documentdescriptionword - % The c kludge breaks documentdescription, since - % `documentdescription' contains a `c'. Means not everything will - % be ignored inside @documentdescription, but oh well... - \else - % Make the letter c a comment character so that the rest of the line - % will be ignored. This way, the document can have (for example) - % @c @end ifinfo - % and the @end ifinfo will be properly ignored. - % (We've just changed @ to catcode 12.) - \catcode`\c = 14 - \fi - % - % And now expand the command defined above. - \doignoretext -} - -% What we do to finish off ignored text. -% -\def\enddoignore{\endgroup\ignorespaces}% - -\newif\ifwarnedobs\warnedobsfalse -\def\obstexwarn{% - \ifwarnedobs\relax\else - % We need to warn folks that they may have trouble with TeX 3.0. - % This uses \immediate\write16 rather than \message to get newlines. - \immediate\write16{} - \immediate\write16{WARNING: for users of Unix TeX 3.0!} - \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} - \immediate\write16{If you are running another version of TeX, relax.} - \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} - \immediate\write16{ Then upgrade your TeX installation if you can.} - \immediate\write16{ (See ftp://ftp.gnu.org/non-gnu/TeX.README.)} - \immediate\write16{If you are stuck with version 3.0, run the} - \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} - \immediate\write16{ to use a workaround.} - \immediate\write16{} - \global\warnedobstrue - \fi -} - -% **In TeX 3.0, setting text in \nullfont hangs tex. For a -% workaround (which requires the file ``dummy.tfm'' to be installed), -% uncomment the following line: -%%%%%\font\nullfont=dummy\let\obstexwarn=\relax - -% Ignore text, except that we keep track of conditional commands for -% purposes of nesting, up to an `@end #1' command. -% -\def\nestedignore#1{% - \obstexwarn - % We must actually expand the ignored text to look for the @end - % command, so that nested ignore constructs work. Thus, we put the - % text into a \vbox and then do nothing with the result. To minimize - % the chance of memory overflow, we follow the approach outlined on - % page 401 of the TeXbook. - % - \setbox0 = \vbox\bgroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define `@end #1' to end the box, which will in turn undefine the - % @end command again. - \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% - % - % We are going to be parsing Texinfo commands. Most cause no - % trouble when they are used incorrectly, but some commands do - % complicated argument parsing or otherwise get confused, so we - % undefine them. - % - % We can't do anything about stray @-signs, unfortunately; - % they'll produce `undefined control sequence' errors. - \ignoremorecommands - % - % Set the current font to be \nullfont, a TeX primitive, and define - % all the font commands to also use \nullfont. We don't use - % dummy.tfm, as suggested in the TeXbook, because some sites - % might not have that installed. Therefore, math mode will still - % produce output, but that should be an extremely small amount of - % stuff compared to the main input. - % - \nullfont - \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont - \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont - \let\tensf=\nullfont - % Similarly for index fonts. - \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont - \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont - \let\smallsf=\nullfont - % Similarly for smallexample fonts. - \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont - \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont - \let\smallersf=\nullfont - % - % Don't complain when characters are missing from the fonts. - \tracinglostchars = 0 - % - % Don't bother to do space factor calculations. - \frenchspacing - % - % Don't report underfull hboxes. - \hbadness = 10000 - % - % Do minimal line-breaking. - \pretolerance = 10000 - % - % Do not execute instructions in @tex. - \def\tex{\doignore{tex}}% - % Do not execute macro definitions. - % `c' is a comment character, so the word `macro' will get cut off. - \def\macro{\doignore{ma}}% -} - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. Make sure the catcode of space is correct to avoid -% losing inside @example, for instance. -% -\def\set{\begingroup\catcode` =10 - \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. - \parsearg\setxxx} -\def\setxxx#1{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - \def\temp{#2}% - \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty - \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. - \fi - \endgroup -} -% Can't use \xdef to pre-expand #2 and save some time, since \temp or -% \next or other control sequences that we've defined might get us into -% an infinite loop. Consider `@set foo @cite{bar}'. -\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\def\clear{\parsearg\clearxxx} -\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} - -% @value{foo} gets the text saved in variable foo. -{ - \catcode`\_ = \active - % - % We might end up with active _ or - characters in the argument if - % we're called from @code, as @code{@value{foo-bar_}}. So \let any - % such active characters to their normal equivalents. - \gdef\value{\begingroup - \catcode`\-=\other \catcode`\_=\other - \indexbreaks \let_\normalunderscore - \valuexxx} -} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we \let\value to this in \indexdummies). Ones -% whose names contain - or _ still won't work, but we can't do anything -% about that. The command has to be fully expandable (if the variable -% is set), since the result winds up in the index file. This means that -% if the variable's value contains other Texinfo commands, it's almost -% certain it will fail (although perhaps we could fix that with -% sufficient work to do a one-level expansion on the result, instead of -% complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -\def\ifset{\parsearg\doifset} -\def\doifset#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \let\next=\ifsetfail - \else - \let\next=\ifsetsucceed - \fi - \next -} -\def\ifsetsucceed{\conditionalsucceed{ifset}} -\def\ifsetfail{\nestedignore{ifset}} -\defineunmatchedend{ifset} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -\def\ifclear{\parsearg\doifclear} -\def\doifclear#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \let\next=\ifclearsucceed - \else - \let\next=\ifclearfail - \fi - \next -} -\def\ifclearsucceed{\conditionalsucceed{ifclear}} -\def\ifclearfail{\nestedignore{ifclear}} -\defineunmatchedend{ifclear} - -% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we -% read the text following, through the first @end iftex (etc.). Make -% `@end iftex' (etc.) valid only after an @iftex. -% -\def\iftex{\conditionalsucceed{iftex}} -\def\ifnothtml{\conditionalsucceed{ifnothtml}} -\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} -\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}} -\defineunmatchedend{iftex} -\defineunmatchedend{ifnothtml} -\defineunmatchedend{ifnotinfo} -\defineunmatchedend{ifnotplaintext} - -% True conditional. Since \set globally defines its variables, we can -% just start and end a group (to keep the @end definition undefined at -% the outer level). -% -\def\conditionalsucceed#1{\begingroup - \expandafter\def\csname E#1\endcsname{\endgroup}% -} - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within \newindex. -{\catcode`\@=11 -\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \undefined - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname\donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % Need these in case \tex is in effect and \{ is a \delimiter again. - % But can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. - \let\{ = \mylbrace - \let\} = \myrbrace - % - % \definedummyword defines \#1 as \realbackslash #1\space, thus - % effectively preventing its expansion. This is used only for control - % words, not control letters, because the \space would be incorrect - % for control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% - }% - % - % Do the redefinitions. - \commondummies -} - -% For the aux file, @ is the escape character. So we want to redefine -% everything using @ instead of \realbackslash. When everything uses -% @, this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % (See comments in \indexdummies.) - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{@##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{@##1}% - }% - % - % Do the redefinitions. - \commondummies -} - -% Called from \indexdummies and \atdummies. \definedummyword and -% \definedummyletter must be defined first. -% -\def\commondummies{% - % - \normalturnoffactive - % - % Control letters and accents. - \definedummyletter{_}% - \definedummyletter{,}% - \definedummyletter{"}% - \definedummyletter{`}% - \definedummyletter{'}% - \definedummyletter{^}% - \definedummyletter{~}% - \definedummyletter{=}% - \definedummyword{u}% - \definedummyword{v}% - \definedummyword{H}% - \definedummyword{dotaccent}% - \definedummyword{ringaccent}% - \definedummyword{tieaccent}% - \definedummyword{ubaraccent}% - \definedummyword{udotaccent}% - \definedummyword{dotless}% - % - % Other non-English letters. - \definedummyword{AA}% - \definedummyword{AE}% - \definedummyword{L}% - \definedummyword{OE}% - \definedummyword{O}% - \definedummyword{aa}% - \definedummyword{ae}% - \definedummyword{l}% - \definedummyword{oe}% - \definedummyword{o}% - \definedummyword{ss}% - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword{bf}% - \definedummyword{gtr}% - \definedummyword{hat}% - \definedummyword{less}% - \definedummyword{sf}% - \definedummyword{sl}% - \definedummyword{tclose}% - \definedummyword{tt}% - % - % Texinfo font commands. - \definedummyword{b}% - \definedummyword{i}% - \definedummyword{r}% - \definedummyword{sc}% - \definedummyword{t}% - % - \definedummyword{TeX}% - \definedummyword{acronym}% - \definedummyword{cite}% - \definedummyword{code}% - \definedummyword{command}% - \definedummyword{dfn}% - \definedummyword{dots}% - \definedummyword{emph}% - \definedummyword{env}% - \definedummyword{file}% - \definedummyword{kbd}% - \definedummyword{key}% - \definedummyword{math}% - \definedummyword{option}% - \definedummyword{samp}% - \definedummyword{strong}% - \definedummyword{uref}% - \definedummyword{url}% - \definedummyword{var}% - \definedummyword{w}% - % - % Assorted special characters. - \definedummyword{bullet}% - \definedummyword{copyright}% - \definedummyword{dots}% - \definedummyword{enddots}% - \definedummyword{equiv}% - \definedummyword{error}% - \definedummyword{expansion}% - \definedummyword{minus}% - \definedummyword{pounds}% - \definedummyword{point}% - \definedummyword{print}% - \definedummyword{result}% - % - % Handle some cases of @value -- where the variable name does not - % contain - or _, and the value does not contain any - % (non-fully-expandable) commands. - \let\value = \expandablevalue - % - % Normal spaces, not active ones. - \unsepspaces - % - % No macro expansion. - \turnoffmacros -} - -% If an index command is used in an @example environment, any spaces -% therein should become regular spaces in the raw index file, not the -% expansion of \tie (\leavevmode \penalty \@M \ ). -{\obeyspaces - \gdef\unsepspaces{\obeyspaces\let =\space}} - - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexdummytex{TeX} -\def\indexdummydots{...} -% -\def\indexnofonts{% - \def\ { }% - \def\@{@}% - % how to handle braces? - \def\_{\normalunderscore}% - % - \let\,=\asis - \let\"=\asis - \let\`=\asis - \let\'=\asis - \let\^=\asis - \let\~=\asis - \let\==\asis - \let\u=\asis - \let\v=\asis - \let\H=\asis - \let\dotaccent=\asis - \let\ringaccent=\asis - \let\tieaccent=\asis - \let\ubaraccent=\asis - \let\udotaccent=\asis - \let\dotless=\asis - % - % Other non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\aa{aa}% - \def\ae{ae}% - \def\l{l}% - \def\oe{oe}% - \def\o{o}% - \def\ss{ss}% - \def\exclamdown{!}% - \def\questiondown{?}% - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - % Texinfo font commands. - \let\b=\asis - \let\i=\asis - \let\r=\asis - \let\sc=\asis - \let\t=\asis - % - \let\TeX=\indexdummytex - \let\acronym=\asis - \let\cite=\asis - \let\code=\asis - \let\command=\asis - \let\dfn=\asis - \let\dots=\indexdummydots - \let\emph=\asis - \let\env=\asis - \let\file=\asis - \let\kbd=\asis - \let\key=\asis - \let\math=\asis - \let\option=\asis - \let\samp=\asis - \let\strong=\asis - \let\uref=\asis - \let\url=\asis - \let\var=\asis - \let\w=\asis -} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% For \ifx comparisons. -\def\emptymacro{\empty} - -% Most index entries go through here, but \dosubind is the general case. -% -\def\doind#1#2{\dosubind{#1}{#2}\empty} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% \empty if called from \doind, as we usually are. The main exception -% is with defuns, which call us directly. -% -\def\dosubind#1#2#3{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% - \fi - {% - \count255=\lastpenalty - {% - \indexdummies % Must do this here, since \bf, etc expand at this stage - \escapechar=`\\ - {% - \let\folio = 0% We will expand all macros now EXCEPT \folio. - \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % The main index entry text. - \toks0 = {#2}% - % - % If third arg is present, precede it with space in sort key. - \def\thirdarg{#3}% - \ifx\thirdarg\emptymacro \else - % If the third (subentry) arg is present, add it to the index - % line to write. - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\csname#1indfile\endcsname{% - \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% - }% - % - % If a skip is the last thing on the list now, preserve it - % by backing up by \lastskip, doing the \write, then inserting - % the skip again. Otherwise, the whatsit generated by the - % \write will make \lastskip zero. The result is that sequences - % like this: - % @end defun - % @tindex whatever - % @defun ... - % will have extra space inserted, because the \medbreak in the - % start of the @defun won't see the skip inserted by the @end of - % the previous defun. - % - % But don't do any of this if we're not in vertical mode. We - % don't want to do a \vskip and prematurely end a paragraph. - % - % Avoid page breaks due to these extra skips, too. - % - \iflinks - \ifvmode - \skip0 = \lastskip - \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi - \fi - % - \temp % do the write - % - \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi - \fi - }% - }% - \penalty\count255 - }% -} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\def\printindex{\parsearg\doprintindex} -\def\doprintindex#1{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \indexbreaks - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\rawbackslashxx}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \penalty -300 - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - \vskip .33\baselineskip plus .1\baselineskip - % - % Do our best not to break after the initial. - \nobreak -}} - -% This typesets a paragraph consisting of #1, dot leaders, and then #2 -% flush to the right margin. It is used for index and table of contents -% entries. The paragraph is indented by \leftskip. -% -\def\entry#1#2{\begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing columns. - \vskip 0pt plus1pt - % - % Start a ``paragraph'' for the index entry so the line breaking - % parameters we've set above will have an effect. - \noindent - % - % Insert the text of the index entry. TeX will do line-breaking on it. - #1% - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#2}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd\ \else% - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - \ #2% The page number ends the paragraph. - \fi - \fi% - \par -\endgroup} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% \def\appendixletter{\char\the\appendixno} -% We do the following for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise. -\def\thischapter{} -\def\thissection{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raise/lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% Choose a numbered-heading macro -% #1 is heading level if unmodified by @raisesections or @lowersections -% #2 is text for heading -\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \chapterzzz{#2} -\or - \seczzz{#2} -\or - \numberedsubseczzz{#2} -\or - \numberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \chapterzzz{#2} - \else - \numberedsubsubseczzz{#2} - \fi -\fi -} - -% like \numhead, but chooses appendix heading levels -\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \appendixzzz{#2} -\or - \appendixsectionzzz{#2} -\or - \appendixsubseczzz{#2} -\or - \appendixsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \appendixzzz{#2} - \else - \appendixsubsubseczzz{#2} - \fi -\fi -} - -% like \numhead, but chooses numberless heading levels -\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \unnumberedzzz{#2} -\or - \unnumberedseczzz{#2} -\or - \unnumberedsubseczzz{#2} -\or - \unnumberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \unnumberedzzz{#2} - \else - \unnumberedsubsubseczzz{#2} - \fi -\fi -} - -% @chapter, @appendix, @unnumbered. -\def\thischaptername{No Chapter Title} -\outer\def\chapter{\parsearg\chapteryyy} -\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% - \chapmacro {#1}{\the\chapno}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - % We don't substitute the actual chapter name into \thischapter - % because we don't want its macros evaluated now. - \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% - \writetocentry{chap}{#1}{{\the\chapno}} - \donoderef - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -% we use \chapno to avoid indenting back -\def\appendixbox#1{% - \setbox0 = \hbox{\putwordAppendix{} \the\chapno}% - \hbox to \wd0{#1\hss}} - -\outer\def\appendix{\parsearg\appendixyyy} -\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - \global\advance \appendixno by 1 - \message{\putwordAppendix\space \appendixletter}% - \chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% - \writetocentry{appendix}{#1}{{\appendixletter}} - \appendixnoderef - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\def\centerchap{\parsearg\centerchapyyy} -\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} - -% @top is like @unnumbered. -\outer\def\top{\parsearg\unnumberedyyy} - -\outer\def\unnumbered{\parsearg\unnumberedyyy} -\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the<toks register> to achieve this: TeX expands \the<toks> only once, - % simply yielding the contents of <toks register>. (We also do this for - % the toc entries.) - \toks0 = {#1}\message{(\the\toks0)}% - % - \unnumbchapmacro {#1}% - \gdef\thischapter{#1}\gdef\thissection{#1}% - \writetocentry{unnumbchap}{#1}{{\the\chapno}} - \unnumbnoderef - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% Sections. -\outer\def\numberedsec{\parsearg\secyyy} -\def\secyyy #1{\numhead1{#1}} % normally calls seczzz -\def\seczzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% - \writetocentry{sec}{#1}{{\the\chapno}{\the\secno}} - \donoderef - \nobreak -} - -\outer\def\appendixsection{\parsearg\appendixsecyyy} -\outer\def\appendixsec{\parsearg\appendixsecyyy} -\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% - \writetocentry{sec}{#1}{{\appendixletter}{\the\secno}} - \appendixnoderef - \nobreak -} - -\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} -\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz #1{% - \plainsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsec}{#1}{{\the\chapno}{\the\secno}} - \unnumbnoderef - \nobreak -} - -% Subsections. -\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} -\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% - \writetocentry{subsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}} - \donoderef - \nobreak -} - -\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} -\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% - \writetocentry{subsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}} - \appendixnoderef - \nobreak -} - -\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} -\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz #1{% - \plainsubsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}} - \unnumbnoderef - \nobreak -} - -% Subsubsections. -\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} -\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% - \writetocentry{subsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \donoderef - \nobreak -} - -\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} -\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% - \writetocentry{subsubsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \appendixnoderef - \nobreak -} - -\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} -\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz #1{% - \plainsubsubsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsubsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \unnumbnoderef - \nobreak -} - -% These are variants which are not "outer", so they can appear in @ifinfo. -% Actually, they should now be obsolete; ordinary section commands should work. -\def\infotop{\parsearg\unnumberedzzz} -\def\infounnumbered{\parsearg\unnumberedzzz} -\def\infounnumberedsec{\parsearg\unnumberedseczzz} -\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} -\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} - -\def\infoappendix{\parsearg\appendixzzz} -\def\infoappendixsec{\parsearg\appendixseczzz} -\def\infoappendixsubsec{\parsearg\appendixsubseczzz} -\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} - -\def\infochapter{\parsearg\chapterzzz} -\def\infosection{\parsearg\sectionzzz} -\def\infosubsection{\parsearg\subsectionzzz} -\def\infosubsubsection{\parsearg\subsubsectionzzz} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{\parsearg\majorheadingzzz} -\def\majorheadingzzz #1{% - {\advance\chapheadingskip by 10pt \chapbreak }% - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -\def\chapheading{\parsearg\chapheadingzzz} -\def\chapheadingzzz #1{\chapbreak % - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -% @heading, @subheading, @subsubheading. -\def\heading{\parsearg\plainsecheading} -\def\subheading{\parsearg\plainsubsecheading} -\def\subsubheading{\parsearg\plainsubsubsecheading} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{ -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -\def\CHAPFplain{ -\global\let\chapmacro=\chfplain -\global\let\unnumbchapmacro=\unnchfplain -\global\let\centerchapmacro=\centerchfplain} - -% Plain chapter opening. -% #1 is the text, #2 the chapter number or empty if unnumbered. -\def\chfplain#1#2{% - \pchapsepmacro - {% - \chapfonts \rm - \def\chapnum{#2}% - \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% Plain opening for unnumbered. -\def\unnchfplain#1{\chfplain{#1}{}} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerchfplain#1{{% - \def\centerparametersmaybe{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt - }% - \chfplain{#1}{}% -}} - -\CHAPFplain % The default - -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\nobreak -} - -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} - -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rm #1}\hfill}}\bigskip \par\nobreak -} - -\def\CHAPFopen{ -\global\let\chapmacro=\chfopen -\global\let\unnumbchapmacro=\unnchfopen -\global\let\centerchapmacro=\centerchfopen} - - -% Section titles. -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} -\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} -\def\plainsecheading#1{\sectionheading{sec}{}{#1}} - -% Subsection titles. -\newskip \subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} -\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} -\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} - -% Subsubsection titles. -\let\subsubsecheadingskip = \subsecheadingskip -\let\subsubsecheadingbreak = \subsecheadingbreak -\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} -\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} - - -% Print any size section title. -% -% #1 is the section type (sec/subsec/subsubsec), #2 is the section -% number (maybe empty), #3 the text. -\def\sectionheading#1#2#3{% - {% - \expandafter\advance\csname #1headingskip\endcsname by \parskip - \csname #1headingbreak\endcsname - }% - {% - % Switch to the right set of fonts. - \csname #1fonts\endcsname \rm - % - % Only insert the separating space if we have a section number. - \def\secnum{#2}% - \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% - % - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 % zero if no section number - \unhbox0 #3}% - }% - % Add extra space after the heading -- either a line space or a - % paragraph space, whichever is more. (Some people like to set - % \parskip to large values for some reason.) Don't allow stretch, though. - \nobreak - \ifdim\parskip>\normalbaselineskip - \kern\parskip - \else - \kern\normalbaselineskip - \fi - \nobreak -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. We supply {\folio} at the end of the -% argument, which will end up as the last argument to the \...entry macro. -% -% Usage: \writetocentry{chap}{The Name of The Game}{{\the\chapno}} -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% -\newif\iftocfileopened -\def\writetocentry#1#2#3{% - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - \toks0 = {#2}% - \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}#3{\folio}}}% - \temp - \fi - % - % Tell \shipout to create a page destination if we're doing pdf, which - % will be the target of the links in the table of contents. We can't - % just do it on every page because the title pages are numbered 1 and - % 2 (the page numbers aren't printed), and so are the first two pages - % of the document. Thus, we'd have two destinations named `1', and - % two named `2'. - \ifpdf \pdfmakepagedesttrue \fi -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Finish up the main text and prepare to read what we've written -% to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund <tege@matematik.su.se> - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - % We can't do this, because then an actual ^ in a section - % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. - %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - - -% Normal (long) toc. -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \pdfmakeoutlines - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\chapentry = \shortchapentry - \let\appendixentry = \shortappendixentry - \let\unnumbchapentry = \shortunnumberedentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\secentry ##1##2##3##4{} - \def\subsecentry ##1##2##3##4##5{} - \def\subsubsecentry ##1##2##3##4##5##6{} - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -\ifpdf - \pdfcatalog{/PageMode /UseOutlines}% -\fi - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapters, in the main contents. -\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% -} - -% Appendices, in the main contents. -\def\appendixentry#1#2#3{% - \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}} -% -% Appendices, in the short toc. -\let\shortappendixentry = \shortchapentry - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter. -% We could simplify the code here by writing out an \appendixentry -% command in the toc file for appendices, instead of using \chapentry -% for both, but it doesn't seem worth it. -% -\newdimen\shortappendixwidth -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - \dimen0 = 1em - \hbox to \dimen0{#1\hss}% -} - -% Unnumbered chapters. -\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}} -\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}} - -% Sections. -\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} -\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} -\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}} - -% And subsubsections. -\def\subsubsecentry#1#2#3#4#5#6{% - \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} -\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}} - -% This parameter controls the indentation of the various levels. -\newdimen\tocindent \tocindent = 3pc - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% Final typesetting of a toc entry; we use the same \entry macro as for -% the index entries, but we want to suppress hyphenation here. (We -% can't do that in the \entry macro, since index entries might consist -% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) -\def\tocentry#1#2{\begingroup - \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks - % Do not use \turnoffactive in these arguments. Since the toc is - % typeset in cmr, characters such as _ would come out wrong; we - % have to do the usual translation tricks. - \entry{#1}{#2}% -\endgroup} - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\let\subsecentryfonts = \textfonts -\let\subsubsecentryfonts = \textfonts - - -\message{environments,} -% @foo ... @end foo. - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} -% -\global\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{ - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\def\tex{\begingroup - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\==\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \escapechar=`\\ - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\*=\ptexstar - \let\t=\ptext - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -\let\Etex=\endgroup} - -% Define @lisp ... @end lisp. -% @lisp does a \begingroup so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% Make each space character in the input produce a normal interword -% space in the output. Don't allow a line break at this space, as this -% is used only in environments like @example, where each line of input -% should produce a line of output anyway. -% -{\obeyspaces % -\gdef\sepspaces{\obeyspaces\let =\tie}} - -% Define \obeyedspace to be our active space, whatever it is. This is -% for use in \parsearg. -{\sepspaces% -\global\let\obeyedspace= } - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty>10000 \else \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\def\cartouche{% -\par % can't be in the midst of a paragraph. -\begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip -\def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup -\endgroup -}} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\def\nonfillstart{% - \aboveenvbreak - \inENV % This group ends at the end of the body - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - \parindent = 0pt - \emergencystretch = 0pt % don't try to avoid overfull boxes - % @cartouche defines \nonarrowing to inhibit narrowing - % at next level down. - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \let\exdent=\nofillexdent - \let\nonarrowing=\relax - \fi -} - -% Define the \E... control sequence only if we are inside the particular -% environment, so the error checking in \end will work. -% -% To end an @example-like environment, we first end the paragraph (via -% \afterenvbreak's vertical glue), and then the group. That way we keep -% the zero \parskip that the environments set -- \parskip glue will be -% inserted at the beginning of the next paragraph in the document, after -% the environment. -% -\def\nonfillfinish{\afterenvbreak\endgroup} - -% @lisp: indented, narrowed, typewriter font. -\def\lisp{\begingroup - \nonfillstart - \let\Elisp = \nonfillfinish - \tt - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} - -% @example: Same as @lisp. -\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} - -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -\def\smalllisp{\begingroup - \def\Esmalllisp{\nonfillfinish\endgroup}% - \def\Esmallexample{\nonfillfinish\endgroup}% - \smallexamplefonts - \lisp -} -\let\smallexample = \smalllisp - - -% @display: same as @lisp except keep current font. -% -\def\display{\begingroup - \nonfillstart - \let\Edisplay = \nonfillfinish - \gobble -} -% -% @smalldisplay: @display plus smaller fonts. -% -\def\smalldisplay{\begingroup - \def\Esmalldisplay{\nonfillfinish\endgroup}% - \smallexamplefonts \rm - \display -} - -% @format: same as @display except don't narrow margins. -% -\def\format{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eformat = \nonfillfinish - \gobble -} -% -% @smallformat: @format plus smaller fonts. -% -\def\smallformat{\begingroup - \def\Esmallformat{\nonfillfinish\endgroup}% - \smallexamplefonts \rm - \format -} - -% @flushleft (same as @format). -% -\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} - -% @flushright. -% -\def\flushright{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushright = \nonfillfinish - \advance\leftskip by 0pt plus 1fill - \gobble -} - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. -% -\def\quotation{% - \begingroup\inENV %This group ends at the end of the @quotation body - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % We have retained a nonzero parskip for the environment, since we're - % doing normal filling. So to avoid extra space below the environment... - \def\Equotation{\parskip = 0pt \nonfillfinish}% - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \let\nonarrowing = \relax - \fi -} - - -% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} -% If we want to allow any <char> as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=12}\dospecials} -% -% [Knuth] pp. 380,381,391 -% Disable Spanish ligatures ?` and !` of \tt font -\begingroup - \catcode`\`=\active\gdef`{\relax\lq} -\endgroup -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \catcode`\`=\active - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -\def\starttabbox{\setbox0=\hbox\bgroup} -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen0=\wd0 % the width so far, or since the previous tab - \divide\dimen0 by\tabw - \multiply\dimen0 by\tabw % compute previous multiple of \tabw - \advance\dimen0 by\tabw % advance to next multiple of \tabw - \wd0=\dimen0 \box0 \starttabbox - }% - } -\endgroup -\def\setupverbatim{% - % Easiest (and conventionally used) font for verbatim - \tt - \def\par{\leavevmode\egroup\box0\endgraf}% - \catcode`\`=\active - \tabexpand - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'<char>#1<char>'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12 - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -%% Include LaTeX hack for completeness -- never know -%% \begingroup -%% \catcode`|=0 \catcode`[=1 -%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active -%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[ -%% #1|endgroup|def|Everbatim[]|end[verbatim]] -%% |endgroup -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \gdef\doverbatim#1^^M#2@end verbatim{#2\end{verbatim}}% -\endgroup -% -\def\verbatim{% - \def\Everbatim{\nonfillfinish\endgroup}% - \begingroup - \nonfillstart - \advance\leftskip by -\defbodyindent - \begingroup\setupverbatim\doverbatim -} - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -% Allow normal characters that we make active in the argument (a file name). -\def\verbatiminclude{% - \begingroup - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \parsearg\doverbatiminclude -} -\def\setupverbatiminclude{% - \begingroup - \nonfillstart - \advance\leftskip by -\defbodyindent - \begingroup\setupverbatim -} -% -\def\doverbatiminclude#1{% - % Restore active chars for included file. - \endgroup - \begingroup - \let\value=\expandablevalue - \def\thisfile{#1}% - \expandafter\expandafter\setupverbatiminclude\input\thisfile - \endgroup - \nonfillfinish - \endgroup -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. Many commands won't be -% allowed in this context, but that's ok. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\begingroup - % Define a command to swallow text until we reach `@end copying'. - % \ is the escape char in this texinfo.tex file, so it is the - % delimiter for the command; @ will be the escape char when we read - % it, but that doesn't matter. - \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}% - % - % We must preserve ^^M's in the input file; see \insertcopying below. - \catcode`\^^M = \active - \docopying -} - -% What we do to finish off the copying text. -% -\def\enddocopying{\endgroup\ignorespaces} - -% @insertcopying. Here we must play games with ^^M's. On the one hand, -% we need them to delimit commands such as `@end quotation', so they -% must be active. On the other hand, we certainly don't want every -% end-of-line to be a \par, as would happen with the normal active -% definition of ^^M. On the third hand, two ^^M's in a row should still -% generate a \par. -% -% Our approach is to make ^^M insert a space and a penalty1 normally; -% then it can also check if \lastpenalty=1. If it does, then manually -% do \par. -% -% This messes up the normal definitions of @c[omment], so we redefine -% it. Similarly for @ignore. (These commands are used in the gcc -% manual for man page generation.) -% -% Seems pretty fragile, most line-oriented commands will presumably -% fail, but for the limited use of getting the copying text (which -% should be quite simple) inserted, we can hope it's ok. -% -{\catcode`\^^M=\active % -\gdef\insertcopying{\begingroup % - \parindent = 0pt % looks wrong on title page - \def^^M{% - \ifnum \lastpenalty=1 % - \par % - \else % - \space \penalty 1 % - \fi % - }% - % - % Fix @c[omment] for catcode 13 ^^M's. - \def\c##1^^M{\ignorespaces}% - \let\comment = \c % - % - % Don't bother jumping through all the hoops that \doignore does, it - % would be very hard since the catcodes are already set. - \long\def\ignore##1\end ignore{\ignorespaces}% - % - \copyingtext % -\endgroup}% -} - -\message{defuns,} -% @defun etc. - -% Allow user to change definition object font (\df) internally -\def\setdeffont#1 {\csname DEF#1\endcsname} - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt - -\newcount\parencount - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\&=\active - \catcode`\[=\active \catcode`\]=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -\global\let(=\lparen \global\let)=\rparen -\global\let[=\lbrack \global\let]=\rbrack - -\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } -\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} -% This is used to turn on special parens -% but make & act ordinary (given that it's active). -\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} - -% Definitions of (, ) and & used in args for functions. -% This is the definition of ( outside of all parentheses. -\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested - \global\advance\parencount by 1 -} -% -% This is the definition of ( when already inside a level of parens. -\gdef\opnested{\char`\(\global\advance\parencount by 1 } -% -\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. - % also in that case restore the outer-level definition of (. - \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi - \global\advance \parencount by -1 } -% If we encounter &foo, then turn on ()-hacking afterwards -\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } -% -\gdef\normalparens{\boldbrax\let&=\ampnr} -} % End of definition inside \activeparens -%% These parens (in \boldbrax) actually are a little bolder than the -%% contained text. This is especially needed for [ and ] -\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } -\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } -\let\ampnr = \& -\def\lbrb{{\bf\char`\[}} -\def\rbrb{{\bf\char`\]}} - -% Active &'s sneak into the index arguments, so make sure it's defined. -{ - \catcode`& = \active - \global\let& = \ampnr -} - -% \defname, which formats the name of the @def (not the args). -% #1 is the function name. -% #2 is the type of definition, such as "Function". -% -\def\defname#1#2{% - % How we'll output the type name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \ifempty{#2}% - \def\defnametype{}% - \else - \def\defnametype{[\rm #2]}% - \fi - % - % Get the values of \leftskip and \rightskip as they were outside the @def... - \dimen2=\leftskip - \advance\dimen2 by -\defbodyindent - % - % Figure out values for the paragraph shape. - \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}% - \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line - \dimen1=\hsize \advance \dimen1 by -\defargsindent % size for continuations - \parshape 2 0in \dimen0 \defargsindent \dimen1 - % - % Output arg 2 ("Function" or some such) but stuck inside a box of - % width 0 so it does not interfere with linebreaking. - \noindent - % - {% Adjust \hsize to exclude the ambient margins, - % so that \rightline will obey them. - \advance \hsize by -\dimen2 - \dimen3 = 0pt % was -1.25pc - \rlap{\rightline{\defnametype\kern\dimen3}}% - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \advance\leftskip by -\defbodyindent - \exdentamount=\defbodyindent - {\df #1}\enskip % output function name - % \defunargs will be called next to output the arguments, if any. -} - -% Common pieces to start any @def... -% #1 is the \E... control sequence to end the definition (which we define). -% #2 is the \...x control sequence (which our caller defines). -% #3 is the control sequence to process the header, such as \defunheader. -% -\def\parsebodycommon#1#2#3{% - \begingroup\inENV - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we want to allow a - % break after all. Check for penalty 10002 (inserted by - % \defargscommonending) instead of 10000, since the sectioning - % commands insert a \penalty10000, and we don't want to allow a break - % between a section heading and a defun. - \ifnum\lastpenalty=10002 \penalty0 \fi - \medbreak - % - % Define the \E... end token that this defining construct specifies - % so that it will exit this group. - \def#1{\endgraf\endgroup\medbreak}% - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -% Common part of the \...x definitions. -% -\def\defxbodycommon{% - % As with \parsebodycommon above, allow line break if we have multiple - % x headers in a row. It's not a great place, though. - \ifnum\lastpenalty=10000 \penalty1000 \fi - % - \begingroup\obeylines -} - -% Process body of @defun, @deffn, @defmac, etc. -% -\def\defparsebody#1#2#3{% - \parsebodycommon{#1}{#2}{#3}% - \def#2{\defxbodycommon \activeparens \spacesplit#3}% - \catcode\equalChar=\active - \begingroup\obeylines\activeparens - \spacesplit#3% -} - -% #1, #2, #3 are the common arguments (see \parsebodycommon above). -% #4, delimited by the space, is the class name. -% -\def\defmethparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}% - \begingroup\obeylines\activeparens - % The \empty here prevents misinterpretation of a construct such as - % @deffn {whatever} {Enharmonic comma} - % See comments at \deftpparsebody, although in our case we don't have - % to remove the \empty afterwards, since it is empty. - \spacesplit{#3{#4}}\empty -} - -% Used for @deftypemethod and @deftypeivar. -% #1, #2, #3 are the common arguments (see \defparsebody). -% #4, delimited by a space, is the class name. -% #5 is the method's return type. -% -\def\deftypemethparsebody#1#2#3#4 #5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#4}{#5}}% -} - -% Used for @deftypeop. The change from \deftypemethparsebody is an -% extra argument at the beginning which is the `category', instead of it -% being the hardwired string `Method' or `Instance Variable'. We have -% to account for this both in the \...x definition and in parsing the -% input at hand. Thus also need a control sequence (passed as #5) for -% the \E... definition to assign the category name to. -% -\def\deftypeopparsebody#1#2#3#4#5 #6 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 ##3 {\def#4{##1}% - \defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#5}{#6}}% -} - -% For @defop. -\def\defopparsebody #1#2#3#4#5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\def#4{##1}% - \defxbodycommon \activeparens \spacesplit{#3{##2}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#5}}% -} - -% These parsing functions are similar to the preceding ones -% except that they do not make parens into active characters. -% These are used for "variables" since they have no arguments. -% -\def\defvarparsebody #1#2#3{% - \parsebodycommon{#1}{#2}{#3}% - \def#2{\defxbodycommon \spacesplit#3}% - \catcode\equalChar=\active - \begingroup\obeylines - \spacesplit#3% -} - -% @defopvar. -\def\defopvarparsebody #1#2#3#4#5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\def#4{##1}% - \defxbodycommon \spacesplit{#3{##2}}}% - \begingroup\obeylines - \spacesplit{#3{#5}}% -} - -\def\defvrparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% - \begingroup\obeylines - \spacesplit{#3{#4}}% -} - -% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the -% type is just `struct', because we lose the braces in `{struct -% termios}' when \spacesplit reads its undelimited argument. Sigh. -% \let\deftpparsebody=\defvrparsebody -% -% So, to get around this, we put \empty in with the type name. That -% way, TeX won't find exactly `{...}' as an undelimited argument, and -% won't strip off the braces. -% -\def\deftpparsebody #1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% - \begingroup\obeylines - \spacesplit{\parsetpheaderline{#3{#4}}}\empty -} - -% Fine, but then we have to eventually remove the \empty *and* the -% braces (if any). That's what this does. -% -\def\removeemptybraces\empty#1\relax{#1} - -% After \spacesplit has done its work, this is called -- #1 is the final -% thing to call, #2 the type name (which starts with \empty), and #3 -% (which might be empty) the arguments. -% -\def\parsetpheaderline#1#2#3{% - #1{\removeemptybraces#2\relax}{#3}% -}% - -% Split up #2 (the rest of the input line) at the first space token. -% call #1 with two arguments: -% the first is all of #2 before the space token, -% the second is all of #2 after that space token. -% If #2 contains no space token, all of it is passed as the first arg -% and the second is passed as empty. -% -{\obeylines % - \gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}% - \long\gdef\spacesplitx#1#2 #3#4\spacesplitx{% - \ifx\relax #3% - #1{#2}{}% - \else % - #1{#2}{#3#4}% - \fi}% -} - -% Define @defun. - -% This is called to end the arguments processing for all the @def... commands. -% -\def\defargscommonending{% - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil - \endgraf - \nobreak\vskip -\parskip - \penalty 10002 % signal to \parsebodycommon. -} - -% This expands the args and terminates the paragraph they comprise. -% -\def\defunargs#1{\functionparens \sl -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Set the font temporarily and use \font in case \setfont made \tensl a macro. -{\tensl\hyphenchar\font=0}% -#1% -{\tensl\hyphenchar\font=45}% -\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% - \defargscommonending -} - -\def\deftypefunargs #1{% -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Use \boldbraxnoamp, not \functionparens, so that & is not special. -\boldbraxnoamp -\tclose{#1}% avoid \code because of side effects on active chars - \defargscommonending -} - -% Do complete processing of one @defun or @defunx line already parsed. - -% @deffn Command forward-char nchars - -\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} - -\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% -\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defun == @deffn Function - -\def\defun{\defparsebody\Edefun\defunx\defunheader} - -\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDeffunc}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @deftypefun int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} - -% #1 is the data type. #2 is the name and args. -\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} -% #1 is the data type, #2 the name, #3 the args. -\def\deftypefunheaderx #1#2 #3\relax{% -\doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}% -\deftypefunargs {#3}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} - -% \defheaderxcond#1\relax$.$ -% puts #1 in @code, followed by a space, but does nothing if #1 is null. -\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi} - -% #1 is the classification. #2 is the data type. #3 is the name and args. -\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} -% #1 is the classification, #2 the data type, #3 the name, #4 the args. -\def\deftypefnheaderx #1#2#3 #4\relax{% -\doind {fn}{\code{#3}}% Make entry in function index -\begingroup -\normalparens % notably, turn off `&' magic, which prevents -% at least some C++ text from working -\defname {\defheaderxcond#2\relax$.$#3}{#1}% -\deftypefunargs {#4}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defmac == @deffn Macro - -\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} - -\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefmac}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defspec == @deffn Special Form - -\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} - -\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefspec}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defop CATEGORY CLASS OPERATION ARG... -% -\def\defop #1 {\def\defoptype{#1}% -\defopparsebody\Edefop\defopx\defopheader\defoptype} -% -\def\defopheader#1#2#3{% - \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% function index entry - \begingroup - \defname{#2}{\defoptype\ \putwordon\ #1}% - \defunargs{#3}% - \endgroup -} - -% @deftypeop CATEGORY CLASS TYPE OPERATION ARG... -% -\def\deftypeop #1 {\def\deftypeopcategory{#1}% - \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader - \deftypeopcategory} -% -% #1 is the class name, #2 the data type, #3 the operation name, #4 the args. -\def\deftypeopheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3} - {\deftypeopcategory\ \putwordon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup -} - -% @deftypemethod CLASS TYPE METHOD ARG... -% -\def\deftypemethod{% - \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} -% -% #1 is the class name, #2 the data type, #3 the method name, #4 the args. -\def\deftypemethodheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup -} - -% @deftypeivar CLASS TYPE VARNAME -% -\def\deftypeivar{% - \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} -% -% #1 is the class name, #2 the data type, #3 the variable name. -\def\deftypeivarheader#1#2#3{% - \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3} - {\putwordInstanceVariableof\ \code{#1}}% - \defvarargs{#3}% - \endgroup -} - -% @defmethod == @defop Method -% -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} -% -% #1 is the class name, #2 the method name, #3 the args. -\def\defmethodheader#1#2#3{% - \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{#2}{\putwordMethodon\ \code{#1}}% - \defunargs{#3}% - \endgroup -} - -% @defcv {Class Option} foo-class foo-flag - -\def\defcv #1 {\def\defcvtype{#1}% -\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} - -\def\defcvarheader #1#2#3{% - \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% variable index entry - \begingroup - \defname{#2}{\defcvtype\ \putwordof\ #1}% - \defvarargs{#3}% - \endgroup -} - -% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME -% -\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} -% -\def\defivarheader#1#2#3{% - \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% entry in var index - \begingroup - \defname{#2}{\putwordInstanceVariableof\ #1}% - \defvarargs{#3}% - \endgroup -} - -% @defvar -% First, define the processing that is wanted for arguments of @defvar. -% This is actually simple: just print them in roman. -% This must expand the args and terminate the paragraph they make up -\def\defvarargs #1{\normalparens #1% - \defargscommonending -} - -% @defvr Counter foo-count - -\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} - -\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% -\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} - -% @defvar == @defvr Variable - -\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} - -\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefvar}% -\defvarargs {#2}\endgroup % -} - -% @defopt == @defvr {User Option} - -\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} - -\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefopt}% -\defvarargs {#2}\endgroup % -} - -% @deftypevar int foobar - -\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} - -% #1 is the data type. #2 is the name, perhaps followed by text that -% is actually part of the data type, which should not be put into the index. -\def\deftypevarheader #1#2{% -\dovarind#2 \relax% Make entry in variables index -\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}% - \defargscommonending -\endgroup} -\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} - -% @deftypevr {Global Flag} int enable - -\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} - -\def\deftypevrheader #1#2#3{\dovarind#3 \relax% -\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1} - \defargscommonending -\endgroup} - -% Now define @deftp -% Args are printed in bold, a slight difference from @defvar. - -\def\deftpargs #1{\bf \defvarargs{#1}} - -% @deftp Class window height width ... - -\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} - -\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% -\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} - -% These definitions are used if you use @defunx (etc.) -% anywhere other than immediately after a @defun or @defunx. -% -\def\defcvx#1 {\errmessage{@defcvx in invalid context}} -\def\deffnx#1 {\errmessage{@deffnx in invalid context}} -\def\defivarx#1 {\errmessage{@defivarx in invalid context}} -\def\defmacx#1 {\errmessage{@defmacx in invalid context}} -\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\defopx#1 {\errmessage{@defopx in invalid context}} -\def\defspecx#1 {\errmessage{@defspecx in invalid context}} -\def\deftpx#1 {\errmessage{@deftpx in invalid context}} -\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} -\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} -\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} -\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}} -\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} -\def\defunx#1 {\errmessage{@defunx in invalid context}} -\def\defvarx#1 {\errmessage{@defvarx in invalid context}} -\def\defvrx#1 {\errmessage{@defvrx in invalid context}} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scanmacro#1{% - \begingroup \newlinechar`\^^M - % Undo catcode changes of \startcontents and \doprintindex - \catcode`\@=0 \catcode`\\=\other \escapechar=`\@ - % Append \endinput to make sure that TeX does not see the ending newline. - \toks0={#1\endinput}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \let\xeatspaces\eatspaces - \input \jobname.tmp - \endgroup -} -\else -\def\scanmacro#1{% -\begingroup \newlinechar`\^^M -% Undo catcode changes of \startcontents and \doprintindex -\catcode`\@=0 \catcode`\\=\other \escapechar=`\@ -\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} -\fi - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? -\def\macrolist{} % List of all defined macros in the form - % \do\macro1\do\macro2... - -% Utility routines. -% Thisdoes \let #1 = #2, except with \csnames. -\def\cslet#1#2{% -\expandafter\expandafter -\expandafter\let -\expandafter\expandafter -\csname#1\endcsname -\csname#2\endcsname} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \. - -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. - -\def\macrobodyctxt{% - \catcode`\~=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\+=\other - \catcode`\{=\other - \catcode`\}=\other - \catcode`\@=\other - \catcode`\^^M=\other - \usembodybackslash} - -\def\macroargctxt{% - \catcode`\~=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\+=\other - \catcode`\@=\other - \catcode`\\=\other} - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. - -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0% - \else - \expandafter\parsemargdef \argl;% - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - % Add the macroname to \macrolist - \toks0 = \expandafter{\macrolist\do}% - \xdef\macrolist{\the\toks0 - \expandafter\noexpand\csname\the\macname\endcsname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\def\unmacro{\parsearg\dounmacro} -\def\dounmacro#1{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\do\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx#1\relax - % remove this - \else - \noexpand\do \noexpand #1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% <parameter list> is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname #1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.blah for each blah -% in the params list, to be ##N where N is the position in that list. -% That gets used by \mbodybackslash (above). - -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. - -\def\parsemargdef#1;{\paramno=0\def\paramlist{}% - \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1% - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) - -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% - -% This defines the macro itself. There are six cases: recursive and -% nonrecursive macros of zero, one, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \fi - \fi} - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg) -\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \next} - -% We mant to disable all macros during \shipout so that they are not -% expanded by \write. -\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% - \edef\next{\macrolist}\expandafter\endgroup\next} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Just make them active and then expand them all to nothing. -\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{\ignoreactivespaces -\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=% - \expandafter\noexpand\csname#2\endcsname}% -\expandafter\endgroup\next} - - -\message{cross references,} -% @xref etc. - -\newwrite\auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's job is to define \lastnode. -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx [#1,]} -\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} -\let\nwnode=\node -\let\lastnode=\relax - -% The sectioning commands (@chapter, etc.) call these. -\def\donoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Ysectionnumberandtype}% - \global\let\lastnode=\relax - \fi -} -\def\unnumbnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% - \global\let\lastnode=\relax - \fi -} -\def\appendixnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Yappendixletterandtype}% - \global\let\lastnode=\relax - \fi -} - - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), namely NAME-title (the corresponding @chapter/etc. name), -% NAME-pg (the page number), and NAME-snt (section number and type). -% Called from \foonoderef. -% -% We have to set \indexdummies so commands such as @code in a section -% title aren't expanded. It would be nicer not to expand the titles in -% the first place, but there's so many layers that that is hard to do. -% -% Likewise, use \turnoffactive so that punctuation chars such as underscore -% and backslash work in node names. -% -\def\setref#1#2{{% - \atdummies - \pdfmkdest{#1}% - % - \turnoffactive - \dosetq{#1-title}{Ytitle}% - \dosetq{#1-pg}{Ypagenumber}% - \dosetq{#1-snt}{#2}% -}} - -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printednodename{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual}% - \setbox0=\hbox{\printednodename}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printednodename{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printednodename{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printednodename{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printednodename{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifpdf - \leavevmode - \getfilename{#4}% - {\turnoffactive \otherbackslash - \ifnum\filenamelength>0 - \startlink attr{/Border [0 0 0]}% - goto file{\the\filename.pdf} name{#1}% - \else - \startlink attr{/Border [0 0 0]}% - goto name{#1}% - \fi - }% - \linkcolor - \fi - % - \ifdim \wd1 > 0pt - \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive \otherbackslash - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % [mynode], - [\printednodename],\space - % page 3 - \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% - \fi - \endlink -\endgroup} - -% \dosetq is called from \setref to do the actual \write (\iflinks). -% -\def\dosetq#1#2{% - {\let\folio=0% - \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% - \iflinks \next \fi - }% -} - -% \internalsetq{foo}{page} expands into -% CHARACTERS @xrdef{foo}{...expansion of \page...} -\def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}} - -% Things to be expanded by \internalsetq. -% -\def\Ypagenumber{\folio} -\def\Ytitle{\thissection} -\def\Ynothing{} -\def\Ysectionnumberandtype{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -\def\Yappendixletterandtype{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{\the\inputlineno:\space} -\fi - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname X#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. -% -\def\xrdef#1{\expandafter\gdef\csname X#1\endcsname} - -% Read the last existing aux file, if any. No error if none exists. -\def\readauxfile{\begingroup - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % Make the characters 128-255 be printing characters - {% - \count 1=128 - \def\loop{% - \catcode\count 1=\other - \advance\count 1 by 1 - \ifnum \count 1<256 \loop \fi - }% - }% - % - % Turn off \ as an escape so we do not lose on - % entries which were dumped with control sequences in their names. - % For example, @xrdef{$\leq $-fun}{page ...} made by @defun ^^ - % Reference to such entries still does not work the way one would wish, - % but at least they do not bomb out when the aux file is read in. - \catcode`\\=\other - % - % @ is our escape character in .aux files. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 - % - \openin 1 \jobname.aux - \ifeof 1 \else - \closein 1 - \input \jobname.aux - \global\havexrefstrue - \global\warnedobstrue - \fi - % Open the new aux file. TeX will close it automatically at exit. - \openout\auxfile=\jobname.aux -\endgroup} - - -% Footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only. -\let\footnotestyle=\comment - -\let\ptexfootnote=\footnote - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset and anything else that uses -% \parseargline fail inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -% The start of the footnote looks usually like this: -\gdef\startfootins{\insert\footins\bgroup} -% -% ... but this macro is redefined inside @multitable. -% -\gdef\dofootnote{% - \startfootins - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - \closein 1 - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing this stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \nobreak\bigskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \line\bgroup\hss - \fi - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode \hss \egroup \bigbreak \fi % space after the image -\endgroup} - - -\message{localization,} -% and i18n. - -% @documentlanguage is usually given very early, just after -% @setfilename. If done too late, it may not override everything -% properly. Single argument is the language abbreviation. -% It would be nice if we could set up a hyphenation file here. -% -\def\documentlanguage{\parsearg\dodocumentlanguage} -\def\dodocumentlanguage#1{% - \tex % read txi-??.tex file in plain TeX. - % Read the file if it exists. - \openin 1 txi-#1.tex - \ifeof1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \let\temp = \relax - \else - \def\temp{\input txi-#1.tex }% - \fi - \temp - \endgroup -} -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? In the current directory -should work if nowhere else does.} - - -% @documentencoding should change something in TeX eventually, most -% likely, but for now just recognize it. -\let\documentencoding = \comment - - -% Page size parameters. -% -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be so finicky about underfull hboxes, either. -\hbadness = 2000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; -% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) -% physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{46\baselineskip}{6in}% - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.5 (or so) format. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {\voffset}{.25in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{51\baselineskip}{160mm} - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\def\pagesizes{\parsearg\pagesizesxxx} -\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1 - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\catcode`\$=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} -\def\normaldollar{$}%$ font-lock fix - -% This macro is used to make a character print one way in ttfont -% where it can probably just be output, and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% Set up an active definition for =, but don't enable it most of the time. -{\catcode`\==\active -\global\def={{\tt \char 61}}} - -\catcode`+=\active -\catcode`\_=\active - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -\catcode`\@=0 - -% \rawbackslashxx outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\rawbackslashxx=`\\ - -% \rawbackslash defines an active \ to do \rawbackslashxx. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. -{\catcode`\\=\active - @gdef@rawbackslash{@let\=@rawbackslashxx} - @gdef@otherbackslash{@let\=@realbackslash} -} - -% \realbackslash is an actual character `\' with catcode other. -{\catcode`\\=\other @gdef@realbackslash{\}} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\rawbackslashxx}} - -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{% - @let"=@normaldoublequote - @let\=@realbackslash - @let~=@normaltilde - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater - @let+=@normalplus - @let$=@normaldollar %$ font-lock fix -} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. (Thus, \ is not expandable when this is in -% effect.) -% -@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also back turn on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These look ok in all fonts, so just make them not special. -@catcode`@& = @other -@catcode`@# = @other -@catcode`@% = @other - -@c Set initial fonts. -@textfonts -@rm - - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: +texinfo.tex.20030205
\ No newline at end of file diff --git a/examples/scripts/adventure.sh.save1 b/examples/scripts/adventure.sh.save1 new file mode 100755 index 00000000..4e223939 --- /dev/null +++ b/examples/scripts/adventure.sh.save1 @@ -0,0 +1,549 @@ +#!/bin/bash +# ash -- "Adventure shell" +# last edit: 86/04/21 D A Gwyn +# SCCS ID: @(#)ash.sh 1.4 + +OPATH=$PATH + +ask() +{ + echo -n "$@" '[y/n] ' + read ans + + case "$ans" in + y*|Y*) + return 0 + ;; + *) + return 1 + ;; + esac +} + +CAT=${PAGER:-more} + +ash_inst() +{ + cat <<- EOF + + Instructions for the Adventure shell + + Welcome to the Adventure shell! In this exploration of the UNIX file + system, I will act as your eyes and hands. As you move around, I will + describe whatever is visible and will carry out your commands. The + general form of a command is + Verb Object Extra_stuff. + Most commands pay no attention to the "Extra_stuff", and many do not + need an "Object". A typical command is + get all + which picks up all files in the current "room" (directory). You can + find out what you are carrying by typing the command + inventory + The command "help" results in a full description of all commands that I + understand. To quit the Adventure shell, type + quit + + There are UNIX monsters lurking in the background. These are also + known as "commands with arguments". + + Good luck! + EOF +} + +ash_help() +{ +echo "I understand the following commands (synonyms in parentheses):" +echo "" + +echo "change OBJECT to NEW_NAME changes the name of the object" +echo "clone OBJECT as NEW_NAME duplicates the object" +echo "drop OBJECTS leaves the objects in the room" +echo "enter (go) PASSAGE takes the labeled passage" +echo "examine OBJECTS describes the objects in detail" +echo "feed OBJECT to MONSTER stuffs the object into a UNIX monster" +echo "get (take) OBJECTS picks up the specified objects" +echo "gripe (bug) report a problem with the Adventure shell" +echo "help prints this summary" +echo "inventory (i) tells what you are carrying" +echo "kill (destroy) OBJECTS destroys the objects" +echo "look (l) describes the room, including hidden objects" +echo "open (read) OBJECT shows the contents of an object" +echo "quit (exit) leaves the Adventure shell" +echo "resurrect OBJECTS attempts to restore dead objects" +echo "steal OBJECT from MONSTER obtains the object from a UNIX monster" +echo "throw OBJECT at daemon feeds the object to the printer daemon" +echo "up takes the overhead passage" +echo "wake MONSTER awakens a UNIX monster" +echo "where (w) tells you where you are" +echo "xyzzy moves you to your home" +} + +MAINT=chet@ins.cwru.edu + +PATH=/usr/ucb:/bin:/usr/bin:/usr/local/bin:. +export PATH + +trap 'echo Ouch!' 2 3 +#trap '' 18 # disable Berkeley job control + +ash_lk(){ echo " $1 " | fgrep " $2 " >&- 2>&-; } +ash_pr(){ echo $* | tr ' ' '\012' | pr -5 -t -w75 -l$[ ( $# + 4 ) / 5 ]; } +ash_rm(){ echo " $1 " | sed -e "s/ $2 / /" -e 's/^ //' -e 's/ $//'; } + +# enable history, bang history expansion, and emacs editing +set -o history +set -o histexpand +set -o emacs + +cd +LIM=.limbo # $HOME/$LIM contains "destroyed" objects +mkdir $LIM >&- 2>&- +KNAP=.knapsack # $HOME/$KNAP contains objects being "carried" +if [ ! -d $KNAP ] +then mkdir $KNAP >&- 2>&- + if [ $? = 0 ] + then echo 'You found a discarded empty knapsack.' + else echo 'You have no knapsack to carry things in.' + exit 1 + fi +else echo 'One moment while I peek in your old knapsack...' +fi + +kn=`echo \`ls -a $KNAP | sed -e '/^\.$/d' -e '/^\.\.$/d'\`` + +if ask 'Welcome to the Adventure shell! Do you need instructions?' +then + ash_inst + echo -n 'Type a newline to continue: ' + read +fi + +wiz=false +cha=false +prev=$LIM +while : +do room=`pwd` + if [ $room != $prev ] + then if [ $room = $HOME ] + then echo 'You are in your own home.' + else echo "You have entered $room." + fi + exs= + obs= + hexs= + hobs= + f=false + for i in `ls -a` + do case $i in + .|..) ;; + .*) if [ -f $i ] + then hobs="$hobs $i" + elif [ -d $i ] + then hexs="$hexs $i" + else f=true + fi + ;; + *) if [ -f $i ] + then obs="$obs $i" + elif [ -d $i ] + then exs="$exs $i" + else f=true + fi + ;; + esac + done + if [ "$obs" ] + then echo 'This room contains:' + ash_pr $obs + else echo 'The room looks empty.' + fi + if [ "$exs" ] + then echo 'There are exits labeled:' + ash_pr $exs + echo 'as well as a passage overhead.' + else echo 'There is a passage overhead.' + fi + if sh -c $f + then echo 'There are shadowy figures in the corner.' + fi + prev=$room + fi + + read -e -p '-advsh> ' verb obj x # prompt is '-advsh> ' + if [ $? != 0 ] + then verb=quit # EOF + fi + + case $verb in + change) if [ "$obj" ] + then if ash_lk "$obs $hobs" "$obj" + then set -- $x + case "$1" in + to) if [ "$2" ] + then if [ -f $2 ] + then echo "You must destroy $2 first." + set -- + fi + if [ "$2" ] + then if mv $obj $2 >&- 2>&- + then echo "The $obj shimmers and turns into $2." + obs=`ash_rm "$2 $obs" "$obj"` + else echo "There is a cloud of smoke but the $obj is unchanged." + fi + fi + else echo 'To what?' + fi + ;; + *) echo "Change $obj to what?" + ;; + esac + else if ash_lk "$kn" "$obj" + then echo 'You must drop it first.' + else echo "I see no $obj here." + fi + fi + else echo 'Change what?' + fi + ;; + clone) if [ "$obj" ] + then if ash_lk "$obs $hobs" "$obj" + then if [ ! -r $obj ] + then echo "The $obj does not wish to be cloned." + else set -- $x + case "$1" in + as) if [ "$2" ] + then if [ -f $2 ] + then echo "You must destroy $2 first." + else if cp $obj $2 >&- 2>&- + then echo "Poof! When the smoke clears, you see the new $2." + obs="$obs $2" + else echo 'You hear a dull thud but no clone appears.' + fi + fi + else echo 'As what?' + fi + ;; + *) echo "Clone $obj as what?" + ;; + esac + fi + else if ash_lk "$kn" "$obj" + then echo 'You must drop it first.' + else echo "I see no $obj here." + fi + fi + else echo 'Clone what?' + fi + ;; + drop) if [ "$obj" ] + then for it in $obj $x + do if ash_lk "$kn" "$it" + then if [ -w $it ] + then echo "You must destroy $it first." + else if mv $HOME/$KNAP/$it $it >&- 2>&- + then echo "$it: dropped." + kn=`ash_rm "$kn" "$it"` + obs=`echo $it $obs` + else echo "The $it is caught in your knapsack." + fi + fi + else echo "You're not carrying the $it!" + fi + done + else echo 'Drop what?' + fi + ;; + enter|go) if [ "$obj" ] + then if [ $obj != up ] + then if ash_lk "$exs $hexs" "$obj" + then if [ -x $obj ] + then if cd $obj + then echo 'You squeeze through the passage.' + else echo "You can't go that direction." + fi + else echo 'An invisible force blocks your way.' + fi + else echo 'I see no such passage.' + fi + else if cd .. + then echo 'You struggle upwards.' + else echo "You can't reach that high." + fi + fi + else echo 'Which passage?' + fi + ;; + examine) if [ "$obj" ] + then if [ $obj = all ] + then $obj=`echo $obs $exs` + x= + fi + for it in $obj $x + do if ash_lk "$obs $hobs $exs $hexs" "$it" + then echo "Upon close inspection of the $it, you see:" + ls -ld $it 2>&- + if [ $? != 0 ] + then echo "-- when you look directly at the $it, it vanishes." + fi + else if ash_lk "$kn" "$it" + then echo 'You must drop it first.' + else echo "I see no $it here." + fi + fi + done + else echo 'Examine what?' + fi + ;; + feed) if [ "$obj" ] + then if ash_lk "$obs $hobs" "$obj" + then set -- $x + case "$1" in + to) if [ "$2" ] + then shift + if PATH=$OPATH $* <$obj 2>&- + then echo "The $1 monster devours your $obj." + if rm -f $obj >&- 2>&- + then obs=`ash_rm "$obs" "$obj"` + else echo 'But he spits it back up.' + fi + else echo "The $1 monster holds his nose in disdain." + fi + else echo 'To what?' + fi + ;; + *) echo "Feed $obj to what?" + ;; + esac + else if ash_lk "$kn" "$obj" + then echo 'You must drop it first.' + else echo "I see no $obj here." + fi + fi + else echo 'Feed what?' + fi + ;; + get|take) if [ "$obj" ] + then if [ $obj = all ] + then obj="$obs" + x= + fi + for it in $obj $x + do if ash_lk "$obs $hobs" "$it" + then if ash_lk "$kn" "$it" + then echo 'You already have one.' + else if mv $it $HOME/$KNAP/$it >&- 2>&- + then echo "$it: taken." + kn="$it $kn" + obs=`ash_rm "$obs" "$it"` + else echo "The $it is too heavy." + fi + fi + else echo "I see no $it here." + fi + done + else echo 'Get what?' + fi + ;; + gripe|bug) echo 'Please describe the problem and your situation at the time it failed.\nEnd the bug report with a line containing just a Ctrl-D.' + cat | mail $MAINT -s 'ash bug' + echo 'Thank you!' + ;; + help) ash_help + ;; + inventory|i) if [ "$kn" ] + then echo 'Your knapsack contains:' + ash_pr $kn + else echo 'You are poverty-stricken.' + fi + ;; + kill|destroy) if [ "$obj" ] + then if [ $obj = all ] + then x= + if ask "Do you really want to attempt to $verb them all?" + then obj=`echo $obs` + else echo 'Chicken!' + obj= + fi + fi + for it in $obj $x + do if ash_lk "$obs $hobs" "$it" + then if mv $it $HOME/$LIM <&- >&- 2>&- + then if [ $verb = kill ] + then echo "The $it cannot defend himself; he dies." + else echo "You have destroyed the $it; it vanishes." + fi + obs=`ash_rm "$obs" "$it"` + else if [ $verb = kill ] + then echo "Your feeble blows are no match for the $it." + else echo "The $it is indestructible." + fi + fi + else if ash_lk "$kn" "$it" + then echo "You must drop the $it first." + found=false + else echo "I see no $it here." + fi + fi + done + else echo 'Kill what?' + fi + ;; + look|l) obs=`echo $obs $hobs` + hobs= + if [ "$obs" ] + then echo 'The room contains:' + ash_pr $obs + else echo 'The room is empty.' + fi + exs=`echo $exs $hexs` + hexs= + if [ "$exs" ] + then echo 'There are exits plainly labeled:' + ash_pr $exs + echo 'and a passage directly overhead.' + else echo 'The only exit is directly overhead.' + fi + ;; + magic) if [ "$obj" = mode ] + then if sh -c $cha + then echo 'You had your chance and you blew it.' + else if ask 'Are you a wizard?' + then echo -n 'Prove it! Say the magic word: ' + read obj + if [ "$obj" = armadillo ] + then echo 'Yes, master!!' + wiz=true + else echo "Homie says: I don't think so" + cha=true + fi + else echo "I didn't think so." + fi + fi + else echo 'Nice try.' + fi + ;; + open|read) if [ "$obj" ] + then if ash_lk "$obs $hobs" "$obj" + then if [ -r $obj ] + then if [ -s $obj ] + then echo "Opening the $obj reveals:" + $CAT < $obj + if [ $? != 0 ] + then echo '-- oops, you lost the contents!' + fi + else echo "There is nothing inside the $obj." + fi + else echo "You do not have the proper tools to open the $obj." + fi + else if ash_lk "$kn" "$obj" + then echo 'You must drop it first.' + found=false + else echo "I see no $obj here." + fi + fi + else echo 'Open what?' + fi + ;; + quit|exit) if ask 'Do you really want to quit now?' + then if [ "$kn" ] + then echo 'The contents of your knapsack will still be there next time.' + fi + rm -rf $HOME/$LIM + echo 'See you later!' + exit 0 + fi + ;; + resurrect) if [ "$obj" ] + then for it in $obj $x + do if ash_lk "$obs $hobs" "$it" + then echo "The $it is already alive and well." + else if mv $HOME/$LIM/$it $it <&- >&- 2>&- + then echo "The $it staggers to his feet." + obs=`echo $it $obs` + else echo "There are sparks but no $it appears." + fi + fi + done + else echo 'Resurrect what?' + fi + ;; + steal) if [ "$obj" ] + then if ash_lk "$obs $hobs" "$obj" + then echo 'There is already one here.' + else set -- $x + case "$1" in + from) if [ "$2" ] + then shift + if PATH=$OPATH $* >$obj 2>&- + then echo "The $1 monster drops the $obj." + obs=`echo $obj $obs` + else echo "The $1 monster runs away as you approach." + rm -f $obj >&- 2>&- + fi + else echo 'From what?' + fi + ;; + *) echo "Steal $obj from what?" + ;; + esac + fi + else echo 'Steal what?' + fi + ;; + throw) if [ "$obj" ] + then if ash_lk "$obs $hobs" "$obj" + then set -- $x + case "$1" in + at) case "$2" in + daemon) if sh -c "lpr -r $obj" + then echo "The daemon catches the $obj, turns it into paper,\nand leaves it in the basket." + obs=`ash_rm "$obs" "$obj"` + else echo "The daemon is nowhere to be found." + fi + ;; + *) echo 'At what?' + ;; + esac + ;; + *) echo "Throw $obj at what?" + ;; + esac + else if ash_lk "$kn" "$obj" + then echo 'It is in your knapsack.' + found=false + else echo "I see no $obj here." + fi + fi + else echo 'Throw what?' + fi + ;; + u|up) if cd .. + then echo 'You pull yourself up a level.' + else echo "You can't reach that high." + fi + ;; + wake) if [ "$obj" ] + then echo "You awaken the $obj monster:" + PATH=$OPATH $obj $x + echo 'The monster slithers back into the darkness.' + else echo 'Wake what?' + fi + ;; + w|where) echo "You are in $room." + ;; + xyzzy) if cd + then echo 'A strange feeling comes over you.' + else echo 'Your spell fizzles out.' + fi + ;; + *) if [ "$verb" ] + then if sh -c $wiz + then PATH=$OPATH $verb $obj $x + else echo "I don't know how to \"$verb\"." + echo 'Type "help" for assistance.' + fi + else echo 'Say something!' + fi + ;; + esac +done @@ -362,6 +362,9 @@ extern int sh_mktmpfd __P((char *, int, char **)); #undef xstrchr extern char *xstrchr __P((const char *, int)); +/* declarations for functions defined in lib/sh/zcatfd.c */ +extern int zcatfd __P((int, int, char *)); + /* declarations for functions defined in lib/sh/zread.c */ extern ssize_t zread __P((int, char *, size_t)); extern ssize_t zreadintr __P((int, char *, size_t)); @@ -39,6 +39,8 @@ #include "bashintl.h" #include "shell.h" +#include "test.h" + #include <tilde/tilde.h> #if !defined (errno) diff --git a/include/memalloc.h.save b/include/memalloc.h.save new file mode 100644 index 00000000..a1a27069 --- /dev/null +++ b/include/memalloc.h.save @@ -0,0 +1,58 @@ +/* memalloc.h -- consolidate code for including alloca.h or malloc.h and + defining alloca. */ + +/* Copyright (C) 1993 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. + + Bash is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + Bash is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License along + with Bash; see the file COPYING. If not, write to the Free Software + Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ + +#if !defined (_MEMALLOC_H_) +# define _MEMALLOC_H_ + +#if defined (sparc) && defined (sun) && !defined (HAVE_ALLOCA_H) +# define HAVE_ALLOCA_H +#endif + +#if defined (__GNUC__) && !defined (HAVE_ALLOCA) +# define HAVE_ALLOCA +#endif + +#if defined (HAVE_ALLOCA_H) && !defined (HAVE_ALLOCA) +# define HAVE_ALLOCA +#endif /* HAVE_ALLOCA_H && !HAVE_ALLOCA */ + +#if defined (__GNUC__) && !defined (C_ALLOCA) +# undef alloca +# define alloca __builtin_alloca +#else /* !__GNUC__ || C_ALLOCA */ +# if defined (HAVE_ALLOCA_H) && !defined (C_ALLOCA) +# if defined (IBMESA) +# include <malloc.h> +# else /* !IBMESA */ +# include <alloca.h> +# endif /* !IBMESA */ +# else /* !HAVE_ALLOCA_H || C_ALLOCA */ +# if defined (__hpux) && defined (__STDC__) && !defined (alloca) +extern void *alloca (); +# else +# if !defined (alloca) +extern char *alloca (); +# endif /* !alloca */ +# endif /* !__hpux || !__STDC__ && !alloca */ +# endif /* !HAVE_ALLOCA_H || C_ALLOCA */ +#endif /* !__GNUC__ || C_ALLOCA */ + +#endif /* _MEMALLOC_H_ */ diff --git a/lib/malloc/malloc.c.save b/lib/malloc/malloc.c.save new file mode 100644 index 00000000..39846ec3 --- /dev/null +++ b/lib/malloc/malloc.c.save @@ -0,0 +1,1213 @@ +/* malloc.c - dynamic memory allocation for bash. */ + +/* Copyright (C) 1985, 1987, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + +In other words, you are welcome to use, share and improve this program. +You are forbidden to forbid anyone else to use, share and improve +what you give them. Help stamp out software-hoarding! */ + +/* + * @(#)nmalloc.c 1 (Caltech) 2/21/82 + * + * U of M Modified: 20 Jun 1983 ACT: strange hacks for Emacs + * + * Nov 1983, Mike@BRL, Added support for 4.1C/4.2 BSD. + * + * This is a very fast storage allocator. It allocates blocks of a small + * number of different sizes, and keeps free lists of each size. Blocks + * that don't exactly fit are passed up to the next larger size. In this + * implementation, the available sizes are (2^n)-4 (or -16) bytes long. + * This is designed for use in a program that uses vast quantities of + * memory, but bombs when it runs out. To make it a little better, it + * warns the user when he starts to get near the end. + * + * June 84, ACT: modified rcheck code to check the range given to malloc, + * rather than the range determined by the 2-power used. + * + * Jan 85, RMS: calls malloc_warning to issue warning on nearly full. + * No longer Emacs-specific; can serve as all-purpose malloc for GNU. + * You should call malloc_init to reinitialize after loading dumped Emacs. + * Call malloc_stats to get info on memory stats if MALLOC_STATS turned on. + * realloc knows how to return same block given, just changing its size, + * if the power of 2 is correct. + */ + +/* + * nextf[i] is the pointer to the next free block of size 2^(i+3). The + * smallest allocatable block is 8 bytes. The overhead information will + * go in the first int of the block, and the returned pointer will point + * to the second. + */ + +/* Define MEMSCRAMBLE to have free() write 0xcf into memory as it's freed, to + uncover callers that refer to freed memory, and to have malloc() write 0xdf + into memory as it's allocated to avoid referring to previous contents. */ + +/* SCO 3.2v4 getcwd and possibly other libc routines fail with MEMSCRAMBLE; + handled by configure. */ + +#if defined (HAVE_CONFIG_H) +# include <config.h> +#endif /* HAVE_CONFIG_H */ + +#if defined (SHELL) +# include "bashtypes.h" +# include "stdc.h" +#else +# include <sys/types.h> +#endif + +#if defined (HAVE_UNISTD_H) +# include <unistd.h> +#endif + +/* Determine which kind of system this is. */ +#include <signal.h> + +#if defined (HAVE_STRING_H) +# include <string.h> +#else +# include <strings.h> +#endif + +#include <stdio.h> + +/* Define getpagesize () if the system does not. */ +#ifndef HAVE_GETPAGESIZE +# include "getpagesize.h" +#endif + +#include "imalloc.h" +#ifdef MALLOC_STATS +# include "mstats.h" +#endif +#ifdef MALLOC_REGISTER +# include "table.h" +#endif +#ifdef MALLOC_WATCH +# include "watch.h" +#endif + +/* System-specific omissions. */ +#ifdef HPUX +# define NO_VALLOC +#endif + +#define NBUCKETS 30 + +#define ISALLOC ((char) 0xf7) /* magic byte that implies allocation */ +#define ISFREE ((char) 0x54) /* magic byte that implies free block */ + /* this is for error checking only */ +#define ISMEMALIGN ((char) 0xd6) /* Stored before the value returned by + memalign, with the rest of the word + being the distance to the true + beginning of the block. */ + + +/* We have a flag indicating whether memory is allocated, an index in + nextf[], a size field, and a sentinel value to determine whether or + not a caller wrote before the start of allocated memory; to realloc() + memory we either copy mh_nbytes or just change mh_nbytes if there is + enough room in the block for the new size. Range checking is always + done. */ +union mhead { + bits64_t mh_align; /* 8 */ + struct { + char mi_alloc; /* ISALLOC or ISFREE */ /* 1 */ + char mi_index; /* index in nextf[] */ /* 1 */ + /* Remainder are valid only when block is allocated */ + u_bits16_t mi_magic2; /* should be == MAGIC2 */ /* 2 */ + u_bits32_t mi_nbytes; /* # of bytes allocated */ /* 4 */ + } minfo; +}; +#define mh_alloc minfo.mi_alloc +#define mh_index minfo.mi_index +#define mh_nbytes minfo.mi_nbytes +#define mh_magic2 minfo.mi_magic2 + +#define MOVERHEAD sizeof(union mhead) +#define MALIGN_MASK 7 /* one less than desired alignment */ + +/* Access free-list pointer of a block. + It is stored at block + sizeof (char *). + This is not a field in the minfo structure member of union mhead + because we want sizeof (union mhead) + to describe the overhead for when the block is in use, + and we do not want the free-list pointer to count in that. */ + +#define CHAIN(a) \ + (*(union mhead **) (sizeof (char *) + (char *) (a))) + +/* To implement range checking, we write magic values in at the beginning + and end of each allocated block, and make sure they are undisturbed + whenever a free or a realloc occurs. */ + +/* Written in the 2 bytes before the block's real space (-4 bytes) */ +#define MAGIC2 0x5555 +#define MSLOP 4 /* 4 bytes extra for u_bits32_t size */ + +/* How many bytes are actually allocated for a request of size N -- + rounded up to nearest multiple of 8 after accounting for malloc + overhead. */ +#define ALLOCATED_BYTES(n) \ + (((n) + MOVERHEAD + MSLOP + MALIGN_MASK) & ~MALIGN_MASK) + +#define ASSERT(p) \ + do \ + { \ + if (!(p)) xbotch((PTR_T)0, ERR_ASSERT_FAILED, __STRING(p), file, line); \ + } \ + while (0) + +/* Minimum and maximum bucket indices for block splitting (and to bound + the search for a block to split). */ +#define SPLIT_MIN 2 /* XXX - was 3 */ +#define SPLIT_MID 11 +#define SPLIT_MAX 14 + +/* Minimum and maximum bucket indices for block coalescing. */ +#define COMBINE_MIN 2 +#define COMBINE_MAX (pagebucket - 1) /* XXX */ + +#define LESSCORE_MIN 10 +#define LESSCORE_FRC 13 + +#define STARTBUCK 1 + +/* Flags for the internal functions. */ +#define MALLOC_WRAPPER 0x01 /* wrapper function */ +#define MALLOC_INTERNAL 0x02 /* internal function calling another */ +#define MALLOC_NOTRACE 0x04 /* don't trace this allocation or free */ +#define MALLOC_NOREG 0x08 /* don't register this allocation or free */ + +/* Future use. */ +#define ERR_DUPFREE 0x01 +#define ERR_UNALLOC 0x02 +#define ERR_UNDERFLOW 0x04 +#define ERR_ASSERT_FAILED 0x08 + +/* Evaluates to true if NB is appropriate for bucket NU. NB is adjusted + appropriately by the caller to account for malloc overhead. This only + checks that the recorded size is not too big for the bucket. We + can't check whether or not it's in between NU and NU-1 because we + might have encountered a busy bucket when allocating and moved up to + the next size. */ +#define IN_BUCKET(nb, nu) ((nb) <= binsizes[(nu)]) + +/* Use this when we want to be sure that NB is in bucket NU. */ +#define RIGHT_BUCKET(nb, nu) \ + (((nb) > binsizes[(nu)-1]) && ((nb) <= binsizes[(nu)])) + +/* nextf[i] is free list of blocks of size 2**(i + 3) */ + +static union mhead *nextf[NBUCKETS]; + +/* busy[i] is nonzero while allocation of block size i is in progress. */ + +static char busy[NBUCKETS]; + +static int pagesz; /* system page size. */ +static int pagebucket; /* bucket for requests a page in size */ +static int maxbuck; /* highest bucket receiving allocation request. */ + +static char *memtop; /* top of heap */ + +static unsigned long binsizes[NBUCKETS] = { + 8UL, 16UL, 32UL, 64UL, 128UL, 256UL, 512UL, 1024UL, 2048UL, 4096UL, + 8192UL, 16384UL, 32768UL, 65536UL, 131072UL, 262144UL, 524288UL, + 1048576UL, 2097152UL, 4194304UL, 8388608UL, 16777216UL, 33554432UL, + 67108864UL, 134217728UL, 268435456UL, 536870912UL, 1073741824UL, + 2147483648UL, 4294967296UL-1 +}; + +/* binsizes[x] == (1 << ((x) + 3)) */ +#define binsize(x) binsizes[(x)] + +/* Declarations for internal functions */ +static PTR_T internal_malloc __P((size_t, const char *, int, int)); +static PTR_T internal_realloc __P((PTR_T, size_t, const char *, int, int)); +static void internal_free __P((PTR_T, const char *, int, int)); +static PTR_T internal_memalign __P((unsigned int, size_t, const char *, int, int)); +#ifndef NO_CALLOC +static PTR_T internal_calloc __P((size_t, size_t, const char *, int, int)); +static void internal_cfree __P((PTR_T, const char *, int, int)); +#endif +#ifndef NO_VALLOC +static PTR_T internal_valloc __P((size_t, const char *, int, int)); +#endif + +#if defined (botch) +extern void botch (); +#else +static void botch __P((const char *, const char *, int)); +#endif +static void xbotch __P((PTR_T, int, const char *, const char *, int)); + +#if !HAVE_DECL_SBRK +extern char *sbrk (); +#endif /* !HAVE_DECL_SBRK */ + +#ifdef SHELL +extern int interrupt_immediately; +extern int signal_is_trapped __P((int)); +#endif + +#ifdef MALLOC_STATS +struct _malstats _mstats; +#endif /* MALLOC_STATS */ + +/* Debugging variables available to applications. */ +int malloc_flags = 0; /* future use */ +int malloc_trace = 0; /* trace allocations and frees to stderr */ +int malloc_register = 0; /* future use */ + +#ifdef MALLOC_TRACE +char _malloc_trace_buckets[NBUCKETS]; + +/* These should really go into a header file. */ +extern void mtrace_alloc __P((const char *, PTR_T, size_t, const char *, int)); +extern void mtrace_free __P((PTR_T, int, const char *, int)); +#endif + +#if !defined (botch) +static void +botch (s, file, line) +{ + fprintf (stderr, "malloc: failed assertion: %s\n", s); + (void)fflush (stderr); + abort (); +} +#endif + +/* print the file and line number that caused the assertion failure and + call botch() to do whatever the application wants with the information */ +static void +xbotch (mem, e, s, file, line) + PTR_T mem; + int e; + const char *s; + const char *file; + int line; +{ + fprintf (stderr, "\r\nmalloc: %s:%d: assertion botched\r\n", + file ? file : "unknown", line); +#ifdef MALLOC_REGISTER + if (mem != NULL && malloc_register) + mregister_describe_mem (mem, stderr); +#endif + (void)fflush (stderr); + botch(s, file, line); +} + +/* Coalesce two adjacent free blocks off the free list for size NU - 1, + as long as we can find two adjacent free blocks. nextf[NU -1] is + assumed to not be busy; the caller (morecore()) checks for this. */ +static void +bcoalesce (nu) + register int nu; +{ + register union mhead *mp, *mp1, *mp2; + register int nbuck; + unsigned long siz; + + nbuck = nu - 1; + if (nextf[nbuck] == 0) + return; + + siz = binsize (nbuck); + + mp2 = mp1 = nextf[nbuck]; + mp = CHAIN (mp1); + while (mp && mp != (union mhead *)((char *)mp1 + siz)) + { + mp2 = mp1; + mp1 = mp; + mp = CHAIN (mp); + } + if (mp == 0) + return; + + /* OK, now we have mp1 pointing to the block we want to add to nextf[NU]. + CHAIN(mp2) must equal mp1. Check that mp1 and mp are adjacent. */ + if (mp2 != mp1 && CHAIN(mp2) != mp1) + xbotch ((PTR_T)0, 0, "bcoalesce: CHAIN(mp2) != mp1", (char *)NULL, 0); + +#ifdef MALLOC_DEBUG + if (CHAIN (mp1) != (union mhead *)((char *)mp1 + siz)) + return; /* not adjacent */ +#endif + +#ifdef MALLOC_STATS + _mstats.tbcoalesce++; + _mstats.ncoalesce[nbuck]++; +#endif + + /* Since they are adjacent, remove them from the free list */ + if (mp1 == nextf[nbuck]) + nextf[nbuck] = CHAIN (mp); + else + CHAIN (mp2) = CHAIN (mp); + + /* And add the combined two blocks to nextf[NU]. */ + mp1->mh_alloc = ISFREE; + mp1->mh_index = nu; + CHAIN (mp1) = nextf[nu]; + nextf[nu] = mp1; +} + +/* Split a block at index > NU (but less than SPLIT_MAX) into a set of + blocks of the correct size, and attach them to nextf[NU]. nextf[NU] + is assumed to be empty. Must be called with signals blocked (e.g., + by morecore()). */ +static void +bsplit (nu) + register int nu; +{ + register union mhead *mp; + int nbuck, nblks, split_max; + unsigned long siz; + + split_max = (maxbuck > SPLIT_MAX) ? maxbuck : SPLIT_MAX; + + if (nu >= SPLIT_MID) + { + for (nbuck = split_max; nbuck > nu; nbuck--) + { + if (busy[nbuck] || nextf[nbuck] == 0) + continue; + break; + } + } + else + { + for (nbuck = nu + 1; nbuck <= split_max; nbuck++) + { + if (busy[nbuck] || nextf[nbuck] == 0) + continue; + break; + } + } + + if (nbuck > split_max || nbuck <= nu) + return; + + /* XXX might want to split only if nextf[nbuck] has >= 2 blocks free + and nbuck is below some threshold. */ + +#ifdef MALLOC_STATS + _mstats.tbsplit++; + _mstats.nsplit[nbuck]++; +#endif + + /* Figure out how many blocks we'll get. */ + siz = binsize (nu); + nblks = binsize (nbuck) / siz; + + /* Remove the block from the chain of larger blocks. */ + mp = nextf[nbuck]; + nextf[nbuck] = CHAIN (mp); + + /* Split the block and put it on the requested chain. */ + nextf[nu] = mp; + while (1) + { + mp->mh_alloc = ISFREE; + mp->mh_index = nu; + if (--nblks <= 0) break; + CHAIN (mp) = (union mhead *)((char *)mp + siz); + mp = (union mhead *)((char *)mp + siz); + } + CHAIN (mp) = 0; +} + +static void +block_signals (setp, osetp) + sigset_t *setp, *osetp; +{ +#ifdef HAVE_POSIX_SIGNALS + sigfillset (setp); + sigemptyset (osetp); + sigprocmask (SIG_BLOCK, setp, osetp); +#else +# if defined (HAVE_BSD_SIGNALS) + *osetp = sigsetmask (-1); +# endif +#endif +} + +static void +unblock_signals (setp, osetp) + sigset_t *setp, *osetp; +{ +#ifdef HAVE_POSIX_SIGNALS + sigprocmask (SIG_SETMASK, osetp, (sigset_t *)NULL); +#else +# if defined (HAVE_BSD_SIGNALS) + sigsetmask (*osetp); +# endif +#endif +} + +/* Return some memory to the system by reducing the break. This is only + called with NU > pagebucket, so we're always assured of giving back + more than one page of memory. */ +static void +lesscore (nu) /* give system back some memory */ + register int nu; /* size index we're discarding */ +{ + long siz; + + siz = binsize (nu); + /* Should check for errors here, I guess. */ + sbrk (-siz); + memtop -= siz; + +#ifdef MALLOC_STATS + _mstats.nsbrk++; + _mstats.tsbrk -= siz; + _mstats.nlesscore[nu]++; +#endif +} + +static void +morecore (nu) /* ask system for more memory */ + register int nu; /* size index to get more of */ +{ + register union mhead *mp; + register int nblks; + register long siz; + long sbrk_amt; /* amount to get via sbrk() */ + sigset_t set, oset; + int blocked_sigs; + + /* Block all signals in case we are executed from a signal handler. */ + blocked_sigs = 0; +#ifdef SHELL + if (interrupt_immediately || signal_is_trapped (SIGINT) || signal_is_trapped (SIGCHLD)) +#endif + { + block_signals (&set, &oset); + blocked_sigs = 1; + } + + siz = binsize (nu); /* size of desired block for nextf[nu] */ + + if (siz < 0) + goto morecore_done; /* oops */ + +#ifdef MALLOC_STATS + _mstats.nmorecore[nu]++; +#endif + + /* Try to split a larger block here, if we're within the range of sizes + to split. */ + if (nu >= SPLIT_MIN) + { + bsplit (nu); + if (nextf[nu] != 0) + goto morecore_done; + } + + /* Try to coalesce two adjacent blocks from the free list on nextf[nu - 1], + if we can, and we're withing the range of the block coalescing limits. */ + if (nu >= COMBINE_MIN && nu < COMBINE_MAX && busy[nu - 1] == 0 && nextf[nu - 1]) + { + bcoalesce (nu); + if (nextf[nu] != 0) + goto morecore_done; + } + + /* Take at least a page, and figure out how many blocks of the requested + size we're getting. */ + if (siz <= pagesz) + { + sbrk_amt = pagesz; + nblks = sbrk_amt / siz; + } + else + { + /* We always want to request an integral multiple of the page size + from the kernel, so let's compute whether or not `siz' is such + an amount. If it is, we can just request it. If not, we want + the smallest integral multiple of pagesize that is larger than + `siz' and will satisfy the request. */ + sbrk_amt = siz & (pagesz - 1); + if (sbrk_amt == 0) + sbrk_amt = siz; + else + sbrk_amt = siz + pagesz - sbrk_amt; + nblks = 1; + } + +#ifdef MALLOC_STATS + _mstats.nsbrk++; + _mstats.tsbrk += sbrk_amt; +#endif + + mp = (union mhead *) sbrk (sbrk_amt); + + /* Totally out of memory. */ + if ((long)mp == -1) + goto morecore_done; + + memtop += sbrk_amt; + + /* shouldn't happen, but just in case -- require 8-byte alignment */ + if ((long)mp & MALIGN_MASK) + { + mp = (union mhead *) (((long)mp + MALIGN_MASK) & ~MALIGN_MASK); + nblks--; + } + + /* save new header and link the nblks blocks together */ + nextf[nu] = mp; + while (1) + { + mp->mh_alloc = ISFREE; + mp->mh_index = nu; + if (--nblks <= 0) break; + CHAIN (mp) = (union mhead *)((char *)mp + siz); + mp = (union mhead *)((char *)mp + siz); + } + CHAIN (mp) = 0; + +morecore_done: + if (blocked_sigs) + unblock_signals (&set, &oset); +} + +static void +malloc_debug_dummy () +{ + write (1, "malloc_debug_dummy\n", 19); +} + +#define PREPOP_BIN 2 +#define PREPOP_SIZE 32 + +static int +pagealign () +{ + register long nbytes; + register int nunits; + register union mhead *mp; + long sbrk_needed; + char *curbrk; + + pagesz = getpagesize (); + if (pagesz < 1024) + pagesz = 1024; + + /* OK, how much do we need to allocate to make things page-aligned? + Some of this partial page will be wasted space, but we'll use as + much as we can. Once we figure out how much to advance the break + pointer, go ahead and do it. */ + memtop = curbrk = sbrk (0); + sbrk_needed = pagesz - ((long)curbrk & (pagesz - 1)); /* sbrk(0) % pagesz */ + if (sbrk_needed < 0) + sbrk_needed += pagesz; + + /* Now allocate the wasted space. */ + if (sbrk_needed) + { +#ifdef MALLOC_STATS + _mstats.nsbrk++; + _mstats.tsbrk += sbrk_needed; +#endif + curbrk = sbrk (sbrk_needed); + if ((long)curbrk == -1) + return -1; + memtop += sbrk_needed; + + /* Take the memory which would otherwise be wasted and populate the most + popular bin (2 == 32 bytes) with it. Add whatever we need to curbrk + to make things 32-byte aligned, compute how many 32-byte chunks we're + going to get, and set up the bin. */ + curbrk += sbrk_needed & (PREPOP_SIZE - 1); + sbrk_needed -= sbrk_needed & (PREPOP_SIZE - 1); + nunits = sbrk_needed / PREPOP_SIZE; + + mp = (union mhead *)curbrk; + + nextf[PREPOP_BIN] = mp; + while (1) + { + mp->mh_alloc = ISFREE; + mp->mh_index = PREPOP_BIN; + if (--nunits <= 0) break; + CHAIN(mp) = (union mhead *)((char *)mp + PREPOP_SIZE); + mp = (union mhead *)((char *)mp + PREPOP_SIZE); + } + CHAIN(mp) = 0; + } + + /* compute which bin corresponds to the page size. */ + for (nunits = 7; nunits < NBUCKETS; nunits++) + if (pagesz <= binsize(nunits)) + break; + pagebucket = nunits; + + return 0; +} + +static PTR_T +internal_malloc (n, file, line, flags) /* get a block */ + size_t n; + const char *file; + int line, flags; +{ + register union mhead *p; + register int nunits; + register char *m; + long nbytes; + + /* Get the system page size and align break pointer so future sbrks will + be page-aligned. The page size must be at least 1K -- anything + smaller is increased. */ + if (pagesz == 0) + if (pagealign () < 0) + return ((PTR_T)NULL); + + /* Figure out how many bytes are required, rounding up to the nearest + multiple of 8, then figure out which nextf[] area to use. Try to + be smart about where to start searching -- if the number of bytes + needed is greater than the page size, we can start at pagebucket. */ + nbytes = ALLOCATED_BYTES(n); + nunits = (nbytes <= (pagesz >> 1)) ? STARTBUCK : pagebucket; + for ( ; nunits < NBUCKETS; nunits++) + if (nbytes <= binsize(nunits)) + break; + + /* Silently reject too-large requests. */ + if (nunits >= NBUCKETS) + return ((PTR_T) NULL); + + /* In case this is reentrant use of malloc from signal handler, + pick a block size that no other malloc level is currently + trying to allocate. That's the easiest harmless way not to + interfere with the other level of execution. */ +#ifdef MALLOC_STATS + if (busy[nunits]) _mstats.nrecurse++; +#endif + while (busy[nunits]) nunits++; + busy[nunits] = 1; + + if (nunits > maxbuck) + maxbuck = nunits; + + /* If there are no blocks of the appropriate size, go get some */ + if (nextf[nunits] == 0) + morecore (nunits); + + /* Get one block off the list, and set the new list head */ + if ((p = nextf[nunits]) == NULL) + { + busy[nunits] = 0; + return NULL; + } + nextf[nunits] = CHAIN (p); + busy[nunits] = 0; + + /* Check for free block clobbered */ + /* If not for this check, we would gobble a clobbered free chain ptr + and bomb out on the NEXT allocate of this size block */ + if (p->mh_alloc != ISFREE || p->mh_index != nunits) + xbotch ((PTR_T)(p+1), 0, "malloc: block on free list clobbered", file, line); + + /* Fill in the info, and set up the magic numbers for range checking. */ + p->mh_alloc = ISALLOC; + p->mh_magic2 = MAGIC2; + p->mh_nbytes = n; + + /* End guard */ + m = (char *) (p + 1) + n; + *(u_bits32_t *)m = n; + +#ifdef MEMSCRAMBLE + MALLOC_MEMSET ((char *)(p + 1), 0xdf, n); /* scramble previous contents */ +#endif +#ifdef MALLOC_STATS + _mstats.nmalloc[nunits]++; + _mstats.tmalloc[nunits]++; + _mstats.nmal++; + _mstats.bytesreq += n; +#endif /* MALLOC_STATS */ + +#ifdef MALLOC_TRACE + if (malloc_trace && (flags & MALLOC_NOTRACE) == 0) + mtrace_alloc ("malloc", p + 1, n, file, line); + else if (_malloc_trace_buckets[nunits]) + mtrace_alloc ("malloc", p + 1, n, file, line); +#endif + +#ifdef MALLOC_REGISTER + if (malloc_register && (flags & MALLOC_NOREG) == 0) + mregister_alloc ("malloc", p + 1, n, file, line); +#endif + +#ifdef MALLOC_WATCH + if (_malloc_nwatch > 0) + _malloc_ckwatch (p + 1, file, line, W_ALLOC, n); +#endif + + return (PTR_T) (p + 1); +} + +static void +internal_free (mem, file, line, flags) + PTR_T mem; + const char *file; + int line, flags; +{ + register union mhead *p; + register char *ap; + register int nunits; + register unsigned int nbytes; + int ubytes; /* caller-requested size */ + + if ((ap = (char *)mem) == 0) + return; + + p = (union mhead *) ap - 1; + + if (p->mh_alloc == ISMEMALIGN) + { + ap -= p->mh_nbytes; + p = (union mhead *) ap - 1; + } + +#if defined (MALLOC_TRACE) || defined (MALLOC_REGISTER) + if (malloc_trace || malloc_register) + ubytes = p->mh_nbytes; +#endif + + if (p->mh_alloc != ISALLOC) + { + if (p->mh_alloc == ISFREE) + xbotch (mem, ERR_DUPFREE, + "free: called with already freed block argument", file, line); + else + xbotch (mem, ERR_UNALLOC, + "free: called with unallocated block argument", file, line); + } + + ASSERT (p->mh_magic2 == MAGIC2); + + nunits = p->mh_index; + nbytes = ALLOCATED_BYTES(p->mh_nbytes); + /* Since the sizeof(u_bits32_t) bytes before the memory handed to the user + are now used for the number of bytes allocated, a simple check of + mh_magic2 is no longer sufficient to catch things like p[-1] = 'x'. + We sanity-check the value of mh_nbytes against the size of the blocks + in the appropriate bucket before we use it. This can still cause problems + and obscure errors if mh_nbytes is wrong but still within range; the + checks against the size recorded at the end of the chunk will probably + fail then. Using MALLOC_REGISTER will help here, since it saves the + original number of bytes requested. */ + + if (IN_BUCKET(nbytes, nunits) == 0) + xbotch (mem, ERR_UNDERFLOW, + "free: underflow detected; mh_nbytes out of range", file, line); + + ap += p->mh_nbytes; + if (*(u_bits32_t *)ap != p->mh_nbytes) + xbotch (mem, ERR_ASSERT_FAILED, "free: start and end chunk sizes differ", file, line); + +#if 1 + if (nunits >= LESSCORE_MIN && ((char *)p + binsize(nunits) == memtop)) +#else + if (((char *)p + binsize(nunits) == memtop) && nunits >= LESSCORE_MIN) +#endif + { + /* If above LESSCORE_FRC, give back unconditionally. This should be set + high enough to be infrequently encountered. If between LESSCORE_MIN + and LESSCORE_FRC, call lesscore if the bucket is marked as busy (in + which case we would punt below and leak memory) or if there's already + a block on the free list. */ + if ((nunits >= LESSCORE_FRC) || busy[nunits] || nextf[nunits] != 0) + { + lesscore (nunits); + /* keeps the tracing and registering code in one place */ + goto free_return; + } + } + +#ifdef MEMSCRAMBLE + MALLOC_MEMSET (mem, 0xcf, p->mh_nbytes); +#endif + + ASSERT (nunits < NBUCKETS); + p->mh_alloc = ISFREE; + + if (busy[nunits] == 1) + return; /* this is bogus, but at least it won't corrupt the chains */ + + /* Protect against signal handlers calling malloc. */ + busy[nunits] = 1; + /* Put this block on the free list. */ + CHAIN (p) = nextf[nunits]; + nextf[nunits] = p; + busy[nunits] = 0; + +free_return: + +#ifdef MALLOC_STATS + _mstats.nmalloc[nunits]--; + _mstats.nfre++; +#endif /* MALLOC_STATS */ + +#ifdef MALLOC_TRACE + if (malloc_trace && (flags & MALLOC_NOTRACE) == 0) + mtrace_free (mem, ubytes, file, line); + else if (_malloc_trace_buckets[nunits]) + mtrace_free (mem, ubytes, file, line); +#endif + +#ifdef MALLOC_REGISTER + if (malloc_register && (flags & MALLOC_NOREG) == 0) + mregister_free (mem, ubytes, file, line); +#endif + +#ifdef MALLOC_WATCH + if (_malloc_nwatch > 0) + _malloc_ckwatch (mem, file, line, W_FREE, ubytes); +#endif + +} + +static PTR_T +internal_realloc (mem, n, file, line, flags) + PTR_T mem; + register size_t n; + const char *file; + int line, flags; +{ + register union mhead *p; + register u_bits32_t tocopy; + register unsigned int nbytes; + register int nunits; + register char *m; + +#ifdef MALLOC_STATS + _mstats.nrealloc++; +#endif + + if (n == 0) + { + internal_free (mem, file, line, MALLOC_INTERNAL); + return (NULL); + } + if ((p = (union mhead *) mem) == 0) + return internal_malloc (n, file, line, MALLOC_INTERNAL); + + p--; + nunits = p->mh_index; + ASSERT (nunits < NBUCKETS); + + if (p->mh_alloc != ISALLOC) + xbotch (mem, ERR_UNALLOC, + "realloc: called with unallocated block argument", file, line); + + ASSERT (p->mh_magic2 == MAGIC2); + nbytes = ALLOCATED_BYTES(p->mh_nbytes); + /* Since the sizeof(u_bits32_t) bytes before the memory handed to the user + are now used for the number of bytes allocated, a simple check of + mh_magic2 is no longer sufficient to catch things like p[-1] = 'x'. + We sanity-check the value of mh_nbytes against the size of the blocks + in the appropriate bucket before we use it. This can still cause problems + and obscure errors if mh_nbytes is wrong but still within range; the + checks against the size recorded at the end of the chunk will probably + fail then. Using MALLOC_REGISTER will help here, since it saves the + original number of bytes requested. */ + if (IN_BUCKET(nbytes, nunits) == 0) + xbotch (mem, ERR_UNDERFLOW, + "realloc: underflow detected; mh_nbytes out of range", file, line); + + m = (char *)mem + (tocopy = p->mh_nbytes); + if (*(u_bits32_t *)m != p->mh_nbytes) + xbotch (mem, ERR_ASSERT_FAILED, "realloc: start and end chunk sizes differ", file, line); + +#ifdef MALLOC_WATCH + if (_malloc_nwatch > 0) + _malloc_ckwatch (p + 1, file, line, W_REALLOC, n); +#endif +#ifdef MALLOC_STATS + _mstats.bytesreq += (n < tocopy) ? 0 : n - tocopy; +#endif + + /* See if desired size rounds to same power of 2 as actual size. */ + nbytes = ALLOCATED_BYTES(n); + + /* If ok, use the same block, just marking its size as changed. */ + if (RIGHT_BUCKET(nbytes, nunits)) + { + *m++ = 0; *m++ = 0; *m++ = 0; *m++ = 0; + m = (char *)mem + (p->mh_nbytes = n); + *(u_bits32_t *)m = p->mh_nbytes; + return mem; + } + + if (n < tocopy) + tocopy = n; + +#ifdef MALLOC_STATS + _mstats.nrcopy++; +#endif + + if ((m = internal_malloc (n, file, line, MALLOC_INTERNAL|MALLOC_NOTRACE|MALLOC_NOREG)) == 0) + return 0; + FASTCOPY (mem, m, tocopy); + internal_free (mem, file, line, MALLOC_INTERNAL); + +#ifdef MALLOC_TRACE + if (malloc_trace && (flags & MALLOC_NOTRACE) == 0) + mtrace_alloc ("realloc", m, n, file, line); + else if (_malloc_trace_buckets[nunits]) + mtrace_alloc ("realloc", m, n, file, line); +#endif + +#ifdef MALLOC_REGISTER + if (malloc_register && (flags & MALLOC_NOREG) == 0) + mregister_alloc ("realloc", m, n, file, line); +#endif + +#ifdef MALLOC_WATCH + if (_malloc_nwatch > 0) + _malloc_ckwatch (m, file, line, W_RESIZED, n); +#endif + + return m; +} + +static PTR_T +internal_memalign (alignment, size, file, line, flags) + unsigned int alignment; + size_t size; + const char *file; + int line, flags; +{ + register char *ptr; + register char *aligned; + register union mhead *p; + + ptr = internal_malloc (size + alignment, file, line, MALLOC_INTERNAL); + + if (ptr == 0) + return 0; + /* If entire block has the desired alignment, just accept it. */ + if (((long) ptr & (alignment - 1)) == 0) + return ptr; + /* Otherwise, get address of byte in the block that has that alignment. */ +#if 0 + aligned = (char *) (((long) ptr + alignment - 1) & -alignment); +#else + aligned = (char *) (((long) ptr + alignment - 1) & (~alignment + 1)); +#endif + + /* Store a suitable indication of how to free the block, + so that free can find the true beginning of it. */ + p = (union mhead *) aligned - 1; + p->mh_nbytes = aligned - ptr; + p->mh_alloc = ISMEMALIGN; + + return aligned; +} + +#if !defined (NO_VALLOC) +/* This runs into trouble with getpagesize on HPUX, and Multimax machines. + Patching out seems cleaner than the ugly fix needed. */ +static PTR_T +internal_valloc (size, file, line, flags) + size_t size; + const char *file; + int line, flags; +{ + return internal_memalign (getpagesize (), size, file, line, flags|MALLOC_INTERNAL); +} +#endif /* !NO_VALLOC */ + +#ifndef NO_CALLOC +static PTR_T +internal_calloc (n, s, file, line, flags) + size_t n, s; + const char *file; + int line, flags; +{ + size_t total; + PTR_T result; + + total = n * s; + result = internal_malloc (total, file, line, flags|MALLOC_INTERNAL); + if (result) + memset (result, 0, total); + return result; +} + +static void +internal_cfree (p, file, line, flags) + PTR_T p; + const char *file; + int line, flags; +{ + internal_free (p, file, line, flags|MALLOC_INTERNAL); +} +#endif /* !NO_CALLOC */ + +#ifdef MALLOC_STATS +int +malloc_free_blocks (size) + int size; +{ + int nfree; + register union mhead *p; + + nfree = 0; + for (p = nextf[size]; p; p = CHAIN (p)) + nfree++; + + return nfree; +} +#endif + +#if defined (MALLOC_WRAPFUNCS) +PTR_T +sh_malloc (bytes, file, line) + size_t bytes; + const char *file; + int line; +{ + return internal_malloc (bytes, file, line, MALLOC_WRAPPER); +} + +PTR_T +sh_realloc (ptr, size, file, line) + PTR_T ptr; + size_t size; + const char *file; + int line; +{ + return internal_realloc (ptr, size, file, line, MALLOC_WRAPPER); +} + +void +sh_free (mem, file, line) + PTR_T mem; + const char *file; + int line; +{ + internal_free (mem, file, line, MALLOC_WRAPPER); +} + +PTR_T +sh_memalign (alignment, size, file, line) + unsigned int alignment; + size_t size; + const char *file; + int line; +{ + return internal_memalign (alignment, size, file, line, MALLOC_WRAPPER); +} + +#ifndef NO_CALLOC +PTR_T +sh_calloc (n, s, file, line) + size_t n, s; + const char *file; + int line; +{ + return internal_calloc (n, s, file, line, MALLOC_WRAPPER); +} + +void +sh_cfree (mem, file, line) + PTR_T mem; + const char *file; + int line; +{ + internal_cfree (mem, file, line, MALLOC_WRAPPER); +} +#endif + +#ifndef NO_VALLOC +PTR_T +sh_valloc (size, file, line) + size_t size; + const char *file; + int line; +{ + return internal_valloc (size, file, line, MALLOC_WRAPPER); +} +#endif /* !NO_VALLOC */ + +#endif /* MALLOC_WRAPFUNCS */ + +/* Externally-available functions that call their internal counterparts. */ + +PTR_T +malloc (size) + size_t size; +{ + return internal_malloc (size, (char *)NULL, 0, 0); +} + +PTR_T +realloc (mem, nbytes) + PTR_T mem; + size_t nbytes; +{ + return internal_realloc (mem, nbytes, (char *)NULL, 0, 0); +} + +void +free (mem) + PTR_T mem; +{ + internal_free (mem, (char *)NULL, 0, 0); +} + +PTR_T +memalign (alignment, size) + unsigned int alignment; + size_t size; +{ + return internal_memalign (alignment, size, (char *)NULL, 0, 0); +} + +#ifndef NO_VALLOC +PTR_T +valloc (size) + size_t size; +{ + return internal_valloc (size, (char *)NULL, 0, 0); +} +#endif + +#ifndef NO_CALLOC +PTR_T +calloc (n, s) + size_t n, s; +{ + return internal_calloc (n, s, (char *)NULL, 0, 0); +} + +void +cfree (mem) + PTR_T mem; +{ + internal_cfree (mem, (char *)NULL, 0, 0); +} +#endif diff --git a/lib/readline/ansi_stdlib.h b/lib/readline/ansi_stdlib.h index db13cd23..0bfba502 100644..120000 --- a/lib/readline/ansi_stdlib.h +++ b/lib/readline/ansi_stdlib.h @@ -1,54 +1 @@ -/* ansi_stdlib.h -- An ANSI Standard stdlib.h. */ -/* A minimal stdlib.h containing extern declarations for those functions - that bash uses. */ - -/* Copyright (C) 1993 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. - - Bash is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2, or (at your option) any later - version. - - Bash is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License along - with Bash; see the file COPYING. If not, write to the Free Software - Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ - -#if !defined (_STDLIB_H_) -#define _STDLIB_H_ 1 - -/* String conversion functions. */ -extern int atoi (); - -extern double atof (); -extern double strtod (); - -/* Memory allocation functions. */ -/* Generic pointer type. */ -#ifndef PTR_T - -#if defined (__STDC__) -# define PTR_T void * -#else -# define PTR_T char * -#endif - -#endif /* PTR_T */ - -extern PTR_T malloc (); -extern PTR_T realloc (); -extern void free (); - -/* Other miscellaneous functions. */ -extern void abort (); -extern void exit (); -extern char *getenv (); -extern void qsort (); - -#endif /* _STDLIB_H */ +../../include/ansi_stdlib.h
\ No newline at end of file diff --git a/lib/readline/display.c b/lib/readline/display.c index 0ff428e4..b6d8f011 100644 --- a/lib/readline/display.c +++ b/lib/readline/display.c @@ -351,14 +351,14 @@ rl_expand_prompt (prompt) local_prompt = expand_prompt (p, &prompt_visible_length, &prompt_last_invisible, (int *)NULL, - (int *)NULL); + &prompt_physical_chars); c = *t; *t = '\0'; /* The portion of the prompt string up to and including the final newline is now null-terminated. */ local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, (int *)NULL, &prompt_invis_chars_first_line, - &prompt_physical_chars); + (int *)NULL); *t = c; return (prompt_prefix_length); } diff --git a/lib/readline/display.c.orig b/lib/readline/display.c.orig new file mode 100644 index 00000000..0ff428e4 --- /dev/null +++ b/lib/readline/display.c.orig @@ -0,0 +1,2282 @@ +/* display.c -- readline redisplay facility. */ + +/* Copyright (C) 1987-2004 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. + + The GNU Readline Library 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. + + The GNU Readline Library 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. + + The GNU General Public License is often shipped with GNU software, and + is generally kept in a file called COPYING or LICENSE. If you do not + have a copy of the license, write to the Free Software Foundation, + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ +#define READLINE_LIBRARY + +#if defined (HAVE_CONFIG_H) +# include <config.h> +#endif + +#include <sys/types.h> + +#if defined (HAVE_UNISTD_H) +# include <unistd.h> +#endif /* HAVE_UNISTD_H */ + +#include "posixstat.h" + +#if defined (HAVE_STDLIB_H) +# include <stdlib.h> +#else +# include "ansi_stdlib.h" +#endif /* HAVE_STDLIB_H */ + +#include <stdio.h> + +/* System-specific feature definitions and include files. */ +#include "rldefs.h" +#include "rlmbutil.h" + +/* Termcap library stuff. */ +#include "tcap.h" + +/* Some standard library routines. */ +#include "readline.h" +#include "history.h" + +#include "rlprivate.h" +#include "xmalloc.h" + +#if !defined (strchr) && !defined (__STDC__) +extern char *strchr (), *strrchr (); +#endif /* !strchr && !__STDC__ */ + +#if defined (HACK_TERMCAP_MOTION) +extern char *_rl_term_forward_char; +#endif + +static void update_line PARAMS((char *, char *, int, int, int, int)); +static void space_to_eol PARAMS((int)); +static void delete_chars PARAMS((int)); +static void insert_some_chars PARAMS((char *, int, int)); +static void cr PARAMS((void)); + +#if defined (HANDLE_MULTIBYTE) +static int _rl_col_width PARAMS((const char *, int, int)); +static int *_rl_wrapped_line; +#else +# define _rl_col_width(l, s, e) (((e) <= (s)) ? 0 : (e) - (s)) +#endif + +static int *inv_lbreaks, *vis_lbreaks; +static int inv_lbsize, vis_lbsize; + +/* Heuristic used to decide whether it is faster to move from CUR to NEW + by backing up or outputting a carriage return and moving forward. */ +#define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new))) + +/* **************************************************************** */ +/* */ +/* Display stuff */ +/* */ +/* **************************************************************** */ + +/* This is the stuff that is hard for me. I never seem to write good + display routines in C. Let's see how I do this time. */ + +/* (PWP) Well... Good for a simple line updater, but totally ignores + the problems of input lines longer than the screen width. + + update_line and the code that calls it makes a multiple line, + automatically wrapping line update. Careful attention needs + to be paid to the vertical position variables. */ + +/* Keep two buffers; one which reflects the current contents of the + screen, and the other to draw what we think the new contents should + be. Then compare the buffers, and make whatever changes to the + screen itself that we should. Finally, make the buffer that we + just drew into be the one which reflects the current contents of the + screen, and place the cursor where it belongs. + + Commands that want to can fix the display themselves, and then let + this function know that the display has been fixed by setting the + RL_DISPLAY_FIXED variable. This is good for efficiency. */ + +/* Application-specific redisplay function. */ +rl_voidfunc_t *rl_redisplay_function = rl_redisplay; + +/* Global variables declared here. */ +/* What YOU turn on when you have handled all redisplay yourself. */ +int rl_display_fixed = 0; + +int _rl_suppress_redisplay = 0; + +/* The stuff that gets printed out before the actual text of the line. + This is usually pointing to rl_prompt. */ +char *rl_display_prompt = (char *)NULL; + +/* Pseudo-global variables declared here. */ +/* The visible cursor position. If you print some text, adjust this. */ +int _rl_last_c_pos = 0; +int _rl_last_v_pos = 0; + +/* Number of lines currently on screen minus 1. */ +int _rl_vis_botlin = 0; + +/* Variables used only in this file. */ +/* The last left edge of text that was displayed. This is used when + doing horizontal scrolling. It shifts in thirds of a screenwidth. */ +static int last_lmargin; + +/* The line display buffers. One is the line currently displayed on + the screen. The other is the line about to be displayed. */ +static char *visible_line = (char *)NULL; +static char *invisible_line = (char *)NULL; + +/* A buffer for `modeline' messages. */ +static char msg_buf[128]; + +/* Non-zero forces the redisplay even if we thought it was unnecessary. */ +static int forced_display; + +/* Default and initial buffer size. Can grow. */ +static int line_size = 1024; + +/* Variables to keep track of the expanded prompt string, which may + include invisible characters. */ + +static char *local_prompt, *local_prompt_prefix; +static int prompt_visible_length, prompt_prefix_length; + +/* The number of invisible characters in the line currently being + displayed on the screen. */ +static int visible_wrap_offset; + +/* The number of invisible characters in the prompt string. Static so it + can be shared between rl_redisplay and update_line */ +static int wrap_offset; + +/* The index of the last invisible character in the prompt string. */ +static int prompt_last_invisible; + +/* The length (buffer offset) of the first line of the last (possibly + multi-line) buffer displayed on the screen. */ +static int visible_first_line_len; + +/* Number of invisible characters on the first physical line of the prompt. + Only valid when the number of physical characters in the prompt exceeds + (or is equal to) _rl_screenwidth. */ +static int prompt_invis_chars_first_line; + +static int prompt_last_screen_line; + +static int prompt_physical_chars; + +/* Expand the prompt string S and return the number of visible + characters in *LP, if LP is not null. This is currently more-or-less + a placeholder for expansion. LIP, if non-null is a place to store the + index of the last invisible character in the returned string. NIFLP, + if non-zero, is a place to store the number of invisible characters in + the first prompt line. The previous are used as byte counts -- indexes + into a character buffer. */ + +/* Current implementation: + \001 (^A) start non-visible characters + \002 (^B) end non-visible characters + all characters except \001 and \002 (following a \001) are copied to + the returned string; all characters except those between \001 and + \002 are assumed to be `visible'. */ + +static char * +expand_prompt (pmt, lp, lip, niflp, vlp) + char *pmt; + int *lp, *lip, *niflp, *vlp; +{ + char *r, *ret, *p; + int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars; + + /* Short-circuit if we can. */ + if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0) + { + r = savestring (pmt); + if (lp) + *lp = strlen (r); + if (lip) + *lip = 0; + if (niflp) + *niflp = 0; + if (vlp) + *vlp = lp ? *lp : strlen (r); + return r; + } + + l = strlen (pmt); + r = ret = (char *)xmalloc (l + 1); + + invfl = 0; /* invisible chars in first line of prompt */ + + for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++) + { + /* This code strips the invisible character string markers + RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */ + if (*p == RL_PROMPT_START_IGNORE) + { + ignoring++; + continue; + } + else if (ignoring && *p == RL_PROMPT_END_IGNORE) + { + ignoring = 0; + last = r - ret - 1; + continue; + } + else + { +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + pind = p - pmt; + ind = _rl_find_next_mbchar (pmt, pind, 1, MB_FIND_NONZERO); + l = ind - pind; + while (l--) + *r++ = *p++; + if (!ignoring) + rl += ind - pind; + else + ninvis += ind - pind; + p--; /* compensate for later increment */ + } + else +#endif + { + *r++ = *p; + if (!ignoring) + rl++; /* visible length byte counter */ + else + ninvis++; /* invisible chars byte counter */ + } + + if (rl >= _rl_screenwidth) + invfl = ninvis; + + if (ignoring == 0) + physchars++; + } + } + + if (rl < _rl_screenwidth) + invfl = ninvis; + + *r = '\0'; + if (lp) + *lp = rl; + if (lip) + *lip = last; + if (niflp) + *niflp = invfl; + if (vlp) + *vlp = physchars; + return ret; +} + +/* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from + PMT and return the rest of PMT. */ +char * +_rl_strip_prompt (pmt) + char *pmt; +{ + char *ret; + + ret = expand_prompt (pmt, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL); + return ret; +} + +/* + * Expand the prompt string into the various display components, if + * necessary. + * + * local_prompt = expanded last line of string in rl_display_prompt + * (portion after the final newline) + * local_prompt_prefix = portion before last newline of rl_display_prompt, + * expanded via expand_prompt + * prompt_visible_length = number of visible characters in local_prompt + * prompt_prefix_length = number of visible characters in local_prompt_prefix + * + * This function is called once per call to readline(). It may also be + * called arbitrarily to expand the primary prompt. + * + * The return value is the number of visible characters on the last line + * of the (possibly multi-line) prompt. + */ +int +rl_expand_prompt (prompt) + char *prompt; +{ + char *p, *t; + int c; + + /* Clear out any saved values. */ + FREE (local_prompt); + FREE (local_prompt_prefix); + + local_prompt = local_prompt_prefix = (char *)0; + prompt_last_invisible = prompt_visible_length = 0; + + if (prompt == 0 || *prompt == 0) + return (0); + + p = strrchr (prompt, '\n'); + if (!p) + { + /* The prompt is only one logical line, though it might wrap. */ + local_prompt = expand_prompt (prompt, &prompt_visible_length, + &prompt_last_invisible, + &prompt_invis_chars_first_line, + &prompt_physical_chars); + local_prompt_prefix = (char *)0; + return (prompt_visible_length); + } + else + { + /* The prompt spans multiple lines. */ + t = ++p; + local_prompt = expand_prompt (p, &prompt_visible_length, + &prompt_last_invisible, + (int *)NULL, + (int *)NULL); + c = *t; *t = '\0'; + /* The portion of the prompt string up to and including the + final newline is now null-terminated. */ + local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, + (int *)NULL, + &prompt_invis_chars_first_line, + &prompt_physical_chars); + *t = c; + return (prompt_prefix_length); + } +} + +/* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated + arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE + and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is + increased. If the lines have already been allocated, this ensures that + they can hold at least MINSIZE characters. */ +static void +init_line_structures (minsize) + int minsize; +{ + register int n; + + if (invisible_line == 0) /* initialize it */ + { + if (line_size < minsize) + line_size = minsize; + visible_line = (char *)xmalloc (line_size); + invisible_line = (char *)xmalloc (line_size); + } + else if (line_size < minsize) /* ensure it can hold MINSIZE chars */ + { + line_size *= 2; + if (line_size < minsize) + line_size = minsize; + visible_line = (char *)xrealloc (visible_line, line_size); + invisible_line = (char *)xrealloc (invisible_line, line_size); + } + + for (n = minsize; n < line_size; n++) + { + visible_line[n] = 0; + invisible_line[n] = 1; + } + + if (vis_lbreaks == 0) + { + /* should be enough. */ + inv_lbsize = vis_lbsize = 256; + inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int)); + vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int)); +#if defined (HANDLE_MULTIBYTE) + _rl_wrapped_line = (int *)xmalloc (vis_lbsize * sizeof (int)); +#endif + inv_lbreaks[0] = vis_lbreaks[0] = 0; + } +} + +/* Basic redisplay algorithm. */ +void +rl_redisplay () +{ + register int in, out, c, linenum, cursor_linenum; + register char *line; + int c_pos, inv_botlin, lb_botlin, lb_linenum; + int newlines, lpos, temp, modmark; + char *prompt_this_line; +#if defined (HANDLE_MULTIBYTE) + wchar_t wc; + size_t wc_bytes; + int wc_width; + mbstate_t ps; + int _rl_wrapped_multicolumn = 0; +#endif + + if (!readline_echoing_p) + return; + + if (!rl_display_prompt) + rl_display_prompt = ""; + + if (invisible_line == 0) + { + init_line_structures (0); + rl_on_new_line (); + } + + /* Draw the line into the buffer. */ + c_pos = -1; + + line = invisible_line; + out = inv_botlin = 0; + + /* Mark the line as modified or not. We only do this for history + lines. */ + modmark = 0; + if (_rl_mark_modified_lines && current_history () && rl_undo_list) + { + line[out++] = '*'; + line[out] = '\0'; + modmark = 1; + } + + /* If someone thought that the redisplay was handled, but the currently + visible line has a different modification state than the one about + to become visible, then correct the caller's misconception. */ + if (visible_line[0] != invisible_line[0]) + rl_display_fixed = 0; + + /* If the prompt to be displayed is the `primary' readline prompt (the + one passed to readline()), use the values we have already expanded. + If not, use what's already in rl_display_prompt. WRAP_OFFSET is the + number of non-visible characters in the prompt string. */ + if (rl_display_prompt == rl_prompt || local_prompt) + { + int local_len = local_prompt ? strlen (local_prompt) : 0; + if (local_prompt_prefix && forced_display) + _rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix)); + + if (local_len > 0) + { + temp = local_len + out + 2; + if (temp >= line_size) + { + line_size = (temp + 1024) - (temp % 1024); + visible_line = (char *)xrealloc (visible_line, line_size); + line = invisible_line = (char *)xrealloc (invisible_line, line_size); + } + strncpy (line + out, local_prompt, local_len); + out += local_len; + } + line[out] = '\0'; + wrap_offset = local_len - prompt_visible_length; + } + else + { + int pmtlen; + prompt_this_line = strrchr (rl_display_prompt, '\n'); + if (!prompt_this_line) + prompt_this_line = rl_display_prompt; + else + { + prompt_this_line++; + pmtlen = prompt_this_line - rl_display_prompt; /* temp var */ + if (forced_display) + { + _rl_output_some_chars (rl_display_prompt, pmtlen); + /* Make sure we are at column zero even after a newline, + regardless of the state of terminal output processing. */ + if (pmtlen < 2 || prompt_this_line[-2] != '\r') + cr (); + } + } + + prompt_physical_chars = pmtlen = strlen (prompt_this_line); + temp = pmtlen + out + 2; + if (temp >= line_size) + { + line_size = (temp + 1024) - (temp % 1024); + visible_line = (char *)xrealloc (visible_line, line_size); + line = invisible_line = (char *)xrealloc (invisible_line, line_size); + } + strncpy (line + out, prompt_this_line, pmtlen); + out += pmtlen; + line[out] = '\0'; + wrap_offset = prompt_invis_chars_first_line = 0; + } + +#define CHECK_INV_LBREAKS() \ + do { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ + } \ + } while (0) + +#if defined (HANDLE_MULTIBYTE) +#define CHECK_LPOS() \ + do { \ + lpos++; \ + if (lpos >= _rl_screenwidth) \ + { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ + _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ + } \ + inv_lbreaks[++newlines] = out; \ + _rl_wrapped_line[newlines] = _rl_wrapped_multicolumn; \ + lpos = 0; \ + } \ + } while (0) +#else +#define CHECK_LPOS() \ + do { \ + lpos++; \ + if (lpos >= _rl_screenwidth) \ + { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ + } \ + inv_lbreaks[++newlines] = out; \ + lpos = 0; \ + } \ + } while (0) +#endif + + /* inv_lbreaks[i] is where line i starts in the buffer. */ + inv_lbreaks[newlines = 0] = 0; +#if 0 + lpos = out - wrap_offset; +#else + lpos = prompt_physical_chars + modmark; +#endif + +#if defined (HANDLE_MULTIBYTE) + memset (_rl_wrapped_line, 0, vis_lbsize); +#endif + + /* prompt_invis_chars_first_line is the number of invisible characters in + the first physical line of the prompt. + wrap_offset - prompt_invis_chars_first_line is the number of invis + chars on the second line. */ + + /* what if lpos is already >= _rl_screenwidth before we start drawing the + contents of the command line? */ + while (lpos >= _rl_screenwidth) + { + /* fix from Darin Johnson <darin@acuson.com> for prompt string with + invisible characters that is longer than the screen width. The + prompt_invis_chars_first_line variable could be made into an array + saying how many invisible characters there are per line, but that's + probably too much work for the benefit gained. How many people have + prompts that exceed two physical lines? + Additional logic fix from Edward Catmur <ed@catmur.co.uk> */ + temp = ((newlines + 1) * _rl_screenwidth) + + ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line + : ((newlines == 1) ? wrap_offset : 0)) + : ((newlines == 0) ? wrap_offset :0)); + + inv_lbreaks[++newlines] = temp; + lpos -= _rl_screenwidth; + } + + prompt_last_screen_line = newlines; + + /* Draw the rest of the line (after the prompt) into invisible_line, keeping + track of where the cursor is (c_pos), the number of the line containing + the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin). + It maintains an array of line breaks for display (inv_lbreaks). + This handles expanding tabs for display and displaying meta characters. */ + lb_linenum = 0; +#if defined (HANDLE_MULTIBYTE) + in = 0; + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + memset (&ps, 0, sizeof (mbstate_t)); + wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps); + } + else + wc_bytes = 1; + while (in < rl_end) +#else + for (in = 0; in < rl_end; in++) +#endif + { + c = (unsigned char)rl_line_buffer[in]; + +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + if (MB_INVALIDCH (wc_bytes)) + { + /* Byte sequence is invalid or shortened. Assume that the + first byte represents a character. */ + wc_bytes = 1; + /* Assume that a character occupies a single column. */ + wc_width = 1; + memset (&ps, 0, sizeof (mbstate_t)); + } + else if (MB_NULLWCH (wc_bytes)) + break; /* Found '\0' */ + else + { + temp = wcwidth (wc); + wc_width = (temp >= 0) ? temp : 1; + } + } +#endif + + if (out + 8 >= line_size) /* XXX - 8 for \t */ + { + line_size *= 2; + visible_line = (char *)xrealloc (visible_line, line_size); + invisible_line = (char *)xrealloc (invisible_line, line_size); + line = invisible_line; + } + + if (in == rl_point) + { + c_pos = out; + lb_linenum = newlines; + } + +#if defined (HANDLE_MULTIBYTE) + if (META_CHAR (c) && _rl_output_meta_chars == 0) /* XXX - clean up */ +#else + if (META_CHAR (c)) +#endif + { + if (_rl_output_meta_chars == 0) + { + sprintf (line + out, "\\%o", c); + + if (lpos + 4 >= _rl_screenwidth) + { + temp = _rl_screenwidth - lpos; + CHECK_INV_LBREAKS (); + inv_lbreaks[++newlines] = out + temp; + lpos = 4 - temp; + } + else + lpos += 4; + + out += 4; + } + else + { + line[out++] = c; + CHECK_LPOS(); + } + } +#if defined (DISPLAY_TABS) + else if (c == '\t') + { + register int newout; + +#if 0 + newout = (out | (int)7) + 1; +#else + newout = out + 8 - lpos % 8; +#endif + temp = newout - out; + if (lpos + temp >= _rl_screenwidth) + { + register int temp2; + temp2 = _rl_screenwidth - lpos; + CHECK_INV_LBREAKS (); + inv_lbreaks[++newlines] = out + temp2; + lpos = temp - temp2; + while (out < newout) + line[out++] = ' '; + } + else + { + while (out < newout) + line[out++] = ' '; + lpos += temp; + } + } +#endif + else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up) + { + line[out++] = '\0'; /* XXX - sentinel */ + CHECK_INV_LBREAKS (); + inv_lbreaks[++newlines] = out; + lpos = 0; + } + else if (CTRL_CHAR (c) || c == RUBOUT) + { + line[out++] = '^'; + CHECK_LPOS(); + line[out++] = CTRL_CHAR (c) ? UNCTRL (c) : '?'; + CHECK_LPOS(); + } + else + { +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + register int i; + + _rl_wrapped_multicolumn = 0; + + if (_rl_screenwidth < lpos + wc_width) + for (i = lpos; i < _rl_screenwidth; i++) + { + /* The space will be removed in update_line() */ + line[out++] = ' '; + _rl_wrapped_multicolumn++; + CHECK_LPOS(); + } + if (in == rl_point) + { + c_pos = out; + lb_linenum = newlines; + } + for (i = in; i < in+wc_bytes; i++) + line[out++] = rl_line_buffer[i]; + for (i = 0; i < wc_width; i++) + CHECK_LPOS(); + } + else + { + line[out++] = c; + CHECK_LPOS(); + } +#else + line[out++] = c; + CHECK_LPOS(); +#endif + } + +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + in += wc_bytes; + wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps); + } + else + in++; +#endif + + } + line[out] = '\0'; + if (c_pos < 0) + { + c_pos = out; + lb_linenum = newlines; + } + + inv_botlin = lb_botlin = newlines; + CHECK_INV_LBREAKS (); + inv_lbreaks[newlines+1] = out; + cursor_linenum = lb_linenum; + + /* C_POS == position in buffer where cursor should be placed. + CURSOR_LINENUM == line number where the cursor should be placed. */ + + /* PWP: now is when things get a bit hairy. The visible and invisible + line buffers are really multiple lines, which would wrap every + (screenwidth - 1) characters. Go through each in turn, finding + the changed region and updating it. The line order is top to bottom. */ + + /* If we can move the cursor up and down, then use multiple lines, + otherwise, let long lines display in a single terminal line, and + horizontally scroll it. */ + + if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up) + { + int nleft, pos, changed_screen_line; + + if (!rl_display_fixed || forced_display) + { + forced_display = 0; + + /* If we have more than a screenful of material to display, then + only display a screenful. We should display the last screen, + not the first. */ + if (out >= _rl_screenchars) + { + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + out = _rl_find_prev_mbchar (line, _rl_screenchars, MB_FIND_ANY); + else + out = _rl_screenchars - 1; + } + + /* The first line is at character position 0 in the buffer. The + second and subsequent lines start at inv_lbreaks[N], offset by + OFFSET (which has already been calculated above). */ + +#define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) +#define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) +#define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l]) +#define VIS_CHARS(line) (visible_line + vis_lbreaks[line]) +#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line) +#define INV_LINE(line) (invisible_line + inv_lbreaks[line]) + + /* For each line in the buffer, do the updating display. */ + for (linenum = 0; linenum <= inv_botlin; linenum++) + { + update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum, + VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin); + + /* If this is the line with the prompt, we might need to + compensate for invisible characters in the new line. Do + this only if there is not more than one new line (which + implies that we completely overwrite the old visible line) + and the new line is shorter than the old. Make sure we are + at the end of the new line before clearing. */ + if (linenum == 0 && + inv_botlin == 0 && _rl_last_c_pos == out && + (wrap_offset > visible_wrap_offset) && + (_rl_last_c_pos < visible_first_line_len)) + { + nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos; + if (nleft) + _rl_clear_to_eol (nleft); + } + + /* Since the new first line is now visible, save its length. */ + if (linenum == 0) + visible_first_line_len = (inv_botlin > 0) ? inv_lbreaks[1] : out - wrap_offset; + } + + /* We may have deleted some lines. If so, clear the left over + blank ones at the bottom out. */ + if (_rl_vis_botlin > inv_botlin) + { + char *tt; + for (; linenum <= _rl_vis_botlin; linenum++) + { + tt = VIS_CHARS (linenum); + _rl_move_vert (linenum); + _rl_move_cursor_relative (0, tt); + _rl_clear_to_eol + ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth); + } + } + _rl_vis_botlin = inv_botlin; + + /* CHANGED_SCREEN_LINE is set to 1 if we have moved to a + different screen line during this redisplay. */ + changed_screen_line = _rl_last_v_pos != cursor_linenum; + if (changed_screen_line) + { + _rl_move_vert (cursor_linenum); + /* If we moved up to the line with the prompt using _rl_term_up, + the physical cursor position on the screen stays the same, + but the buffer position needs to be adjusted to account + for invisible characters. */ + if (cursor_linenum == 0 && wrap_offset) + _rl_last_c_pos += wrap_offset; + } + + /* We have to reprint the prompt if it contains invisible + characters, since it's not generally OK to just reprint + the characters from the current cursor position. But we + only need to reprint it if the cursor is before the last + invisible character in the prompt string. */ + nleft = prompt_visible_length + wrap_offset; + if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 && + _rl_last_c_pos <= prompt_last_invisible && local_prompt) + { +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else + if (_rl_term_cr) + tputs (_rl_term_cr, 1, _rl_output_character_function); +#endif + _rl_output_some_chars (local_prompt, nleft); + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft); + else + _rl_last_c_pos = nleft; + } + + /* Where on that line? And where does that line start + in the buffer? */ + pos = inv_lbreaks[cursor_linenum]; + /* nleft == number of characters in the line buffer between the + start of the line and the cursor position. */ + nleft = c_pos - pos; + + /* Since _rl_backspace() doesn't know about invisible characters in the + prompt, and there's no good way to tell it, we compensate for + those characters here and call _rl_backspace() directly. */ + if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos) + { + _rl_backspace (_rl_last_c_pos - nleft); + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + _rl_last_c_pos = _rl_col_width (&visible_line[pos], 0, nleft); + else + _rl_last_c_pos = nleft; + } + + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + _rl_move_cursor_relative (nleft, &invisible_line[pos]); + else if (nleft != _rl_last_c_pos) + _rl_move_cursor_relative (nleft, &invisible_line[pos]); + } + } + else /* Do horizontal scrolling. */ + { +#define M_OFFSET(margin, offset) ((margin) == 0 ? offset : 0) + int lmargin, ndisp, nleft, phys_c_pos, t; + + /* Always at top line. */ + _rl_last_v_pos = 0; + + /* Compute where in the buffer the displayed line should start. This + will be LMARGIN. */ + + /* The number of characters that will be displayed before the cursor. */ + ndisp = c_pos - wrap_offset; + nleft = prompt_visible_length + wrap_offset; + /* Where the new cursor position will be on the screen. This can be + longer than SCREENWIDTH; if it is, lmargin will be adjusted. */ + phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset); + t = _rl_screenwidth / 3; + + /* If the number of characters had already exceeded the screenwidth, + last_lmargin will be > 0. */ + + /* If the number of characters to be displayed is more than the screen + width, compute the starting offset so that the cursor is about + two-thirds of the way across the screen. */ + if (phys_c_pos > _rl_screenwidth - 2) + { + lmargin = c_pos - (2 * t); + if (lmargin < 0) + lmargin = 0; + /* If the left margin would be in the middle of a prompt with + invisible characters, don't display the prompt at all. */ + if (wrap_offset && lmargin > 0 && lmargin < nleft) + lmargin = nleft; + } + else if (ndisp < _rl_screenwidth - 2) /* XXX - was -1 */ + lmargin = 0; + else if (phys_c_pos < 1) + { + /* If we are moving back towards the beginning of the line and + the last margin is no longer correct, compute a new one. */ + lmargin = ((c_pos - 1) / t) * t; /* XXX */ + if (wrap_offset && lmargin > 0 && lmargin < nleft) + lmargin = nleft; + } + else + lmargin = last_lmargin; + + /* If the first character on the screen isn't the first character + in the display line, indicate this with a special character. */ + if (lmargin > 0) + line[lmargin] = '<'; + + /* If SCREENWIDTH characters starting at LMARGIN do not encompass + the whole line, indicate that with a special character at the + right edge of the screen. If LMARGIN is 0, we need to take the + wrap offset into account. */ + t = lmargin + M_OFFSET (lmargin, wrap_offset) + _rl_screenwidth; + if (t < out) + line[t - 1] = '>'; + + if (!rl_display_fixed || forced_display || lmargin != last_lmargin) + { + forced_display = 0; + update_line (&visible_line[last_lmargin], + &invisible_line[lmargin], + 0, + _rl_screenwidth + visible_wrap_offset, + _rl_screenwidth + (lmargin ? 0 : wrap_offset), + 0); + + /* If the visible new line is shorter than the old, but the number + of invisible characters is greater, and we are at the end of + the new line, we need to clear to eol. */ + t = _rl_last_c_pos - M_OFFSET (lmargin, wrap_offset); + if ((M_OFFSET (lmargin, wrap_offset) > visible_wrap_offset) && + (_rl_last_c_pos == out) && + t < visible_first_line_len) + { + nleft = _rl_screenwidth - t; + _rl_clear_to_eol (nleft); + } + visible_first_line_len = out - lmargin - M_OFFSET (lmargin, wrap_offset); + if (visible_first_line_len > _rl_screenwidth) + visible_first_line_len = _rl_screenwidth; + + _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]); + last_lmargin = lmargin; + } + } + fflush (rl_outstream); + + /* Swap visible and non-visible lines. */ + { + char *vtemp = visible_line; + int *itemp = vis_lbreaks, ntemp = vis_lbsize; + + visible_line = invisible_line; + invisible_line = vtemp; + + vis_lbreaks = inv_lbreaks; + inv_lbreaks = itemp; + + vis_lbsize = inv_lbsize; + inv_lbsize = ntemp; + + rl_display_fixed = 0; + /* If we are displaying on a single line, and last_lmargin is > 0, we + are not displaying any invisible characters, so set visible_wrap_offset + to 0. */ + if (_rl_horizontal_scroll_mode && last_lmargin) + visible_wrap_offset = 0; + else + visible_wrap_offset = wrap_offset; + } +} + +/* PWP: update_line() is based on finding the middle difference of each + line on the screen; vis: + + /old first difference + /beginning of line | /old last same /old EOL + v v v v +old: eddie> Oh, my little gruntle-buggy is to me, as lurgid as +new: eddie> Oh, my little buggy says to me, as lurgid as + ^ ^ ^ ^ + \beginning of line | \new last same \new end of line + \new first difference + + All are character pointers for the sake of speed. Special cases for + no differences, as well as for end of line additions must be handled. + + Could be made even smarter, but this works well enough */ +static void +update_line (old, new, current_line, omax, nmax, inv_botlin) + register char *old, *new; + int current_line, omax, nmax, inv_botlin; +{ + register char *ofd, *ols, *oe, *nfd, *nls, *ne; + int temp, lendiff, wsatend, od, nd; + int current_invis_chars; + int col_lendiff, col_temp; +#if defined (HANDLE_MULTIBYTE) + mbstate_t ps_new, ps_old; + int new_offset, old_offset, tmp; +#endif + + /* If we're at the right edge of a terminal that supports xn, we're + ready to wrap around, so do so. This fixes problems with knowing + the exact cursor position and cut-and-paste with certain terminal + emulators. In this calculation, TEMP is the physical screen + position of the cursor. */ + temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); + if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode + && _rl_last_v_pos == current_line - 1) + { +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + wchar_t wc; + mbstate_t ps; + int tempwidth, bytes; + size_t ret; + + /* This fixes only double-column characters, but if the wrapped + character comsumes more than three columns, spaces will be + inserted in the string buffer. */ + if (_rl_wrapped_line[current_line] > 0) + _rl_clear_to_eol (_rl_wrapped_line[current_line]); + + memset (&ps, 0, sizeof (mbstate_t)); + ret = mbrtowc (&wc, new, MB_CUR_MAX, &ps); + if (MB_INVALIDCH (ret)) + { + tempwidth = 1; + ret = 1; + } + else if (MB_NULLWCH (ret)) + tempwidth = 0; + else + tempwidth = wcwidth (wc); + + if (tempwidth > 0) + { + int count; + bytes = ret; + for (count = 0; count < bytes; count++) + putc (new[count], rl_outstream); + _rl_last_c_pos = tempwidth; + _rl_last_v_pos++; + memset (&ps, 0, sizeof (mbstate_t)); + ret = mbrtowc (&wc, old, MB_CUR_MAX, &ps); + if (ret != 0 && bytes != 0) + { + if (MB_INVALIDCH (ret)) + memmove (old+bytes, old+1, strlen (old+1)); + else + memmove (old+bytes, old+ret, strlen (old+ret)); + memcpy (old, new, bytes); + } + } + else + { + putc (' ', rl_outstream); + _rl_last_c_pos = 1; + _rl_last_v_pos++; + if (old[0] && new[0]) + old[0] = new[0]; + } + } + else +#endif + { + if (new[0]) + putc (new[0], rl_outstream); + else + putc (' ', rl_outstream); + _rl_last_c_pos = 1; /* XXX */ + _rl_last_v_pos++; + if (old[0] && new[0]) + old[0] = new[0]; + } + } + + + /* Find first difference. */ +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + /* See if the old line is a subset of the new line, so that the + only change is adding characters. */ + temp = (omax < nmax) ? omax : nmax; + if (memcmp (old, new, temp) == 0) + { + ofd = old + temp; + nfd = new + temp; + } + else + { + memset (&ps_new, 0, sizeof(mbstate_t)); + memset (&ps_old, 0, sizeof(mbstate_t)); + + if (omax == nmax && STREQN (new, old, omax)) + { + ofd = old + omax; + nfd = new + nmax; + } + else + { + new_offset = old_offset = 0; + for (ofd = old, nfd = new; + (ofd - old < omax) && *ofd && + _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new); ) + { + old_offset = _rl_find_next_mbchar (old, old_offset, 1, MB_FIND_ANY); + new_offset = _rl_find_next_mbchar (new, new_offset, 1, MB_FIND_ANY); + ofd = old + old_offset; + nfd = new + new_offset; + } + } + } + } + else +#endif + for (ofd = old, nfd = new; + (ofd - old < omax) && *ofd && (*ofd == *nfd); + ofd++, nfd++) + ; + + /* Move to the end of the screen line. ND and OD are used to keep track + of the distance between ne and new and oe and old, respectively, to + move a subtraction out of each loop. */ + for (od = ofd - old, oe = ofd; od < omax && *oe; oe++, od++); + for (nd = nfd - new, ne = nfd; nd < nmax && *ne; ne++, nd++); + + /* If no difference, continue to next line. */ + if (ofd == oe && nfd == ne) + return; + + wsatend = 1; /* flag for trailing whitespace */ + +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY); + nls = new + _rl_find_prev_mbchar (new, ne - new, MB_FIND_ANY); + while ((ols > ofd) && (nls > nfd)) + { + memset (&ps_old, 0, sizeof (mbstate_t)); + memset (&ps_new, 0, sizeof (mbstate_t)); + +#if 0 + /* On advice from jir@yamato.ibm.com */ + _rl_adjust_point (old, ols - old, &ps_old); + _rl_adjust_point (new, nls - new, &ps_new); +#endif + + if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0) + break; + + if (*ols == ' ') + wsatend = 0; + + ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY); + nls = new + _rl_find_prev_mbchar (new, nls - new, MB_FIND_ANY); + } + } + else + { +#endif /* HANDLE_MULTIBYTE */ + ols = oe - 1; /* find last same */ + nls = ne - 1; + while ((ols > ofd) && (nls > nfd) && (*ols == *nls)) + { + if (*ols != ' ') + wsatend = 0; + ols--; + nls--; + } +#if defined (HANDLE_MULTIBYTE) + } +#endif + + if (wsatend) + { + ols = oe; + nls = ne; + } +#if defined (HANDLE_MULTIBYTE) + /* This may not work for stateful encoding, but who cares? To handle + stateful encoding properly, we have to scan each string from the + beginning and compare. */ + else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0) +#else + else if (*ols != *nls) +#endif + { + if (*ols) /* don't step past the NUL */ + { + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + ols = old + _rl_find_next_mbchar (old, ols - old, 1, MB_FIND_ANY); + else + ols++; + } + if (*nls) + { + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + nls = new + _rl_find_next_mbchar (new, nls - new, 1, MB_FIND_ANY); + else + nls++; + } + } + + /* count of invisible characters in the current invisible line. */ + current_invis_chars = W_OFFSET (current_line, wrap_offset); + if (_rl_last_v_pos != current_line) + { + _rl_move_vert (current_line); + if (current_line == 0 && visible_wrap_offset) + _rl_last_c_pos += visible_wrap_offset; + } + + /* If this is the first line and there are invisible characters in the + prompt string, and the prompt string has not changed, and the current + cursor position is before the last invisible character in the prompt, + and the index of the character to move to is past the end of the prompt + string, then redraw the entire prompt string. We can only do this + reliably if the terminal supports a `cr' capability. + + This is not an efficiency hack -- there is a problem with redrawing + portions of the prompt string if they contain terminal escape + sequences (like drawing the `unbold' sequence without a corresponding + `bold') that manifests itself on certain terminals. */ + + lendiff = local_prompt ? strlen (local_prompt) : 0; + od = ofd - old; /* index of first difference in visible line */ + if (current_line == 0 && !_rl_horizontal_scroll_mode && + _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 && + od >= lendiff && _rl_last_c_pos <= prompt_last_invisible) + { +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else + tputs (_rl_term_cr, 1, _rl_output_character_function); +#endif + _rl_output_some_chars (local_prompt, lendiff); + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff); + else + _rl_last_c_pos = lendiff; + } + + _rl_move_cursor_relative (od, old); + + /* if (len (new) > len (old)) + lendiff == difference in buffer + col_lendiff == difference on screen + When not using multibyte characters, these are equal */ + lendiff = (nls - nfd) - (ols - ofd); + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + col_lendiff = _rl_col_width (new, nfd - new, nls - new) - _rl_col_width (old, ofd - old, ols - old); + else + col_lendiff = lendiff; + + /* If we are changing the number of invisible characters in a line, and + the spot of first difference is before the end of the invisible chars, + lendiff needs to be adjusted. */ + if (current_line == 0 && !_rl_horizontal_scroll_mode && + current_invis_chars != visible_wrap_offset) + { + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + lendiff += visible_wrap_offset - current_invis_chars; + col_lendiff += visible_wrap_offset - current_invis_chars; + } + else + { + lendiff += visible_wrap_offset - current_invis_chars; + col_lendiff = lendiff; + } + } + + /* Insert (diff (len (old), len (new)) ch. */ + temp = ne - nfd; + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + col_temp = _rl_col_width (new, nfd - new, ne - new); + else + col_temp = temp; + + if (col_lendiff > 0) /* XXX - was lendiff */ + { + /* Non-zero if we're increasing the number of lines. */ + int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; + /* Sometimes it is cheaper to print the characters rather than + use the terminal's capabilities. If we're growing the number + of lines, make sure we actually cause the new line to wrap + around on auto-wrapping terminals. */ + if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) + { + /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and + _rl_horizontal_scroll_mode == 1, inserting the characters with + _rl_term_IC or _rl_term_ic will screw up the screen because of the + invisible characters. We need to just draw them. */ + if (*ols && (!_rl_horizontal_scroll_mode || _rl_last_c_pos > 0 || + lendiff <= prompt_visible_length || !current_invis_chars)) + { + insert_some_chars (nfd, lendiff, col_lendiff); + _rl_last_c_pos += col_lendiff; + } + else if (*ols == 0 && lendiff > 0) + { + /* At the end of a line the characters do not have to + be "inserted". They can just be placed on the screen. */ + /* However, this screws up the rest of this block, which + assumes you've done the insert because you can. */ + _rl_output_some_chars (nfd, lendiff); + _rl_last_c_pos += col_lendiff; + } + else + { + /* We have horizontal scrolling and we are not inserting at + the end. We have invisible characters in this line. This + is a dumb update. */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; + return; + } + /* Copy (new) chars to screen from first diff to last match. */ + temp = nls - nfd; + if ((temp - lendiff) > 0) + { + _rl_output_some_chars (nfd + lendiff, temp - lendiff); +#if 1 + /* XXX -- this bears closer inspection. Fixes a redisplay bug + reported against bash-3.0-alpha by Andreas Schwab involving + multibyte characters and prompt strings with invisible + characters, but was previously disabled. */ + _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); +#else + _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); +#endif + } + } + else + { + /* cannot insert chars, write to EOL */ + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; + } + } + else /* Delete characters from line. */ + { + /* If possible and inexpensive to use terminal deletion, then do so. */ + if (_rl_term_dc && (2 * col_temp) >= -col_lendiff) + { + /* If all we're doing is erasing the invisible characters in the + prompt string, don't bother. It screws up the assumptions + about what's on the screen. */ + if (_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 && + -lendiff == visible_wrap_offset) + col_lendiff = 0; + + if (col_lendiff) + delete_chars (-col_lendiff); /* delete (diff) characters */ + + /* Copy (new) chars to screen from first diff to last match */ + temp = nls - nfd; + if (temp > 0) + { + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; + } + } + /* Otherwise, print over the existing material. */ + else + { + if (temp > 0) + { + _rl_output_some_chars (nfd, temp); + _rl_last_c_pos += col_temp; + } + lendiff = (oe - old) - (ne - new); + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + col_lendiff = _rl_col_width (old, 0, oe - old) - _rl_col_width (new, 0, ne - new); + else + col_lendiff = lendiff; + + if (col_lendiff) + { + if (_rl_term_autowrap && current_line < inv_botlin) + space_to_eol (col_lendiff); + else + _rl_clear_to_eol (col_lendiff); + } + } + } +} + +/* Tell the update routines that we have moved onto a new (empty) line. */ +int +rl_on_new_line () +{ + if (visible_line) + visible_line[0] = '\0'; + + _rl_last_c_pos = _rl_last_v_pos = 0; + _rl_vis_botlin = last_lmargin = 0; + if (vis_lbreaks) + vis_lbreaks[0] = vis_lbreaks[1] = 0; + visible_wrap_offset = 0; + return 0; +} + +/* Tell the update routines that we have moved onto a new line with the + prompt already displayed. Code originally from the version of readline + distributed with CLISP. rl_expand_prompt must have already been called + (explicitly or implicitly). This still doesn't work exactly right. */ +int +rl_on_new_line_with_prompt () +{ + int prompt_size, i, l, real_screenwidth, newlines; + char *prompt_last_line, *lprompt; + + /* Initialize visible_line and invisible_line to ensure that they can hold + the already-displayed prompt. */ + prompt_size = strlen (rl_prompt) + 1; + init_line_structures (prompt_size); + + /* Make sure the line structures hold the already-displayed prompt for + redisplay. */ + lprompt = local_prompt ? local_prompt : rl_prompt; + strcpy (visible_line, lprompt); + strcpy (invisible_line, lprompt); + + /* If the prompt contains newlines, take the last tail. */ + prompt_last_line = strrchr (rl_prompt, '\n'); + if (!prompt_last_line) + prompt_last_line = rl_prompt; + + l = strlen (prompt_last_line); + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l); + else + _rl_last_c_pos = l; + + /* Dissect prompt_last_line into screen lines. Note that here we have + to use the real screenwidth. Readline's notion of screenwidth might be + one less, see terminal.c. */ + real_screenwidth = _rl_screenwidth + (_rl_term_autowrap ? 0 : 1); + _rl_last_v_pos = l / real_screenwidth; + /* If the prompt length is a multiple of real_screenwidth, we don't know + whether the cursor is at the end of the last line, or already at the + beginning of the next line. Output a newline just to be safe. */ + if (l > 0 && (l % real_screenwidth) == 0) + _rl_output_some_chars ("\n", 1); + last_lmargin = 0; + + newlines = 0; i = 0; + while (i <= l) + { + _rl_vis_botlin = newlines; + vis_lbreaks[newlines++] = i; + i += real_screenwidth; + } + vis_lbreaks[newlines] = l; + visible_wrap_offset = 0; + + rl_display_prompt = rl_prompt; /* XXX - make sure it's set */ + + return 0; +} + +/* Actually update the display, period. */ +int +rl_forced_update_display () +{ + if (visible_line) + { + register char *temp = visible_line; + + while (*temp) + *temp++ = '\0'; + } + rl_on_new_line (); + forced_display++; + (*rl_redisplay_function) (); + return 0; +} + +/* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices. + DATA is the contents of the screen line of interest; i.e., where + the movement is being done. */ +void +_rl_move_cursor_relative (new, data) + int new; + const char *data; +{ + register int i; + + /* If we don't have to do anything, then return. */ +#if defined (HANDLE_MULTIBYTE) + /* If we have multibyte characters, NEW is indexed by the buffer point in + a multibyte string, but _rl_last_c_pos is the display position. In + this case, NEW's display position is not obvious and must be + calculated. */ + if (MB_CUR_MAX == 1 || rl_byte_oriented) + { + if (_rl_last_c_pos == new) + return; + } + else if (_rl_last_c_pos == _rl_col_width (data, 0, new)) + return; +#else + if (_rl_last_c_pos == new) return; +#endif + + /* It may be faster to output a CR, and then move forwards instead + of moving backwards. */ + /* i == current physical cursor position. */ + i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); + if (new == 0 || CR_FASTER (new, _rl_last_c_pos) || + (_rl_term_autowrap && i == _rl_screenwidth)) + { +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else + tputs (_rl_term_cr, 1, _rl_output_character_function); +#endif /* !__MSDOS__ */ + _rl_last_c_pos = 0; + } + + if (_rl_last_c_pos < new) + { + /* Move the cursor forward. We do it by printing the command + to move the cursor forward if there is one, else print that + portion of the output buffer again. Which is cheaper? */ + + /* The above comment is left here for posterity. It is faster + to print one character (non-control) than to print a control + sequence telling the terminal to move forward one character. + That kind of control is for people who don't know what the + data is underneath the cursor. */ +#if defined (HACK_TERMCAP_MOTION) + if (_rl_term_forward_char) + { + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + int width; + width = _rl_col_width (data, _rl_last_c_pos, new); + for (i = 0; i < width; i++) + tputs (_rl_term_forward_char, 1, _rl_output_character_function); + } + else + { + for (i = _rl_last_c_pos; i < new; i++) + tputs (_rl_term_forward_char, 1, _rl_output_character_function); + } + } + else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + tputs (_rl_term_cr, 1, _rl_output_character_function); + for (i = 0; i < new; i++) + putc (data[i], rl_outstream); + } + else + for (i = _rl_last_c_pos; i < new; i++) + putc (data[i], rl_outstream); + +#else /* !HACK_TERMCAP_MOTION */ + + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + { + tputs (_rl_term_cr, 1, _rl_output_character_function); + for (i = 0; i < new; i++) + putc (data[i], rl_outstream); + } + else + for (i = _rl_last_c_pos; i < new; i++) + putc (data[i], rl_outstream); + +#endif /* !HACK_TERMCAP_MOTION */ + + } +#if defined (HANDLE_MULTIBYTE) + /* NEW points to the buffer point, but _rl_last_c_pos is the display point. + The byte length of the string is probably bigger than the column width + of the string, which means that if NEW == _rl_last_c_pos, then NEW's + display point is less than _rl_last_c_pos. */ + else if (_rl_last_c_pos >= new) +#else + else if (_rl_last_c_pos > new) +#endif + { + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new)); + else + _rl_backspace (_rl_last_c_pos - new); + } + + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) + _rl_last_c_pos = _rl_col_width (data, 0, new); + else + _rl_last_c_pos = new; +} + +/* PWP: move the cursor up or down. */ +void +_rl_move_vert (to) + int to; +{ + register int delta, i; + + if (_rl_last_v_pos == to || to > _rl_screenheight) + return; + + if ((delta = to - _rl_last_v_pos) > 0) + { + for (i = 0; i < delta; i++) + putc ('\n', rl_outstream); +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else + tputs (_rl_term_cr, 1, _rl_output_character_function); +#endif + _rl_last_c_pos = 0; + } + else + { /* delta < 0 */ + if (_rl_term_up && *_rl_term_up) + for (i = 0; i < -delta; i++) + tputs (_rl_term_up, 1, _rl_output_character_function); + } + + _rl_last_v_pos = to; /* Now TO is here */ +} + +/* Physically print C on rl_outstream. This is for functions which know + how to optimize the display. Return the number of characters output. */ +int +rl_show_char (c) + int c; +{ + int n = 1; + if (META_CHAR (c) && (_rl_output_meta_chars == 0)) + { + fprintf (rl_outstream, "M-"); + n += 2; + c = UNMETA (c); + } + +#if defined (DISPLAY_TABS) + if ((CTRL_CHAR (c) && c != '\t') || c == RUBOUT) +#else + if (CTRL_CHAR (c) || c == RUBOUT) +#endif /* !DISPLAY_TABS */ + { + fprintf (rl_outstream, "C-"); + n += 2; + c = CTRL_CHAR (c) ? UNCTRL (c) : '?'; + } + + putc (c, rl_outstream); + fflush (rl_outstream); + return n; +} + +int +rl_character_len (c, pos) + register int c, pos; +{ + unsigned char uc; + + uc = (unsigned char)c; + + if (META_CHAR (uc)) + return ((_rl_output_meta_chars == 0) ? 4 : 1); + + if (uc == '\t') + { +#if defined (DISPLAY_TABS) + return (((pos | 7) + 1) - pos); +#else + return (2); +#endif /* !DISPLAY_TABS */ + } + + if (CTRL_CHAR (c) || c == RUBOUT) + return (2); + + return ((ISPRINT (uc)) ? 1 : 2); +} + +/* How to print things in the "echo-area". The prompt is treated as a + mini-modeline. */ + +#if defined (USE_VARARGS) +int +#if defined (PREFER_STDARG) +rl_message (const char *format, ...) +#else +rl_message (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 + +#if defined (HAVE_VSNPRINTF) + vsnprintf (msg_buf, sizeof (msg_buf) - 1, format, args); +#else + vsprintf (msg_buf, format, args); + msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */ +#endif + va_end (args); + + rl_display_prompt = msg_buf; + (*rl_redisplay_function) (); + return 0; +} +#else /* !USE_VARARGS */ +int +rl_message (format, arg1, arg2) + char *format; +{ + sprintf (msg_buf, format, arg1, arg2); + msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */ + rl_display_prompt = msg_buf; + (*rl_redisplay_function) (); + return 0; +} +#endif /* !USE_VARARGS */ + +/* How to clear things from the "echo-area". */ +int +rl_clear_message () +{ + rl_display_prompt = rl_prompt; + (*rl_redisplay_function) (); + return 0; +} + +int +rl_reset_line_state () +{ + rl_on_new_line (); + + rl_display_prompt = rl_prompt ? rl_prompt : ""; + forced_display = 1; + return 0; +} + +/* These are getting numerous enough that it's time to create a struct. */ + +static char *saved_local_prompt; +static char *saved_local_prefix; +static int saved_last_invisible; +static int saved_visible_length; +static int saved_invis_chars_first_line; +static int saved_physical_chars; + +void +rl_save_prompt () +{ + saved_local_prompt = local_prompt; + saved_local_prefix = local_prompt_prefix; + saved_last_invisible = prompt_last_invisible; + saved_visible_length = prompt_visible_length; + saved_invis_chars_first_line = prompt_invis_chars_first_line; + saved_physical_chars = prompt_physical_chars; + + local_prompt = local_prompt_prefix = (char *)0; + prompt_last_invisible = prompt_visible_length = 0; + prompt_invis_chars_first_line = prompt_physical_chars = 0; +} + +void +rl_restore_prompt () +{ + FREE (local_prompt); + FREE (local_prompt_prefix); + + local_prompt = saved_local_prompt; + local_prompt_prefix = saved_local_prefix; + prompt_last_invisible = saved_last_invisible; + prompt_visible_length = saved_visible_length; + prompt_invis_chars_first_line = saved_invis_chars_first_line; + prompt_physical_chars = saved_physical_chars; +} + +char * +_rl_make_prompt_for_search (pchar) + int pchar; +{ + int len; + char *pmt; + + rl_save_prompt (); + + if (saved_local_prompt == 0) + { + len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0; + pmt = (char *)xmalloc (len + 2); + if (len) + strcpy (pmt, rl_prompt); + pmt[len] = pchar; + pmt[len+1] = '\0'; + } + else + { + len = *saved_local_prompt ? strlen (saved_local_prompt) : 0; + pmt = (char *)xmalloc (len + 2); + if (len) + strcpy (pmt, saved_local_prompt); + pmt[len] = pchar; + pmt[len+1] = '\0'; + local_prompt = savestring (pmt); + prompt_last_invisible = saved_last_invisible; + prompt_visible_length = saved_visible_length + 1; + } + + return pmt; +} + +/* Quick redisplay hack when erasing characters at the end of the line. */ +void +_rl_erase_at_end_of_line (l) + int l; +{ + register int i; + + _rl_backspace (l); + for (i = 0; i < l; i++) + putc (' ', rl_outstream); + _rl_backspace (l); + for (i = 0; i < l; i++) + visible_line[--_rl_last_c_pos] = '\0'; + rl_display_fixed++; +} + +/* Clear to the end of the line. COUNT is the minimum + number of character spaces to clear, */ +void +_rl_clear_to_eol (count) + int count; +{ + if (_rl_term_clreol) + tputs (_rl_term_clreol, 1, _rl_output_character_function); + else if (count) + space_to_eol (count); +} + +/* Clear to the end of the line using spaces. COUNT is the minimum + number of character spaces to clear, */ +static void +space_to_eol (count) + int count; +{ + register int i; + + for (i = 0; i < count; i++) + putc (' ', rl_outstream); + + _rl_last_c_pos += count; +} + +void +_rl_clear_screen () +{ + if (_rl_term_clrpag) + tputs (_rl_term_clrpag, 1, _rl_output_character_function); + else + rl_crlf (); +} + +/* Insert COUNT characters from STRING to the output stream at column COL. */ +static void +insert_some_chars (string, count, col) + char *string; + int 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); + + /* If IC is defined, then we do not have to "enter" insert mode. */ + if (_rl_term_IC) + { + char *buffer; + + buffer = tgoto (_rl_term_IC, 0, col); + tputs (buffer, 1, _rl_output_character_function); + _rl_output_some_chars (string, count); + } + else + { + register int i; + + /* If we have to turn on insert-mode, then do so. */ + if (_rl_term_im && *_rl_term_im) + tputs (_rl_term_im, 1, _rl_output_character_function); + + /* If there is a special command for inserting characters, then + use that first to open up the space. */ + if (_rl_term_ic && *_rl_term_ic) + { + for (i = col; i--; ) + tputs (_rl_term_ic, 1, _rl_output_character_function); + } + + /* Print the text. */ + _rl_output_some_chars (string, count); + + /* If there is a string to turn off insert mode, we had best use + it now. */ + if (_rl_term_ei && *_rl_term_ei) + tputs (_rl_term_ei, 1, _rl_output_character_function); + } +} + +/* Delete COUNT characters from the display line. */ +static void +delete_chars (count) + int count; +{ + if (count > _rl_screenwidth) /* XXX */ + return; + + if (_rl_term_DC && *_rl_term_DC) + { + char *buffer; + buffer = tgoto (_rl_term_DC, count, count); + tputs (buffer, count, _rl_output_character_function); + } + else + { + if (_rl_term_dc && *_rl_term_dc) + while (count--) + tputs (_rl_term_dc, 1, _rl_output_character_function); + } +} + +void +_rl_update_final () +{ + int full_lines; + + full_lines = 0; + /* If the cursor is the only thing on an otherwise-blank last line, + compensate so we don't print an extra CRLF. */ + if (_rl_vis_botlin && _rl_last_c_pos == 0 && + visible_line[vis_lbreaks[_rl_vis_botlin]] == 0) + { + _rl_vis_botlin--; + full_lines = 1; + } + _rl_move_vert (_rl_vis_botlin); + /* If we've wrapped lines, remove the final xterm line-wrap flag. */ + if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == _rl_screenwidth)) + { + char *last_line; + + last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]]; + _rl_move_cursor_relative (_rl_screenwidth - 1, last_line); + _rl_clear_to_eol (0); + putc (last_line[_rl_screenwidth - 1], rl_outstream); + } + _rl_vis_botlin = 0; + rl_crlf (); + fflush (rl_outstream); + rl_display_fixed++; +} + +/* Move to the start of the current line. */ +static void +cr () +{ + if (_rl_term_cr) + { +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else + tputs (_rl_term_cr, 1, _rl_output_character_function); +#endif + _rl_last_c_pos = 0; + } +} + +/* Redraw the last line of a multi-line prompt that may possibly contain + terminal escape sequences. Called with the cursor at column 0 of the + line to draw the prompt on. */ +static void +redraw_prompt (t) + char *t; +{ + char *oldp, *oldl, *oldlprefix; + int oldlen, oldlast, oldplen, oldninvis, oldphyschars; + + /* Geez, I should make this a struct. */ + oldp = rl_display_prompt; + oldl = local_prompt; + oldlprefix = local_prompt_prefix; + oldlen = prompt_visible_length; + oldplen = prompt_prefix_length; + oldlast = prompt_last_invisible; + oldninvis = prompt_invis_chars_first_line; + oldphyschars = prompt_physical_chars; + + rl_display_prompt = t; + local_prompt = expand_prompt (t, &prompt_visible_length, + &prompt_last_invisible, + &prompt_invis_chars_first_line, + &prompt_physical_chars); + local_prompt_prefix = (char *)NULL; + rl_forced_update_display (); + + rl_display_prompt = oldp; + local_prompt = oldl; + local_prompt_prefix = oldlprefix; + prompt_visible_length = oldlen; + prompt_prefix_length = oldplen; + prompt_last_invisible = oldlast; + prompt_invis_chars_first_line = oldninvis; + prompt_physical_chars = oldphyschars; +} + +/* Redisplay the current line after a SIGWINCH is received. */ +void +_rl_redisplay_after_sigwinch () +{ + char *t; + + /* Clear the current line and put the cursor at column 0. Make sure + the right thing happens if we have wrapped to a new screen line. */ + if (_rl_term_cr) + { +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else + tputs (_rl_term_cr, 1, _rl_output_character_function); +#endif + _rl_last_c_pos = 0; +#if defined (__MSDOS__) + space_to_eol (_rl_screenwidth); + putc ('\r', rl_outstream); +#else + if (_rl_term_clreol) + tputs (_rl_term_clreol, 1, _rl_output_character_function); + else + { + space_to_eol (_rl_screenwidth); + tputs (_rl_term_cr, 1, _rl_output_character_function); + } +#endif + if (_rl_last_v_pos > 0) + _rl_move_vert (0); + } + else + rl_crlf (); + + /* Redraw only the last line of a multi-line prompt. */ + t = strrchr (rl_display_prompt, '\n'); + if (t) + redraw_prompt (++t); + else + rl_forced_update_display (); +} + +void +_rl_clean_up_for_exit () +{ + if (readline_echoing_p) + { + _rl_move_vert (_rl_vis_botlin); + _rl_vis_botlin = 0; + fflush (rl_outstream); + rl_restart_output (1, 0); + } +} + +void +_rl_erase_entire_line () +{ + cr (); + _rl_clear_to_eol (0); + cr (); + fflush (rl_outstream); +} + +/* return the `current display line' of the cursor -- the number of lines to + move up to get to the first screen line of the current readline line. */ +int +_rl_current_display_line () +{ + int ret, nleft; + + /* Find out whether or not there might be invisible characters in the + editing buffer. */ + if (rl_display_prompt == rl_prompt) + nleft = _rl_last_c_pos - _rl_screenwidth - rl_visible_prompt_length; + else + nleft = _rl_last_c_pos - _rl_screenwidth; + + if (nleft > 0) + ret = 1 + nleft / _rl_screenwidth; + else + ret = 0; + + return ret; +} + +#if defined (HANDLE_MULTIBYTE) +/* Calculate the number of screen columns occupied by STR from START to END. + In the case of multibyte characters with stateful encoding, we have to + scan from the beginning of the string to take the state into account. */ +static int +_rl_col_width (str, start, end) + const char *str; + int start, end; +{ + wchar_t wc; + mbstate_t ps = {0}; + int tmp, point, width, max; + + if (end <= start) + return 0; + + point = 0; + max = end; + + while (point < start) + { + tmp = mbrlen (str + point, max, &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { + /* In this case, the bytes are invalid or too short to compose a + multibyte character, so we assume that the first byte represents + a single character. */ + point++; + max--; + + /* Clear the state of the byte sequence, because in this case the + effect of mbstate is undefined. */ + memset (&ps, 0, sizeof (mbstate_t)); + } + else if (MB_NULLWCH (tmp)) + break; /* Found '\0' */ + else + { + point += tmp; + max -= tmp; + } + } + + /* If START is not a byte that starts a character, then POINT will be + greater than START. In this case, assume that (POINT - START) gives + a byte count that is the number of columns of difference. */ + width = point - start; + + while (point < end) + { + tmp = mbrtowc (&wc, str + point, max, &ps); + if (MB_INVALIDCH ((size_t)tmp)) + { + /* In this case, the bytes are invalid or too short to compose a + multibyte character, so we assume that the first byte represents + a single character. */ + point++; + max--; + + /* and assume that the byte occupies a single column. */ + width++; + + /* Clear the state of the byte sequence, because in this case the + effect of mbstate is undefined. */ + memset (&ps, 0, sizeof (mbstate_t)); + } + else if (MB_NULLWCH (tmp)) + break; /* Found '\0' */ + else + { + point += tmp; + max -= tmp; + tmp = wcwidth(wc); + width += (tmp >= 0) ? tmp : 1; + } + } + + width += point - end; + + return width; +} +#endif /* HANDLE_MULTIBYTE */ diff --git a/lib/readline/doc/fdl.texi b/lib/readline/doc/fdl.texi index 47ead9f0..68e5eb54 100644..120000 --- a/lib/readline/doc/fdl.texi +++ b/lib/readline/doc/fdl.texi @@ -1,452 +1 @@ - -@node GNU Free Documentation License -@appendixsec GNU Free Documentation License - -@cindex FDL, GNU Free Documentation License -@center Version 1.2, November 2002 - -@display -Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@enumerate 0 -@item -PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document @dfn{free} in the sense of freedom: to -assure everyone the effective freedom to copy and redistribute it, -with or without modifying it, either commercially or noncommercially. -Secondarily, this License preserves for the author and publisher a way -to get credit for their work, while not being considered responsible -for modifications made by others. - -This License is a kind of ``copyleft'', which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - -@item -APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work, in any medium, that -contains a notice placed by the copyright holder saying it can be -distributed under the terms of this License. Such a notice grants a -world-wide, royalty-free license, unlimited in duration, to use that -work under the conditions stated herein. The ``Document'', below, -refers to any such manual or work. Any member of the public is a -licensee, and is addressed as ``you''. You accept the license if you -copy, modify or distribute the work in a way requiring permission -under copyright law. - -A ``Modified Version'' of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A ``Secondary Section'' is a named appendix or a front-matter section -of the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall -subject (or to related matters) and contains nothing that could fall -directly within that overall subject. (Thus, if the Document is in -part a textbook of mathematics, a Secondary Section may not explain -any mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The ``Invariant Sections'' are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. If a -section does not fit the above definition of Secondary then it is not -allowed to be designated as Invariant. The Document may contain zero -Invariant Sections. If the Document does not identify any Invariant -Sections then there are none. - -The ``Cover Texts'' are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. A Front-Cover Text may -be at most 5 words, and a Back-Cover Text may be at most 25 words. - -A ``Transparent'' copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, that is suitable for revising the document -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup, or absence of markup, has been arranged to thwart -or discourage subsequent modification by readers is not Transparent. -An image format is not Transparent if used for any substantial amount -of text. A copy that is not ``Transparent'' is called ``Opaque''. - -Examples of suitable formats for Transparent copies include plain -@sc{ascii} without markup, Texinfo input format, La@TeX{} input -format, @acronym{SGML} or @acronym{XML} using a publicly available -@acronym{DTD}, and standard-conforming simple @acronym{HTML}, -PostScript or @acronym{PDF} designed for human modification. Examples -of transparent image formats include @acronym{PNG}, @acronym{XCF} and -@acronym{JPG}. Opaque formats include proprietary formats that can be -read and edited only by proprietary word processors, @acronym{SGML} or -@acronym{XML} for which the @acronym{DTD} and/or processing tools are -not generally available, and the machine-generated @acronym{HTML}, -PostScript or @acronym{PDF} produced by some word processors for -output purposes only. - -The ``Title Page'' means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, ``Title Page'' means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -A section ``Entitled XYZ'' means a named subunit of the Document whose -title either is precisely XYZ or contains XYZ in parentheses following -text that translates XYZ in another language. (Here XYZ stands for a -specific section name mentioned below, such as ``Acknowledgements'', -``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' -of such a section when you modify the Document means that it remains a -section ``Entitled XYZ'' according to this definition. - -The Document may include Warranty Disclaimers next to the notice which -states that this License applies to the Document. These Warranty -Disclaimers are considered to be included by reference in this -License, but only as regards disclaiming warranties: any other -implication that these Warranty Disclaimers may have is void and has -no effect on the meaning of this License. - -@item -VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - -@item -COPYING IN QUANTITY - -If you publish printed copies (or copies in media that commonly have -printed covers) of the Document, numbering more than 100, and the -Document's license notice requires Cover Texts, you must enclose the -copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a computer-network location from which the general network-using -public has access to download using public-standard network protocols -a complete Transparent copy of the Document, free of added material. -If you use the latter option, you must take reasonably prudent steps, -when you begin distribution of Opaque copies in quantity, to ensure -that this Transparent copy will remain thus accessible at the stated -location until at least one year after the last time you distribute an -Opaque copy (directly or through your agents or retailers) of that -edition to the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - -@item -MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -@enumerate A -@item -Use in the Title Page (and on the covers, if any) a title distinct -from that of the Document, and from those of previous versions -(which should, if there were any, be listed in the History section -of the Document). You may use the same title as a previous version -if the original publisher of that version gives permission. - -@item -List on the Title Page, as authors, one or more persons or entities -responsible for authorship of the modifications in the Modified -Version, together with at least five of the principal authors of the -Document (all of its principal authors, if it has fewer than five), -unless they release you from this requirement. - -@item -State on the Title page the name of the publisher of the -Modified Version, as the publisher. - -@item -Preserve all the copyright notices of the Document. - -@item -Add an appropriate copyright notice for your modifications -adjacent to the other copyright notices. - -@item -Include, immediately after the copyright notices, a license notice -giving the public permission to use the Modified Version under the -terms of this License, in the form shown in the Addendum below. - -@item -Preserve in that license notice the full lists of Invariant Sections -and required Cover Texts given in the Document's license notice. - -@item -Include an unaltered copy of this License. - -@item -Preserve the section Entitled ``History'', Preserve its Title, and add -to it an item stating at least the title, year, new authors, and -publisher of the Modified Version as given on the Title Page. If -there is no section Entitled ``History'' in the Document, create one -stating the title, year, authors, and publisher of the Document as -given on its Title Page, then add an item describing the Modified -Version as stated in the previous sentence. - -@item -Preserve the network location, if any, given in the Document for -public access to a Transparent copy of the Document, and likewise -the network locations given in the Document for previous versions -it was based on. These may be placed in the ``History'' section. -You may omit a network location for a work that was published at -least four years before the Document itself, or if the original -publisher of the version it refers to gives permission. - -@item -For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve -the Title of the section, and preserve in the section all the -substance and tone of each of the contributor acknowledgements and/or -dedications given therein. - -@item -Preserve all the Invariant Sections of the Document, -unaltered in their text and in their titles. Section numbers -or the equivalent are not considered part of the section titles. - -@item -Delete any section Entitled ``Endorsements''. Such a section -may not be included in the Modified Version. - -@item -Do not retitle any existing section to be Entitled ``Endorsements'' or -to conflict in title with any Invariant Section. - -@item -Preserve any Warranty Disclaimers. -@end enumerate - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section Entitled ``Endorsements'', provided it contains -nothing but endorsements of your Modified Version by various -parties---for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - -@item -COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice, and that you preserve all their Warranty Disclaimers. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections Entitled ``History'' -in the various original documents, forming one section Entitled -``History''; likewise combine any sections Entitled ``Acknowledgements'', -and any sections Entitled ``Dedications''. You must delete all -sections Entitled ``Endorsements.'' - -@item -COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - -@item -AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, is called an ``aggregate'' if the copyright -resulting from the compilation is not used to limit the legal rights -of the compilation's users beyond what the individual works permit. -When the Document is included an aggregate, this License does not -apply to the other works in the aggregate which are not themselves -derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one half of -the entire aggregate, the Document's Cover Texts may be placed on -covers that bracket the Document within the aggregate, or the -electronic equivalent of covers if the Document is in electronic form. -Otherwise they must appear on printed covers that bracket the whole -aggregate. - -@item -TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License, and all the license notices in the -Document, and any Warranty Disclaimers, provided that you also include -the original English version of this License and the original versions -of those notices and disclaimers. In case of a disagreement between -the translation and the original version of this License or a notice -or disclaimer, the original version will prevail. - -If a section in the Document is Entitled ``Acknowledgements'', -``Dedications'', or ``History'', the requirement (section 4) to Preserve -its Title (section 1) will typically require changing the actual -title. - -@item -TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - -@item -FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -@uref{http://www.gnu.org/copyleft/}. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License ``or any later version'' applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. -@end enumerate - -@page -@appendixsubsec ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - -@smallexample -@group - Copyright (C) @var{year} @var{your name}. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. -@end group -@end smallexample - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the ``with...Texts.'' line with this: - -@smallexample -@group - with the Invariant Sections being @var{list their titles}, with - the Front-Cover Texts being @var{list}, and with the Back-Cover Texts - being @var{list}. -@end group -@end smallexample - -If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. - -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: - +../../../doc/fdl.texi
\ No newline at end of file diff --git a/lib/readline/doc/history.dvi b/lib/readline/doc/history.dvi Binary files differindex b8fcb0d9..031a31d6 100644 --- a/lib/readline/doc/history.dvi +++ b/lib/readline/doc/history.dvi diff --git a/lib/readline/doc/history.html b/lib/readline/doc/history.html index 5da3c58f..d8e3a0e9 100644 --- a/lib/readline/doc/history.html +++ b/lib/readline/doc/history.html @@ -1,6 +1,6 @@ <HTML> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<!-- Created on September, 22 2003 by texi2html 1.64 --> +<!-- Created on July, 27 2004 by texi2html 1.64 --> <!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> @@ -2100,7 +2100,7 @@ to permit their use in free software. <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> </TR></TABLE> <H1>About this document</H1> -This document was generated by <I>Chet Ramey</I> on <I>September, 22 2003</I> +This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> <P></P> @@ -2262,7 +2262,7 @@ the following structure: <BR> <FONT SIZE="-1"> This document was generated -by <I>Chet Ramey</I> on <I>September, 22 2003</I> +by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> diff --git a/lib/readline/doc/history.info b/lib/readline/doc/history.info index 70bbb622..e7dddf79 100644 --- a/lib/readline/doc/history.info +++ b/lib/readline/doc/history.info @@ -1,11 +1,11 @@ This is history.info, produced by makeinfo version 4.5 from ./history.texi. -This document describes the GNU History library (version 5.0, 19 -September 2003), a programming tool that provides a consistent user +This document describes the GNU History library (version 5.0, 28 +January 2004), a programming tool that provides a consistent user interface for recalling lines of previously typed input. - Copyright (C) 1988-2003 Free Software Foundation, Inc. + Copyright (C) 1988-2004 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -1290,28 +1290,28 @@ Function and Variable Index Tag Table: -Node: Top1282 -Node: Using History Interactively1910 -Node: History Interaction2417 -Node: Event Designators3836 -Node: Word Designators4760 -Node: Modifiers6390 -Node: Programming with GNU History7608 -Node: Introduction to History8339 -Node: History Storage10024 -Node: History Functions11159 -Node: Initializing History and State Management12143 -Node: History List Management12943 -Node: Information About the History List14957 -Node: Moving Around the History List16439 -Node: Searching the History List17428 -Node: Managing the History File19346 -Node: History Expansion21152 -Node: History Variables23047 -Node: History Programming Example25836 -Node: Copying This Manual28558 -Node: GNU Free Documentation License28796 -Node: Concept Index51189 -Node: Function and Variable Index51739 +Node: Top1280 +Node: Using History Interactively1908 +Node: History Interaction2415 +Node: Event Designators3834 +Node: Word Designators4758 +Node: Modifiers6388 +Node: Programming with GNU History7606 +Node: Introduction to History8337 +Node: History Storage10022 +Node: History Functions11157 +Node: Initializing History and State Management12141 +Node: History List Management12941 +Node: Information About the History List14955 +Node: Moving Around the History List16437 +Node: Searching the History List17426 +Node: Managing the History File19344 +Node: History Expansion21150 +Node: History Variables23045 +Node: History Programming Example25834 +Node: Copying This Manual28556 +Node: GNU Free Documentation License28794 +Node: Concept Index51187 +Node: Function and Variable Index51737 End Tag Table diff --git a/lib/readline/doc/history.log b/lib/readline/doc/history.log index 8400c260..a790fcf4 100644 --- a/lib/readline/doc/history.log +++ b/lib/readline/doc/history.log @@ -1,9 +1,9 @@ -This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 22 SEP 2003 09:04 -**/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/history. -texi +This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 27 JUL 2004 09:31 +**/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/his +tory.texi -(/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/history.t -exi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, +(/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/hist +ory.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, \bindingoffset=\dimen16 \normaloffset=\dimen17 \pagewidth=\dimen18 @@ -34,13 +34,13 @@ exi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, \toksD=\toks18 \boxA=\box19 \countA=\count30 - fonts, + +fonts, \sffam=\fam8 \textleading=\dimen26 \mainmagstep=\count31 \fontdepth=\count32 - -page headings, + page headings, \titlepagetopglue=\skip20 \titlepagebottomglue=\skip21 \evenheadline=\toks19 @@ -81,7 +81,8 @@ page headings, \lastnegativepageno=\count43 \shortappendixwidth=\dimen33 \tocindent=\dimen34 - environments, + +environments, \errorbox=\box22 \lispnarrowing=\skip30 \envskipamount=\skip31 @@ -94,8 +95,7 @@ page headings, \lskip=\skip35 \rskip=\skip36 \tabw=\dimen38 - -defuns, + defuns, \defbodyindent=\skip37 \defargsindent=\skip38 \deflastargmargin=\skip39 @@ -162,11 +162,11 @@ and turning on texinfo input format.) (history.aux) [22] (history.vrs) [23] [24] ) Here is how much of TeX's memory you used: 1399 strings out of 13013 - 16305 string characters out of 97233 - 45527 words of memory out of 263001 + 16315 string characters out of 97233 + 45523 words of memory out of 263001 2271 multiletter control sequences out of 10000+0 31953 words of font info for 111 fonts, out of 400000 for 1000 19 hyphenation exceptions out of 1000 - 15i,6n,17p,306b,649s stack positions out of 300i,100n,500p,50000b,4000s + 15i,6n,17p,311b,649s stack positions out of 300i,100n,500p,50000b,4000s -Output written on history.dvi (28 pages, 79868 bytes). +Output written on history.dvi (28 pages, 79856 bytes). diff --git a/lib/readline/doc/history.ps b/lib/readline/doc/history.ps index 71a748a4..6e07bfa6 100644 --- a/lib/readline/doc/history.ps +++ b/lib/readline/doc/history.ps @@ -8,7 +8,7 @@ %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi %DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2003.09.22:0904 +%DVIPSSource: TeX output 2004.07.27:0931 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -977,40 +977,41 @@ TeXDict begin %%Page: 1 1 1 0 bop 75 659 a Fs(GNU)33 b(History)f(Library)p 75 709 1800 17 v 960 757 a Fr(Edition)16 b(5.0,)e(for)h Fq(History)f(Library)g -Fr(V)l(ersion)i(5.0.)1559 811 y(Septem)o(b)q(er)g(2003)75 +Fr(V)l(ersion)i(5.0.)1609 811 y(Jan)o(uary)f(2004)75 2467 y Fp(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75 2534 y(Brian)h(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p 75 2570 1800 9 v eop %%Page: 2 2 -2 1 bop 75 1512 a Fr(This)22 b(do)q(cumen)o(t)h(describ)q(es)g(the)f -(GNU)g(History)f(library)i(\(v)o(ersion)f(5.0,)g(19)f(Septem)o(b)q(er)i -(2003\),)e(a)75 1567 y(programming)15 b(to)q(ol)h(that)g(pro)o(vides)g -(a)g(consisten)o(t)g(user)g(in)o(terface)g(for)g(recalling)h(lines)h -(of)e(previously)75 1621 y(t)o(yp)q(ed)g(input.)75 1689 -y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fo(\015)e Fr(1988-2003)f(F)l -(ree)i(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)75 1756 -y(P)o(ermission)i(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g(distribute)i -(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o(vided)h(the)75 -1811 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q(ermission)g(notice)g -(are)f(preserv)o(ed)h(on)f(all)h(copies.)195 1878 y(P)o(ermission)i(is) -g(gran)o(ted)f(to)g(cop)o(y)l(,)h(distribute)h(and/or)e(mo)q(dify)h -(this)g(do)q(cumen)o(t)g(under)195 1933 y(the)h(terms)f(of)h(the)g(GNU) -g(F)l(ree)g(Do)q(cumen)o(tation)g(License,)i(V)l(ersion)f(1.1)e(or)g -(an)o(y)h(later)195 1988 y(v)o(ersion)14 b(published)i(b)o(y)e(the)g(F) -l(ree)f(Soft)o(w)o(are)g(F)l(oundation;)h(with)g(no)f(In)o(v)m(arian)o -(t)i(Sections,)195 2042 y(with)h(the)f(F)l(ron)o(t-Co)o(v)o(er)e(texts) -i(b)q(eing)i(\\A)e(GNU)g(Man)o(ual,")g(and)g(with)h(the)f(Bac)o(k-Co)o -(v)o(er)195 2097 y(T)l(exts)h(as)g(in)h(\(a\))e(b)q(elo)o(w.)24 -b(A)16 b(cop)o(y)g(of)g(the)g(license)i(is)f(included)i(in)e(the)f -(section)h(en)o(titled)195 2152 y(\\GNU)e(F)l(ree)g(Do)q(cumen)o -(tation)g(License.")195 2219 y(\(a\))j(The)h(FSF's)f(Bac)o(k-Co)o(v)o -(er)g(T)l(ext)h(is:)28 b(\\Y)l(ou)19 b(ha)o(v)o(e)g(freedom)g(to)f(cop) -o(y)h(and)g(mo)q(dify)195 2274 y(this)e(GNU)f(Man)o(ual,)g(lik)o(e)h -(GNU)f(soft)o(w)o(are.)22 b(Copies)17 b(published)h(b)o(y)f(the)f(F)l -(ree)g(Soft)o(w)o(are)195 2329 y(F)l(oundation)g(raise)f(funds)h(for)e -(GNU)h(dev)o(elopmen)o(t.")75 2451 y(Published)i(b)o(y)f(the)f(F)l(ree) -g(Soft)o(w)o(are)f(F)l(oundation)75 2506 y(59)h(T)l(emple)h(Place,)f +2 1 bop 75 1512 a Fr(This)19 b(do)q(cumen)o(t)f(describ)q(es)h(the)f +(GNU)g(History)g(library)h(\(v)o(ersion)e(5.0,)h(28)f(Jan)o(uary)h +(2004\),)e(a)i(pro-)75 1567 y(gramming)11 b(to)q(ol)g(that)f(pro)o +(vides)i(a)f(consisten)o(t)g(user)h(in)o(terface)f(for)g(recalling)i +(lines)f(of)f(previously)i(t)o(yp)q(ed)75 1621 y(input.)75 +1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fo(\015)h +Fr(1988-2004)f(F)l(ree)i(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)75 +1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g +(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o +(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q +(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)195 +1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,)h(distribute) +h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195 +1933 y(the)h(terms)f(of)h(the)g(GNU)g(F)l(ree)g(Do)q(cumen)o(tation)g +(License,)i(V)l(ersion)f(1.1)e(or)g(an)o(y)h(later)195 +1988 y(v)o(ersion)14 b(published)i(b)o(y)e(the)g(F)l(ree)f(Soft)o(w)o +(are)g(F)l(oundation;)h(with)g(no)f(In)o(v)m(arian)o(t)i(Sections,)195 +2042 y(with)h(the)f(F)l(ron)o(t-Co)o(v)o(er)e(texts)i(b)q(eing)i(\\A)e +(GNU)g(Man)o(ual,")g(and)g(with)h(the)f(Bac)o(k-Co)o(v)o(er)195 +2097 y(T)l(exts)h(as)g(in)h(\(a\))e(b)q(elo)o(w.)24 b(A)16 +b(cop)o(y)g(of)g(the)g(license)i(is)f(included)i(in)e(the)f(section)h +(en)o(titled)195 2152 y(\\GNU)e(F)l(ree)g(Do)q(cumen)o(tation)g +(License.")195 2219 y(\(a\))j(The)h(FSF's)f(Bac)o(k-Co)o(v)o(er)g(T)l +(ext)h(is:)28 b(\\Y)l(ou)19 b(ha)o(v)o(e)g(freedom)g(to)f(cop)o(y)h +(and)g(mo)q(dify)195 2274 y(this)e(GNU)f(Man)o(ual,)g(lik)o(e)h(GNU)f +(soft)o(w)o(are.)22 b(Copies)17 b(published)h(b)o(y)f(the)f(F)l(ree)g +(Soft)o(w)o(are)195 2329 y(F)l(oundation)g(raise)f(funds)h(for)e(GNU)h +(dev)o(elopmen)o(t.")75 2451 y(Published)i(b)o(y)f(the)f(F)l(ree)g +(Soft)o(w)o(are)f(F)l(oundation)75 2506 y(59)h(T)l(emple)h(Place,)f (Suite)i(330,)75 2560 y(Boston,)d(MA)h(02111-1307)75 2615 y(USA)p eop %%Page: -1 3 diff --git a/lib/readline/doc/readline.dvi b/lib/readline/doc/readline.dvi Binary files differindex 4b8e4f58..c63a313a 100644 --- a/lib/readline/doc/readline.dvi +++ b/lib/readline/doc/readline.dvi diff --git a/lib/readline/doc/readline.html b/lib/readline/doc/readline.html index 1b96d958..e4eb6808 100644 --- a/lib/readline/doc/readline.html +++ b/lib/readline/doc/readline.html @@ -1,6 +1,6 @@ <HTML> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<!-- Created on September, 22 2003 by texi2html 1.64 --> +<!-- Created on July, 27 2004 by texi2html 1.64 --> <!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> @@ -1551,50 +1551,58 @@ The killed text is saved on the kill-ring. <P> <A NAME="IDX107"></A> -<DT><CODE>delete-horizontal-space ()</CODE> +<DT><CODE>unix-filename-rubout ()</CODE> <DD><A NAME="IDX108"></A> -Delete all spaces and tabs around point. By default, this is unbound. +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. <P> <A NAME="IDX109"></A> -<DT><CODE>kill-region ()</CODE> +<DT><CODE>delete-horizontal-space ()</CODE> <DD><A NAME="IDX110"></A> +Delete all spaces and tabs around point. By default, this is unbound. +<P> + +<A NAME="IDX111"></A> +<DT><CODE>kill-region ()</CODE> +<DD><A NAME="IDX112"></A> Kill the text in the current region. By default, this command is unbound. <P> -<A NAME="IDX111"></A> +<A NAME="IDX113"></A> <DT><CODE>copy-region-as-kill ()</CODE> -<DD><A NAME="IDX112"></A> +<DD><A NAME="IDX114"></A> Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. <P> -<A NAME="IDX113"></A> +<A NAME="IDX115"></A> <DT><CODE>copy-backward-word ()</CODE> -<DD><A NAME="IDX114"></A> +<DD><A NAME="IDX116"></A> Copy the word before point to the kill buffer. The word boundaries are the same as <CODE>backward-word</CODE>. By default, this command is unbound. <P> -<A NAME="IDX115"></A> +<A NAME="IDX117"></A> <DT><CODE>copy-forward-word ()</CODE> -<DD><A NAME="IDX116"></A> +<DD><A NAME="IDX118"></A> Copy the word following point to the kill buffer. The word boundaries are the same as <CODE>forward-word</CODE>. By default, this command is unbound. <P> -<A NAME="IDX117"></A> +<A NAME="IDX119"></A> <DT><CODE>yank (C-y)</CODE> -<DD><A NAME="IDX118"></A> +<DD><A NAME="IDX120"></A> Yank the top of the kill ring into the buffer at point. <P> -<A NAME="IDX119"></A> +<A NAME="IDX121"></A> <DT><CODE>yank-pop (M-y)</CODE> -<DD><A NAME="IDX120"></A> +<DD><A NAME="IDX122"></A> Rotate the kill-ring, and yank the new top. You can only do this if the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. </DL> @@ -1618,16 +1626,16 @@ the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. <!--docid::SEC18::--> <DL COMPACT> -<A NAME="IDX121"></A> +<A NAME="IDX123"></A> <DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE> -<DD><A NAME="IDX122"></A> +<DD><A NAME="IDX124"></A> Add this digit to the argument already accumulating, or start a new argument. <KBD>M--</KBD> starts a negative argument. <P> -<A NAME="IDX123"></A> +<A NAME="IDX125"></A> <DT><CODE>universal-argument ()</CODE> -<DD><A NAME="IDX124"></A> +<DD><A NAME="IDX126"></A> 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. @@ -1662,30 +1670,30 @@ By default, this is not bound to a key. <P> <DL COMPACT> -<A NAME="IDX125"></A> +<A NAME="IDX127"></A> <DT><CODE>complete (<KBD>TAB</KBD>)</CODE> -<DD><A NAME="IDX126"></A> +<DD><A NAME="IDX128"></A> Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion. <P> -<A NAME="IDX127"></A> +<A NAME="IDX129"></A> <DT><CODE>possible-completions (M-?)</CODE> -<DD><A NAME="IDX128"></A> +<DD><A NAME="IDX130"></A> List the possible completions of the text before point. <P> -<A NAME="IDX129"></A> +<A NAME="IDX131"></A> <DT><CODE>insert-completions (M-*)</CODE> -<DD><A NAME="IDX130"></A> +<DD><A NAME="IDX132"></A> Insert all completions of the text before point that would have been generated by <CODE>possible-completions</CODE>. <P> -<A NAME="IDX131"></A> +<A NAME="IDX133"></A> <DT><CODE>menu-complete ()</CODE> -<DD><A NAME="IDX132"></A> +<DD><A NAME="IDX134"></A> Similar to <CODE>complete</CODE>, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of <CODE>menu-complete</CODE> steps through the list @@ -1700,9 +1708,9 @@ This command is intended to be bound to <KBD>TAB</KBD>, but is unbound by default. <P> -<A NAME="IDX133"></A> +<A NAME="IDX135"></A> <DT><CODE>delete-char-or-list ()</CODE> -<DD><A NAME="IDX134"></A> +<DD><A NAME="IDX136"></A> Deletes the character under the cursor if not at the beginning or end of the line (like <CODE>delete-char</CODE>). If at the end of the line, behaves identically to @@ -1731,22 +1739,22 @@ This command is unbound by default. <!--docid::SEC20::--> <DL COMPACT> -<A NAME="IDX135"></A> +<A NAME="IDX137"></A> <DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD><A NAME="IDX136"></A> +<DD><A NAME="IDX138"></A> Begin saving the characters typed into the current keyboard macro. <P> -<A NAME="IDX137"></A> +<A NAME="IDX139"></A> <DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD><A NAME="IDX138"></A> +<DD><A NAME="IDX140"></A> Stop saving the characters typed into the current keyboard macro and save the definition. <P> -<A NAME="IDX139"></A> +<A NAME="IDX141"></A> <DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD><A NAME="IDX140"></A> +<DD><A NAME="IDX142"></A> Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. <P> @@ -1772,87 +1780,87 @@ in the macro appear as if typed at the keyboard. <!--docid::SEC21::--> <DL COMPACT> -<A NAME="IDX141"></A> +<A NAME="IDX143"></A> <DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD><A NAME="IDX142"></A> +<DD><A NAME="IDX144"></A> Read in the contents of the <VAR>inputrc</VAR> file, and incorporate any bindings or variable assignments found there. <P> -<A NAME="IDX143"></A> +<A NAME="IDX145"></A> <DT><CODE>abort (C-g)</CODE> -<DD><A NAME="IDX144"></A> +<DD><A NAME="IDX146"></A> Abort the current editing command and ring the terminal's bell (subject to the setting of <CODE>bell-style</CODE>). <P> -<A NAME="IDX145"></A> +<A NAME="IDX147"></A> <DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE> -<DD><A NAME="IDX146"></A> +<DD><A NAME="IDX148"></A> If the metafied character <VAR>x</VAR> is lowercase, run the command that is bound to the corresponding uppercase character. <P> -<A NAME="IDX147"></A> +<A NAME="IDX149"></A> <DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE> -<DD><A NAME="IDX148"></A> +<DD><A NAME="IDX150"></A> Metafy the next character typed. This is for keyboards without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing <KBD>M-f</KBD>. <P> -<A NAME="IDX149"></A> +<A NAME="IDX151"></A> <DT><CODE>undo (C-_ or C-x C-u)</CODE> -<DD><A NAME="IDX150"></A> +<DD><A NAME="IDX152"></A> Incremental undo, separately remembered for each line. <P> -<A NAME="IDX151"></A> +<A NAME="IDX153"></A> <DT><CODE>revert-line (M-r)</CODE> -<DD><A NAME="IDX152"></A> +<DD><A NAME="IDX154"></A> Undo all changes made to this line. This is like executing the <CODE>undo</CODE> command enough times to get back to the beginning. <P> -<A NAME="IDX153"></A> +<A NAME="IDX155"></A> <DT><CODE>tilde-expand (M-~)</CODE> -<DD><A NAME="IDX154"></A> +<DD><A NAME="IDX156"></A> Perform tilde expansion on the current word. <P> -<A NAME="IDX155"></A> +<A NAME="IDX157"></A> <DT><CODE>set-mark (C-@)</CODE> -<DD><A NAME="IDX156"></A> +<DD><A NAME="IDX158"></A> Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. <P> -<A NAME="IDX157"></A> +<A NAME="IDX159"></A> <DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD><A NAME="IDX158"></A> +<DD><A NAME="IDX160"></A> 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. <P> -<A NAME="IDX159"></A> +<A NAME="IDX161"></A> <DT><CODE>character-search (C-])</CODE> -<DD><A NAME="IDX160"></A> +<DD><A NAME="IDX162"></A> A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences. <P> -<A NAME="IDX161"></A> +<A NAME="IDX163"></A> <DT><CODE>character-search-backward (M-C-])</CODE> -<DD><A NAME="IDX162"></A> +<DD><A NAME="IDX164"></A> A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences. <P> -<A NAME="IDX163"></A> +<A NAME="IDX165"></A> <DT><CODE>insert-comment (M-#)</CODE> -<DD><A NAME="IDX164"></A> +<DD><A NAME="IDX166"></A> Without a numeric argument, the value of the <CODE>comment-begin</CODE> variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if @@ -1863,43 +1871,43 @@ the line. In either case, the line is accepted as if a newline had been typed. <P> -<A NAME="IDX165"></A> +<A NAME="IDX167"></A> <DT><CODE>dump-functions ()</CODE> -<DD><A NAME="IDX166"></A> +<DD><A NAME="IDX168"></A> 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</VAR> file. This command is unbound by default. <P> -<A NAME="IDX167"></A> +<A NAME="IDX169"></A> <DT><CODE>dump-variables ()</CODE> -<DD><A NAME="IDX168"></A> +<DD><A NAME="IDX170"></A> 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</VAR> file. This command is unbound by default. <P> -<A NAME="IDX169"></A> +<A NAME="IDX171"></A> <DT><CODE>dump-macros ()</CODE> -<DD><A NAME="IDX170"></A> +<DD><A NAME="IDX172"></A> 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</VAR> file. This command is unbound by default. <P> -<A NAME="IDX171"></A> +<A NAME="IDX173"></A> <DT><CODE>emacs-editing-mode (C-e)</CODE> -<DD><A NAME="IDX172"></A> +<DD><A NAME="IDX174"></A> When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE> editing mode. <P> -<A NAME="IDX173"></A> +<A NAME="IDX175"></A> <DT><CODE>vi-editing-mode (M-C-j)</CODE> -<DD><A NAME="IDX174"></A> +<DD><A NAME="IDX176"></A> When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE> editing mode. <P> @@ -1950,7 +1958,7 @@ in the consitency of user interface across discrete programs that need to provide a command line interface. </P><P> -Copyright (C) 1988-2002 Free Software Foundation, Inc. +Copyright (C) 1988-2004 Free Software Foundation, Inc. </P><P> Permission is granted to make and distribute verbatim copies of @@ -2034,8 +2042,8 @@ the simplest way possible, perhaps to replace calls in your code to <CODE>gets()</CODE> or <CODE>fgets()</CODE>. </P><P> -<A NAME="IDX175"></A> -<A NAME="IDX176"></A> +<A NAME="IDX177"></A> +<A NAME="IDX178"></A> </P><P> The function <CODE>readline()</CODE> prints a prompt <VAR>prompt</VAR> @@ -2349,7 +2357,7 @@ and a non-zero value if some error occurs. These variables are available to function writers. </P><P> -<A NAME="IDX177"></A> +<A NAME="IDX179"></A> <DL> <DT><U>Variable:</U> char * <B>rl_line_buffer</B> <DD>This is the line gathered so far. You are welcome to modify the @@ -2359,7 +2367,7 @@ the memory allocated to <CODE>rl_line_buffer</CODE>. </DL> </P><P> -<A NAME="IDX178"></A> +<A NAME="IDX180"></A> <DL> <DT><U>Variable:</U> int <B>rl_point</B> <DD>The offset of the current cursor position in <CODE>rl_line_buffer</CODE> @@ -2367,7 +2375,7 @@ the memory allocated to <CODE>rl_line_buffer</CODE>. </DL> </P><P> -<A NAME="IDX179"></A> +<A NAME="IDX181"></A> <DL> <DT><U>Variable:</U> int <B>rl_end</B> <DD>The number of characters present in <CODE>rl_line_buffer</CODE>. When @@ -2376,7 +2384,7 @@ the memory allocated to <CODE>rl_line_buffer</CODE>. </DL> </P><P> -<A NAME="IDX180"></A> +<A NAME="IDX182"></A> <DL> <DT><U>Variable:</U> int <B>rl_mark</B> <DD>The <VAR>mark</VAR> (saved position) in the current line. If set, the mark @@ -2384,7 +2392,7 @@ and point define a <EM>region</EM>. </DL> </P><P> -<A NAME="IDX181"></A> +<A NAME="IDX183"></A> <DL> <DT><U>Variable:</U> int <B>rl_done</B> <DD>Setting this to a non-zero value causes Readline to return the current @@ -2392,7 +2400,7 @@ line immediately. </DL> </P><P> -<A NAME="IDX182"></A> +<A NAME="IDX184"></A> <DL> <DT><U>Variable:</U> int <B>rl_num_chars_to_read</B> <DD>Setting this to a positive value before calling <CODE>readline()</CODE> causes @@ -2401,7 +2409,7 @@ than reading up to a character bound to <CODE>accept-line</CODE>. </DL> </P><P> -<A NAME="IDX183"></A> +<A NAME="IDX185"></A> <DL> <DT><U>Variable:</U> int <B>rl_pending_input</B> <DD>Setting this to a value makes it the next keystroke read. This is a @@ -2409,7 +2417,7 @@ way to stuff a single character into the input stream. </DL> </P><P> -<A NAME="IDX184"></A> +<A NAME="IDX186"></A> <DL> <DT><U>Variable:</U> int <B>rl_dispatching</B> <DD>Set to a non-zero value if a function is being called from a key binding; @@ -2418,7 +2426,7 @@ they were called directly or by Readline's dispatching mechanism. </DL> </P><P> -<A NAME="IDX185"></A> +<A NAME="IDX187"></A> <DL> <DT><U>Variable:</U> int <B>rl_erase_empty_line</B> <DD>Setting this to a non-zero value causes Readline to completely erase @@ -2428,7 +2436,7 @@ the beginning of the newly-blank line. </DL> </P><P> -<A NAME="IDX186"></A> +<A NAME="IDX188"></A> <DL> <DT><U>Variable:</U> char * <B>rl_prompt</B> <DD>The prompt Readline uses. This is set from the argument to @@ -2438,7 +2446,7 @@ be used to modify the prompt string after calling <CODE>readline()</CODE>. </DL> </P><P> -<A NAME="IDX187"></A> +<A NAME="IDX189"></A> <DL> <DT><U>Variable:</U> int <B>rl_already_prompted</B> <DD>If an application wishes to display the prompt itself, rather than have @@ -2451,14 +2459,14 @@ never sets it. </DL> </P><P> -<A NAME="IDX188"></A> +<A NAME="IDX190"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_library_version</B> <DD>The version number of this revision of the library. </DL> </P><P> -<A NAME="IDX189"></A> +<A NAME="IDX191"></A> <DL> <DT><U>Variable:</U> int <B>rl_readline_version</B> <DD>An integer encoding the current version of the library. The encoding is @@ -2469,7 +2477,7 @@ value 0x0402. </DL> </P><P> -<A NAME="IDX190"></A> +<A NAME="IDX192"></A> <DL> <DT><U>Variable:</U> int <B>rl_gnu_readline_p</B> <DD>Always set to 1, denoting that this is GNU readline rather than some @@ -2477,7 +2485,7 @@ emulation. </DL> </P><P> -<A NAME="IDX191"></A> +<A NAME="IDX193"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_terminal_name</B> <DD>The terminal type, used for initialization. If not set by the application, @@ -2486,7 +2494,7 @@ the first time it is called. </DL> </P><P> -<A NAME="IDX192"></A> +<A NAME="IDX194"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_readline_name</B> <DD>This variable is set to a unique name by each application using Readline. @@ -2495,7 +2503,7 @@ The value allows conditional parsing of the inputrc file </DL> </P><P> -<A NAME="IDX193"></A> +<A NAME="IDX195"></A> <DL> <DT><U>Variable:</U> FILE * <B>rl_instream</B> <DD>The stdio stream from which Readline reads input. @@ -2503,7 +2511,7 @@ If <CODE>NULL</CODE>, Readline defaults to <VAR>stdin</VAR>. </DL> </P><P> -<A NAME="IDX194"></A> +<A NAME="IDX196"></A> <DL> <DT><U>Variable:</U> FILE * <B>rl_outstream</B> <DD>The stdio stream to which Readline performs output. @@ -2511,7 +2519,7 @@ If <CODE>NULL</CODE>, Readline defaults to <VAR>stdout</VAR>. </DL> </P><P> -<A NAME="IDX195"></A> +<A NAME="IDX197"></A> <DL> <DT><U>Variable:</U> rl_command_func_t * <B>rl_last_func</B> <DD>The address of the last command function Readline executed. May be used to @@ -2520,7 +2528,7 @@ example. </DL> </P><P> -<A NAME="IDX196"></A> +<A NAME="IDX198"></A> <DL> <DT><U>Variable:</U> rl_hook_func_t * <B>rl_startup_hook</B> <DD>If non-zero, this is the address of a function to call just @@ -2528,7 +2536,7 @@ before <CODE>readline</CODE> prints the first prompt. </DL> </P><P> -<A NAME="IDX197"></A> +<A NAME="IDX199"></A> <DL> <DT><U>Variable:</U> rl_hook_func_t * <B>rl_pre_input_hook</B> <DD>If non-zero, this is the address of a function to call after @@ -2537,7 +2545,7 @@ starts reading input characters. </DL> </P><P> -<A NAME="IDX198"></A> +<A NAME="IDX200"></A> <DL> <DT><U>Variable:</U> rl_hook_func_t * <B>rl_event_hook</B> <DD>If non-zero, this is the address of a function to call periodically @@ -2547,7 +2555,7 @@ is no keyboard input. </DL> </P><P> -<A NAME="IDX199"></A> +<A NAME="IDX201"></A> <DL> <DT><U>Variable:</U> rl_getc_func_t * <B>rl_getc_function</B> <DD>If non-zero, Readline will call indirectly through this pointer @@ -2557,7 +2565,7 @@ to get a character from the input stream. By default, it is set to </DL> </P><P> -<A NAME="IDX200"></A> +<A NAME="IDX202"></A> <DL> <DT><U>Variable:</U> rl_voidfunc_t * <B>rl_redisplay_function</B> <DD>If non-zero, Readline will call indirectly through this pointer @@ -2567,7 +2575,7 @@ redisplay function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A </DL> </P><P> -<A NAME="IDX201"></A> +<A NAME="IDX203"></A> <DL> <DT><U>Variable:</U> rl_vintfunc_t * <B>rl_prep_term_function</B> <DD>If non-zero, Readline will call indirectly through this pointer @@ -2578,7 +2586,7 @@ By default, this is set to <CODE>rl_prep_terminal</CODE> </DL> </P><P> -<A NAME="IDX202"></A> +<A NAME="IDX204"></A> <DL> <DT><U>Variable:</U> rl_voidfunc_t * <B>rl_deprep_term_function</B> <DD>If non-zero, Readline will call indirectly through this pointer @@ -2589,7 +2597,7 @@ By default, this is set to <CODE>rl_deprep_terminal</CODE> </DL> </P><P> -<A NAME="IDX203"></A> +<A NAME="IDX205"></A> <DL> <DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B> <DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the @@ -2597,7 +2605,7 @@ currently executing readline function was found. </DL> </P><P> -<A NAME="IDX204"></A> +<A NAME="IDX206"></A> <DL> <DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B> <DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the @@ -2605,14 +2613,14 @@ last key binding occurred. </DL> </P><P> -<A NAME="IDX205"></A> +<A NAME="IDX207"></A> <DL> <DT><U>Variable:</U> char * <B>rl_executing_macro</B> <DD>This variable is set to the text of any currently-executing macro. </DL> </P><P> -<A NAME="IDX206"></A> +<A NAME="IDX208"></A> <DL> <DT><U>Variable:</U> int <B>rl_readline_state</B> <DD>A variable with bit values that encapsulate the current Readline state. @@ -2668,7 +2676,7 @@ and is about to return the line to the caller. </DL> </P><P> -<A NAME="IDX207"></A> +<A NAME="IDX209"></A> <DL> <DT><U>Variable:</U> int <B>rl_explicit_arg</B> <DD>Set to a non-zero value if an explicit numeric argument was specified by @@ -2676,7 +2684,7 @@ the user. Only valid in a bindable command function. </DL> </P><P> -<A NAME="IDX208"></A> +<A NAME="IDX210"></A> <DL> <DT><U>Variable:</U> int <B>rl_numeric_arg</B> <DD>Set to the value of any numeric argument explicitly specified by the user @@ -2685,7 +2693,7 @@ command function. </DL> </P><P> -<A NAME="IDX209"></A> +<A NAME="IDX211"></A> <DL> <DT><U>Variable:</U> int <B>rl_editing_mode</B> <DD>Set to a value denoting Readline's current editing mode. A value of @@ -2763,7 +2771,7 @@ programmer, should bind the functions you write to descriptive names as well. Readline provides a function for doing that: </P><P> -<A NAME="IDX210"></A> +<A NAME="IDX212"></A> <DL> <DT><U>Function:</U> int <B>rl_add_defun</B> <I>(const char *name, rl_command_func_t *function, int key)</I> <DD>Add <VAR>name</VAR> to the list of named functions. Make <VAR>function</VAR> be @@ -2803,7 +2811,7 @@ get run. You can make your own keymaps, copy existing keymaps, and tell Readline which keymap to use. </P><P> -<A NAME="IDX211"></A> +<A NAME="IDX213"></A> <DL> <DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>(void)</I> <DD>Returns a new, empty keymap. The space for the keymap is allocated with @@ -2812,14 +2820,14 @@ Readline which keymap to use. </DL> </P><P> -<A NAME="IDX212"></A> +<A NAME="IDX214"></A> <DL> <DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I> <DD>Return a new keymap which is a copy of <VAR>map</VAR>. </DL> </P><P> -<A NAME="IDX213"></A> +<A NAME="IDX215"></A> <DL> <DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>(void)</I> <DD>Return a new keymap with the printing characters bound to rl_insert, @@ -2828,7 +2836,7 @@ the Meta digits bound to produce numeric arguments. </DL> </P><P> -<A NAME="IDX214"></A> +<A NAME="IDX216"></A> <DL> <DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I> <DD>Free the storage associated with <VAR>keymap</VAR>. @@ -2839,21 +2847,21 @@ Readline has several internal keymaps. These functions allow you to change which keymap is active. </P><P> -<A NAME="IDX215"></A> +<A NAME="IDX217"></A> <DL> <DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>(void)</I> <DD>Returns the currently active keymap. </DL> </P><P> -<A NAME="IDX216"></A> +<A NAME="IDX218"></A> <DL> <DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I> <DD>Makes <VAR>keymap</VAR> the currently active keymap. </DL> </P><P> -<A NAME="IDX217"></A> +<A NAME="IDX219"></A> <DL> <DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(const char *name)</I> <DD>Return the keymap matching <VAR>name</VAR>. <VAR>name</VAR> is one which would @@ -2861,7 +2869,7 @@ be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="read </DL> </P><P> -<A NAME="IDX218"></A> +<A NAME="IDX220"></A> <DL> <DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I> <DD>Return the name matching <VAR>keymap</VAR>. <VAR>name</VAR> is one which would @@ -2906,7 +2914,7 @@ initialization function assigned to the <CODE>rl_startup_hook</CODE> variable These functions manage key bindings. </P><P> -<A NAME="IDX219"></A> +<A NAME="IDX221"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, rl_command_func_t *function)</I> <DD>Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap. @@ -2914,7 +2922,7 @@ Returns non-zero in the case of an invalid <VAR>key</VAR>. </DL> </P><P> -<A NAME="IDX220"></A> +<A NAME="IDX222"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I> <DD>Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>. @@ -2922,7 +2930,7 @@ Returns non-zero in the case of an invalid <VAR>key</VAR>. </DL> </P><P> -<A NAME="IDX221"></A> +<A NAME="IDX223"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_key_if_unbound</B> <I>(int key, rl_command_func_t *function)</I> <DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in the @@ -2932,7 +2940,7 @@ already bound. </DL> </P><P> -<A NAME="IDX222"></A> +<A NAME="IDX224"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_key_if_unbound_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I> <DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>. @@ -2941,7 +2949,7 @@ already bound. </DL> </P><P> -<A NAME="IDX223"></A> +<A NAME="IDX225"></A> <DL> <DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I> <DD>Bind <VAR>key</VAR> to the null function in the currently active keymap. @@ -2949,7 +2957,7 @@ Returns non-zero in case of error. </DL> </P><P> -<A NAME="IDX224"></A> +<A NAME="IDX226"></A> <DL> <DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I> <DD>Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>. @@ -2957,21 +2965,21 @@ Returns non-zero in case of error. </DL> </P><P> -<A NAME="IDX225"></A> +<A NAME="IDX227"></A> <DL> <DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I> <DD>Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>. </DL> </P><P> -<A NAME="IDX226"></A> +<A NAME="IDX228"></A> <DL> <DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(const char *command, Keymap map)</I> <DD>Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>. </DL> </P><P> -<A NAME="IDX227"></A> +<A NAME="IDX229"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_keyseq</B> <I>(const char *keyseq, rl_command_func_t *function)</I> <DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function @@ -2981,7 +2989,7 @@ The return value is non-zero if <VAR>keyseq</VAR> is invalid. </DL> </P><P> -<A NAME="IDX228"></A> +<A NAME="IDX230"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_keyseq_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I> <DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function @@ -2991,14 +2999,14 @@ The return value is non-zero if <VAR>keyseq</VAR> is invalid. </DL> </P><P> -<A NAME="IDX229"></A> +<A NAME="IDX231"></A> <DL> <DT><U>Function:</U> int <B>rl_set_key</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I> <DD>Equivalent to <CODE>rl_bind_keyseq_in_map</CODE>. </DL> </P><P> -<A NAME="IDX230"></A> +<A NAME="IDX232"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound</B> <I>(const char *keyseq, rl_command_func_t *function)</I> <DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in the @@ -3008,7 +3016,7 @@ already bound. </DL> </P><P> -<A NAME="IDX231"></A> +<A NAME="IDX233"></A> <DL> <DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I> <DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>. @@ -3017,7 +3025,7 @@ already bound. </DL> </P><P> -<A NAME="IDX232"></A> +<A NAME="IDX234"></A> <DL> <DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, const char *keyseq, char *data, Keymap map)</I> <DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary @@ -3028,7 +3036,7 @@ necessary. The initial keymap in which to do bindings is <VAR>map</VAR>. </DL> </P><P> -<A NAME="IDX233"></A> +<A NAME="IDX235"></A> <DL> <DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I> <DD>Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and @@ -3037,7 +3045,7 @@ perform any key bindings and variable assignments found </DL> </P><P> -<A NAME="IDX234"></A> +<A NAME="IDX236"></A> <DL> <DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(const char *filename)</I> <DD>Read keybindings and variable assignments from <VAR>filename</VAR> @@ -3068,14 +3076,14 @@ and the functions invoked by a particular key sequence. You may also associate a new function name with an arbitrary function. </P><P> -<A NAME="IDX235"></A> +<A NAME="IDX237"></A> <DL> <DT><U>Function:</U> rl_command_func_t * <B>rl_named_function</B> <I>(const char *name)</I> <DD>Return the function with name <VAR>name</VAR>. </DL> </P><P> -<A NAME="IDX236"></A> +<A NAME="IDX238"></A> <DL> <DT><U>Function:</U> rl_command_func_t * <B>rl_function_of_keyseq</B> <I>(const char *keyseq, Keymap map, int *type)</I> <DD>Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>. @@ -3085,7 +3093,7 @@ it points to (one of <CODE>ISFUNC</CODE>, <CODE>ISKMAP</CODE>, or <CODE>ISMACR</ </DL> </P><P> -<A NAME="IDX237"></A> +<A NAME="IDX239"></A> <DL> <DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(rl_command_func_t *function)</I> <DD>Return an array of strings representing the key sequences used to @@ -3093,7 +3101,7 @@ invoke <VAR>function</VAR> in the current keymap. </DL> </P><P> -<A NAME="IDX238"></A> +<A NAME="IDX240"></A> <DL> <DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I> <DD>Return an array of strings representing the key sequences used to @@ -3101,7 +3109,7 @@ invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>. </DL> </P><P> -<A NAME="IDX239"></A> +<A NAME="IDX241"></A> <DL> <DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I> <DD>Print the readline function names and the key sequences currently @@ -3111,14 +3119,14 @@ the list is formatted in such a way that it can be made part of an </DL> </P><P> -<A NAME="IDX240"></A> +<A NAME="IDX242"></A> <DL> <DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>(void)</I> <DD>Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>. </DL> </P><P> -<A NAME="IDX241"></A> +<A NAME="IDX243"></A> <DL> <DT><U>Function:</U> const char ** <B>rl_funmap_names</B> <I>(void)</I> <DD>Return a NULL terminated array of known function names. The array is @@ -3127,7 +3135,7 @@ should <CODE>free()</CODE> the array when you are done, but not the pointers. </DL> </P><P> -<A NAME="IDX242"></A> +<A NAME="IDX244"></A> <DL> <DT><U>Function:</U> int <B>rl_add_funmap_entry</B> <I>(const char *name, rl_command_func_t *function)</I> <DD>Add <VAR>name</VAR> to the list of bindable Readline command names, and make @@ -3182,7 +3190,7 @@ tells what to undo, not how to undo it. <CODE>UNDO_BEGIN</CODE> and <CODE>rl_end_undo_group()</CODE>. </P><P> -<A NAME="IDX243"></A> +<A NAME="IDX245"></A> <DL> <DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>(void)</I> <DD>Begins saving undo information in a group construct. The undo @@ -3192,7 +3200,7 @@ information usually comes from calls to <CODE>rl_insert_text()</CODE> and </DL> </P><P> -<A NAME="IDX244"></A> +<A NAME="IDX246"></A> <DL> <DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>(void)</I> <DD>Closes the current undo group started with <CODE>rl_begin_undo_group @@ -3201,7 +3209,7 @@ for each call to <CODE>rl_begin_undo_group()</CODE>. </DL> </P><P> -<A NAME="IDX245"></A> +<A NAME="IDX247"></A> <DL> <DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I> <DD>Remember how to undo an event (according to <VAR>what</VAR>). The affected @@ -3209,14 +3217,14 @@ text runs from <VAR>start</VAR> to <VAR>end</VAR>, and encompasses <VAR>text</VA </DL> </P><P> -<A NAME="IDX246"></A> +<A NAME="IDX248"></A> <DL> <DT><U>Function:</U> void <B>rl_free_undo_list</B> <I>(void)</I> <DD>Free the existing undo list. </DL> </P><P> -<A NAME="IDX247"></A> +<A NAME="IDX249"></A> <DL> <DT><U>Function:</U> int <B>rl_do_undo</B> <I>(void)</I> <DD>Undo the first thing on the undo list. Returns <CODE>0</CODE> if there was @@ -3230,7 +3238,7 @@ once, just before you modify the text. You must supply the indices of the text range that you are going to modify. </P><P> -<A NAME="IDX248"></A> +<A NAME="IDX250"></A> <DL> <DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I> <DD>Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a @@ -3257,7 +3265,7 @@ that text. <!--docid::SEC35::--> <P> -<A NAME="IDX249"></A> +<A NAME="IDX251"></A> <DL> <DT><U>Function:</U> void <B>rl_redisplay</B> <I>(void)</I> <DD>Change what's displayed on the screen to reflect the current contents @@ -3265,7 +3273,7 @@ of <CODE>rl_line_buffer</CODE>. </DL> </P><P> -<A NAME="IDX250"></A> +<A NAME="IDX252"></A> <DL> <DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>(void)</I> <DD>Force the line to be updated and redisplayed, whether or not @@ -3273,7 +3281,7 @@ Readline thinks the screen display is correct. </DL> </P><P> -<A NAME="IDX251"></A> +<A NAME="IDX253"></A> <DL> <DT><U>Function:</U> int <B>rl_on_new_line</B> <I>(void)</I> <DD>Tell the update functions that we have moved onto a new (empty) line, @@ -3281,7 +3289,7 @@ usually after ouputting a newline. </DL> </P><P> -<A NAME="IDX252"></A> +<A NAME="IDX254"></A> <DL> <DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>(void)</I> <DD>Tell the update functions that we have moved onto a new line, with @@ -3293,7 +3301,7 @@ It should be used after setting <VAR>rl_already_prompted</VAR>. </DL> </P><P> -<A NAME="IDX253"></A> +<A NAME="IDX255"></A> <DL> <DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>(void)</I> <DD>Reset the display state to a clean state and redisplay the current line @@ -3301,14 +3309,14 @@ starting on a new line. </DL> </P><P> -<A NAME="IDX254"></A> +<A NAME="IDX256"></A> <DL> <DT><U>Function:</U> int <B>rl_crlf</B> <I>(void)</I> <DD>Move the cursor to the start of the next screen line. </DL> </P><P> -<A NAME="IDX255"></A> +<A NAME="IDX257"></A> <DL> <DT><U>Function:</U> int <B>rl_show_char</B> <I>(int c)</I> <DD>Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>. @@ -3319,7 +3327,7 @@ redisplay. </DL> </P><P> -<A NAME="IDX256"></A> +<A NAME="IDX258"></A> <DL> <DT><U>Function:</U> int <B>rl_message</B> <I>(const char *, <small>...</small>)</I> <DD>The arguments are a format string as would be supplied to <CODE>printf</CODE>, @@ -3330,14 +3338,14 @@ is also used to display numeric arguments and search strings. </DL> </P><P> -<A NAME="IDX257"></A> +<A NAME="IDX259"></A> <DL> <DT><U>Function:</U> int <B>rl_clear_message</B> <I>(void)</I> <DD>Clear the message in the echo area. </DL> </P><P> -<A NAME="IDX258"></A> +<A NAME="IDX260"></A> <DL> <DT><U>Function:</U> void <B>rl_save_prompt</B> <I>(void)</I> <DD>Save the local Readline prompt display state in preparation for @@ -3345,7 +3353,7 @@ displaying a new message in the message area with <CODE>rl_message()</CODE>. </DL> </P><P> -<A NAME="IDX259"></A> +<A NAME="IDX261"></A> <DL> <DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>(void)</I> <DD>Restore the local Readline prompt display state saved by the most @@ -3353,7 +3361,7 @@ recent call to <CODE>rl_save_prompt</CODE>. </DL> </P><P> -<A NAME="IDX260"></A> +<A NAME="IDX262"></A> <DL> <DT><U>Function:</U> int <B>rl_expand_prompt</B> <I>(char *prompt)</I> <DD>Expand any special character sequences in <VAR>prompt</VAR> and set up the @@ -3363,10 +3371,15 @@ expand the primary prompt if the <CODE>rl_on_new_line_with_prompt()</CODE> function or <CODE>rl_already_prompted</CODE> variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. +Applications may indicate that the prompt contains characters that take +up no physical screen space when displayed by bracketing a sequence of +such characters with the special markers <CODE>RL_PROMPT_START_IGNORE</CODE> +and <CODE>RL_PROMPT_END_IGNORE</CODE> (declared in <TT>`readline.h'</TT>. This may +be used to embed terminal-specific escape sequences in prompts. </DL> </P><P> -<A NAME="IDX261"></A> +<A NAME="IDX263"></A> <DL> <DT><U>Function:</U> int <B>rl_set_prompt</B> <I>(const char *prompt)</I> <DD>Make Readline use <VAR>prompt</VAR> for subsequent redisplay. This calls @@ -3393,7 +3406,7 @@ to the result. <!--docid::SEC36::--> <P> -<A NAME="IDX262"></A> +<A NAME="IDX264"></A> <DL> <DT><U>Function:</U> int <B>rl_insert_text</B> <I>(const char *text)</I> <DD>Insert <VAR>text</VAR> into the line at the current cursor position. @@ -3401,7 +3414,7 @@ Returns the number of characters inserted. </DL> </P><P> -<A NAME="IDX263"></A> +<A NAME="IDX265"></A> <DL> <DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I> <DD>Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line. @@ -3409,7 +3422,7 @@ Returns the number of characters deleted. </DL> </P><P> -<A NAME="IDX264"></A> +<A NAME="IDX266"></A> <DL> <DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I> <DD>Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in @@ -3417,7 +3430,7 @@ the current line. </DL> </P><P> -<A NAME="IDX265"></A> +<A NAME="IDX267"></A> <DL> <DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I> <DD>Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line @@ -3429,7 +3442,7 @@ not a kill, a new kill ring slot is used. </DL> </P><P> -<A NAME="IDX266"></A> +<A NAME="IDX268"></A> <DL> <DT><U>Function:</U> int <B>rl_push_macro_input</B> <I>(char *macro)</I> <DD>Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked @@ -3456,7 +3469,7 @@ by a key bound to a macro. Not especially useful; use <!--docid::SEC37::--> <P> -<A NAME="IDX267"></A> +<A NAME="IDX269"></A> <DL> <DT><U>Function:</U> int <B>rl_read_key</B> <I>(void)</I> <DD>Return the next character available from Readline's current input stream. @@ -3468,7 +3481,7 @@ the <CODE>rl_event_hook</CODE> variable. </DL> </P><P> -<A NAME="IDX268"></A> +<A NAME="IDX270"></A> <DL> <DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *stream)</I> <DD>Return the next character available from <VAR>stream</VAR>, which is assumed to @@ -3476,7 +3489,7 @@ be the keyboard. </DL> </P><P> -<A NAME="IDX269"></A> +<A NAME="IDX271"></A> <DL> <DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I> <DD>Insert <VAR>c</VAR> into the Readline input stream. It will be "read" @@ -3487,7 +3500,7 @@ before Readline attempts to read characters from the terminal with </DL> </P><P> -<A NAME="IDX270"></A> +<A NAME="IDX272"></A> <DL> <DT><U>Function:</U> int <B>rl_execute_next</B> <I>(int c)</I> <DD>Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE> @@ -3495,7 +3508,7 @@ is called. This sets <VAR>rl_pending_input</VAR>. </DL> </P><P> -<A NAME="IDX271"></A> +<A NAME="IDX273"></A> <DL> <DT><U>Function:</U> int <B>rl_clear_pending_input</B> <I>(void)</I> <DD>Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any @@ -3504,7 +3517,7 @@ pending input has not already been read with <CODE>rl_read_key()</CODE>. </DL> </P><P> -<A NAME="IDX272"></A> +<A NAME="IDX274"></A> <DL> <DT><U>Function:</U> int <B>rl_set_keyboard_input_timeout</B> <I>(int u)</I> <DD>While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will @@ -3532,7 +3545,7 @@ one-tenth of a second. Returns the old timeout value. <!--docid::SEC38::--> <P> -<A NAME="IDX273"></A> +<A NAME="IDX275"></A> <DL> <DT><U>Function:</U> void <B>rl_prep_terminal</B> <I>(int meta_flag)</I> <DD>Modify the terminal settings for Readline's use, so <CODE>readline()</CODE> @@ -3542,7 +3555,7 @@ read eight-bit input. </DL> </P><P> -<A NAME="IDX274"></A> +<A NAME="IDX276"></A> <DL> <DT><U>Function:</U> void <B>rl_deprep_terminal</B> <I>(void)</I> <DD>Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in @@ -3551,7 +3564,7 @@ the state in which it was before the most recent call to </DL> </P><P> -<A NAME="IDX275"></A> +<A NAME="IDX277"></A> <DL> <DT><U>Function:</U> void <B>rl_tty_set_default_bindings</B> <I>(Keymap kmap)</I> <DD>Read the operating system's terminal editing characters (as would be @@ -3560,7 +3573,7 @@ The bindings are performed in <VAR>kmap</VAR>. </DL> </P><P> -<A NAME="IDX276"></A> +<A NAME="IDX278"></A> <DL> <DT><U>Function:</U> void <B>rl_tty_unset_default_bindings</B> <I>(Keymap kmap)</I> <DD>Reset the bindings manipulated by <CODE>rl_tty_set_default_bindings</CODE> so @@ -3569,7 +3582,7 @@ The bindings are performed in <VAR>kmap</VAR>. </DL> </P><P> -<A NAME="IDX277"></A> +<A NAME="IDX279"></A> <DL> <DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(const char *terminal_name)</I> <DD>Reinitialize Readline's idea of the terminal settings using @@ -3597,7 +3610,7 @@ environment variable is used. <!--docid::SEC39::--> <P> -<A NAME="IDX278"></A> +<A NAME="IDX280"></A> <DL> <DT><U>Function:</U> void <B>rl_replace_line</B> <I>(const char *text, int clear_undo)</I> <DD>Replace the contents of <CODE>rl_line_buffer</CODE> with <VAR>text</VAR>. @@ -3607,7 +3620,7 @@ current line is cleared. </DL> </P><P> -<A NAME="IDX279"></A> +<A NAME="IDX281"></A> <DL> <DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I> <DD>Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR> @@ -3615,7 +3628,7 @@ characters, possibly reallocating it if necessary. </DL> </P><P> -<A NAME="IDX280"></A> +<A NAME="IDX282"></A> <DL> <DT><U>Function:</U> int <B>rl_initialize</B> <I>(void)</I> <DD>Initialize or re-initialize Readline's internal state. @@ -3624,21 +3637,21 @@ reading any input. </DL> </P><P> -<A NAME="IDX281"></A> +<A NAME="IDX283"></A> <DL> <DT><U>Function:</U> int <B>rl_ding</B> <I>(void)</I> <DD>Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>. </DL> </P><P> -<A NAME="IDX282"></A> +<A NAME="IDX284"></A> <DL> <DT><U>Function:</U> int <B>rl_alphabetic</B> <I>(int c)</I> <DD>Return 1 if <VAR>c</VAR> is an alphabetic character. </DL> </P><P> -<A NAME="IDX283"></A> +<A NAME="IDX285"></A> <DL> <DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I> <DD>A convenience function for displaying a list of strings in @@ -3655,28 +3668,28 @@ The following are implemented as macros, defined in <CODE>chardefs.h</CODE>. Applications should refrain from using them. </P><P> -<A NAME="IDX284"></A> +<A NAME="IDX286"></A> <DL> <DT><U>Function:</U> int <B>_rl_uppercase_p</B> <I>(int c)</I> <DD>Return 1 if <VAR>c</VAR> is an uppercase alphabetic character. </DL> </P><P> -<A NAME="IDX285"></A> +<A NAME="IDX287"></A> <DL> <DT><U>Function:</U> int <B>_rl_lowercase_p</B> <I>(int c)</I> <DD>Return 1 if <VAR>c</VAR> is a lowercase alphabetic character. </DL> </P><P> -<A NAME="IDX286"></A> +<A NAME="IDX288"></A> <DL> <DT><U>Function:</U> int <B>_rl_digit_p</B> <I>(int c)</I> <DD>Return 1 if <VAR>c</VAR> is a numeric character. </DL> </P><P> -<A NAME="IDX287"></A> +<A NAME="IDX289"></A> <DL> <DT><U>Function:</U> int <B>_rl_to_upper</B> <I>(int c)</I> <DD>If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding @@ -3684,7 +3697,7 @@ uppercase character. </DL> </P><P> -<A NAME="IDX288"></A> +<A NAME="IDX290"></A> <DL> <DT><U>Function:</U> int <B>_rl_to_lower</B> <I>(int c)</I> <DD>If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding @@ -3692,7 +3705,7 @@ lowercase character. </DL> </P><P> -<A NAME="IDX289"></A> +<A NAME="IDX291"></A> <DL> <DT><U>Function:</U> int <B>_rl_digit_value</B> <I>(int c)</I> <DD>If <VAR>c</VAR> is a number, return the value it represents. @@ -3717,7 +3730,7 @@ lowercase character. <!--docid::SEC40::--> <P> -<A NAME="IDX290"></A> +<A NAME="IDX292"></A> <DL> <DT><U>Function:</U> int <B>rl_macro_bind</B> <I>(const char *keyseq, const char *macro, Keymap map)</I> <DD>Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>. @@ -3727,7 +3740,7 @@ use <CODE>rl_generic_bind()</CODE> instead. </DL> </P><P> -<A NAME="IDX291"></A> +<A NAME="IDX293"></A> <DL> <DT><U>Function:</U> void <B>rl_macro_dumper</B> <I>(int readable)</I> <DD>Print the key sequences bound to macros and their values, using @@ -3737,7 +3750,7 @@ that it can be made part of an <CODE>inputrc</CODE> file and re-read. </DL> </P><P> -<A NAME="IDX292"></A> +<A NAME="IDX294"></A> <DL> <DT><U>Function:</U> int <B>rl_variable_bind</B> <I>(const char *variable, const char *value)</I> <DD>Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>. @@ -3747,7 +3760,7 @@ file (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax< </DL> </P><P> -<A NAME="IDX293"></A> +<A NAME="IDX295"></A> <DL> <DT><U>Function:</U> void <B>rl_variable_dumper</B> <I>(int readable)</I> <DD>Print the readline variable names and their current values @@ -3757,7 +3770,7 @@ that it can be made part of an <CODE>inputrc</CODE> file and re-read. </DL> </P><P> -<A NAME="IDX294"></A> +<A NAME="IDX296"></A> <DL> <DT><U>Function:</U> int <B>rl_set_paren_blink_timeout</B> <I>(int u)</I> <DD>Set the time interval (in microseconds) that Readline waits when showing @@ -3765,7 +3778,7 @@ a balancing character when <CODE>blink-matching-paren</CODE> has been enabled. </DL> </P><P> -<A NAME="IDX295"></A> +<A NAME="IDX297"></A> <DL> <DT><U>Function:</U> char * <B>rl_get_termcap</B> <I>(const char *cap)</I> <DD>Retrieve the string value of the termcap capability <VAR>cap</VAR>. @@ -3803,7 +3816,7 @@ also be invoked as a `callback' function from an event loop. There are functions available to make this easy. </P><P> -<A NAME="IDX296"></A> +<A NAME="IDX298"></A> <DL> <DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(const char *prompt, rl_vcpfunc_t *lhandler)</I> <DD>Set up the terminal for readline I/O and display the initial @@ -3813,7 +3826,7 @@ The function takes the text of the line as an argument. </DL> </P><P> -<A NAME="IDX297"></A> +<A NAME="IDX299"></A> <DL> <DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>(void)</I> <DD>Whenever an application determines that keyboard input is available, it @@ -3832,7 +3845,7 @@ the terminal settings are modified for Readline's use again. </DL> </P><P> -<A NAME="IDX298"></A> +<A NAME="IDX300"></A> <DL> <DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>(void)</I> <DD>Restore the terminal to its initial state and remove the line handler. @@ -3990,7 +4003,7 @@ values of these variables only when calling <CODE>readline()</CODE>, not in a signal handler, so Readline's internal signal state is not corrupted. </P><P> -<A NAME="IDX299"></A> +<A NAME="IDX301"></A> <DL> <DT><U>Variable:</U> int <B>rl_catch_signals</B> <DD>If this variable is non-zero, Readline will install signal handlers for @@ -4002,7 +4015,7 @@ The default value of <CODE>rl_catch_signals</CODE> is 1. </DL> </P><P> -<A NAME="IDX300"></A> +<A NAME="IDX302"></A> <DL> <DT><U>Variable:</U> int <B>rl_catch_sigwinch</B> <DD>If this variable is non-zero, Readline will install a signal handler for @@ -4020,7 +4033,7 @@ Readline provides convenience functions to do the necessary terminal and internal state cleanup upon receipt of a signal. </P><P> -<A NAME="IDX301"></A> +<A NAME="IDX303"></A> <DL> <DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I> <DD>This function will reset the state of the terminal to what it was before @@ -4030,7 +4043,7 @@ all signals, depending on the values of <CODE>rl_catch_signals</CODE> and </DL> </P><P> -<A NAME="IDX302"></A> +<A NAME="IDX304"></A> <DL> <DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I> <DD>This will free any partial state associated with the current input line @@ -4042,7 +4055,7 @@ current input line. </DL> </P><P> -<A NAME="IDX303"></A> +<A NAME="IDX305"></A> <DL> <DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I> <DD>This will reinitialize the terminal and reinstall any Readline signal @@ -4057,14 +4070,14 @@ Readline to update its idea of the terminal size when a <CODE>SIGWINCH</CODE> is received. </P><P> -<A NAME="IDX304"></A> +<A NAME="IDX306"></A> <DL> <DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I> <DD>Update Readline's internal screen size by reading values from the kernel. </DL> </P><P> -<A NAME="IDX305"></A> +<A NAME="IDX307"></A> <DL> <DT><U>Function:</U> void <B>rl_set_screen_size</B> <I>(int rows, int cols)</I> <DD>Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and @@ -4077,7 +4090,7 @@ is still interested in the screen dimensions, Readline's idea of the screen size may be queried. </P><P> -<A NAME="IDX306"></A> +<A NAME="IDX308"></A> <DL> <DT><U>Function:</U> void <B>rl_get_screen_size</B> <I>(int *rows, int *cols)</I> <DD>Return Readline's idea of the terminal's size in the @@ -4088,7 +4101,7 @@ variables pointed to by the arguments. The following functions install and remove Readline's signal handlers. </P><P> -<A NAME="IDX307"></A> +<A NAME="IDX309"></A> <DL> <DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I> <DD>Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, @@ -4098,7 +4111,7 @@ The following functions install and remove Readline's signal handlers. </DL> </P><P> -<A NAME="IDX308"></A> +<A NAME="IDX310"></A> <DL> <DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I> <DD>Remove all of the Readline signal handlers installed by @@ -4211,7 +4224,7 @@ Such a generator function is referred to as an </OL> <P> -<A NAME="IDX309"></A> +<A NAME="IDX311"></A> <DL> <DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> <DD>Complete the word at or before point. You have supplied the function @@ -4220,7 +4233,7 @@ that does the initial simple matching selection algorithm (see </DL> </P><P> -<A NAME="IDX310"></A> +<A NAME="IDX312"></A> <DL> <DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B> <DD>This is a pointer to the generator function for @@ -4256,7 +4269,7 @@ Here is the complete list of callable completion functions present in Readline. </P><P> -<A NAME="IDX311"></A> +<A NAME="IDX313"></A> <DL> <DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I> <DD>Complete the word at or before point. <VAR>what_to_do</VAR> says what to do @@ -4270,7 +4283,7 @@ a common prefix. </DL> </P><P> -<A NAME="IDX312"></A> +<A NAME="IDX314"></A> <DL> <DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> <DD>Complete the word at or before point. You have supplied the function @@ -4282,7 +4295,7 @@ argument depending on <VAR>invoking_key</VAR>. </DL> </P><P> -<A NAME="IDX313"></A> +<A NAME="IDX315"></A> <DL> <DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key)</I> <DD>List the possible completions. See description of <CODE>rl_complete @@ -4291,7 +4304,7 @@ argument depending on <VAR>invoking_key</VAR>. </DL> </P><P> -<A NAME="IDX314"></A> +<A NAME="IDX316"></A> <DL> <DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key)</I> <DD>Insert the list of possible completions into the line, deleting the @@ -4300,7 +4313,7 @@ This calls <CODE>rl_complete_internal()</CODE> with an argument of <SAMP>`*'</SA </DL> </P><P> -<A NAME="IDX315"></A> +<A NAME="IDX317"></A> <DL> <DT><U>Function:</U> int <B>rl_completion_mode</B> <I>(rl_command_func_t *cfunc)</I> <DD>Returns the apppriate value to pass to <CODE>rl_complete_internal()</CODE> @@ -4312,7 +4325,7 @@ the same interface as <CODE>rl_complete()</CODE>. </DL> </P><P> -<A NAME="IDX316"></A> +<A NAME="IDX318"></A> <DL> <DT><U>Function:</U> char ** <B>rl_completion_matches</B> <I>(const char *text, rl_compentry_func_t *entry_func)</I> <DD>Returns an array of strings which is a list of completions for @@ -4330,7 +4343,7 @@ when there are no more matches. </DL> </P><P> -<A NAME="IDX317"></A> +<A NAME="IDX319"></A> <DL> <DT><U>Function:</U> char * <B>rl_filename_completion_function</B> <I>(const char *text, int state)</I> <DD>A generator function for filename completion in the general case. @@ -4341,7 +4354,7 @@ Readline functions). </DL> </P><P> -<A NAME="IDX318"></A> +<A NAME="IDX320"></A> <DL> <DT><U>Function:</U> char * <B>rl_username_completion_function</B> <I>(const char *text, int state)</I> <DD>A completion generator for usernames. <VAR>text</VAR> contains a partial @@ -4369,7 +4382,7 @@ for subsequent calls. <!--docid::SEC47::--> <P> -<A NAME="IDX319"></A> +<A NAME="IDX321"></A> <DL> <DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B> <DD>A pointer to the generator function for <CODE>rl_completion_matches()</CODE>. @@ -4378,7 +4391,7 @@ the default filename completer. </DL> </P><P> -<A NAME="IDX320"></A> +<A NAME="IDX322"></A> <DL> <DT><U>Variable:</U> rl_completion_func_t * <B>rl_attempted_completion_function</B> <DD>A pointer to an alternative function to create matches. @@ -4395,7 +4408,7 @@ completion even if this function returns no matches. </DL> </P><P> -<A NAME="IDX321"></A> +<A NAME="IDX323"></A> <DL> <DT><U>Variable:</U> rl_quote_func_t * <B>rl_filename_quoting_function</B> <DD>A pointer to a function that will quote a filename in an @@ -4412,7 +4425,7 @@ to reset this character. </DL> </P><P> -<A NAME="IDX322"></A> +<A NAME="IDX324"></A> <DL> <DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_dequoting_function</B> <DD>A pointer to a function that will remove application-specific quoting @@ -4425,7 +4438,7 @@ that delimits the filename (usually <SAMP>`''</SAMP> or <SAMP>`"'</SAMP>). If </DL> </P><P> -<A NAME="IDX323"></A> +<A NAME="IDX325"></A> <DL> <DT><U>Variable:</U> rl_linebuf_func_t * <B>rl_char_is_quoted_p</B> <DD>A pointer to a function to call that determines whether or not a specific @@ -4438,7 +4451,7 @@ used to break words for the completer. </DL> </P><P> -<A NAME="IDX324"></A> +<A NAME="IDX326"></A> <DL> <DT><U>Variable:</U> rl_compignore_func_t * <B>rl_ignore_some_completions_function</B> <DD>This function, if defined, is called by the completer when real filename @@ -4451,7 +4464,7 @@ from the array must be freed. </DL> </P><P> -<A NAME="IDX325"></A> +<A NAME="IDX327"></A> <DL> <DT><U>Variable:</U> rl_icppfunc_t * <B>rl_directory_completion_hook</B> <DD>This function, if defined, is allowed to modify the directory portion @@ -4467,7 +4480,7 @@ It could be used to expand symbolic links or shell variables in pathnames. </DL> </P><P> -<A NAME="IDX326"></A> +<A NAME="IDX328"></A> <DL> <DT><U>Variable:</U> rl_compdisp_func_t * <B>rl_completion_display_matches_hook</B> <DD>If non-zero, then this is the address of a function to call when @@ -4484,7 +4497,7 @@ function may be called from this hook. </DL> </P><P> -<A NAME="IDX327"></A> +<A NAME="IDX329"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_basic_word_break_characters</B> <DD>The basic list of characters that signal a break between words for the @@ -4494,14 +4507,14 @@ which break words for completion in Bash: </DL> </P><P> -<A NAME="IDX328"></A> +<A NAME="IDX330"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_basic_quote_characters</B> <DD>A list of quote characters which can cause a word break. </DL> </P><P> -<A NAME="IDX329"></A> +<A NAME="IDX331"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_completer_word_break_characters</B> <DD>The list of characters that signal a break between words for @@ -4510,7 +4523,19 @@ which break words for completion in Bash: </DL> </P><P> -<A NAME="IDX330"></A> +<A NAME="IDX332"></A> +<DL> +<DT><U>Variable:</U> rl_cpvfunc_t * <B>rl_completion_word_break_hook</B> +<DD>If non-zero, this is the address of a function to call when Readline is +deciding where to separate words for word completion. It should return +a character string like <CODE>rl_completer_word_break_characters</CODE> to be +used to perform the current completion. The function may choose to set +<CODE>rl_completer_word_break_characters</CODE> itself. If the function +returns <CODE>NULL</CODE>, <CODE>rl_completer_word_break_characters</CODE> is used. +</DL> +</P><P> + +<A NAME="IDX333"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_completer_quote_characters</B> <DD>A list of characters which can be used to quote a substring of the line. @@ -4520,7 +4545,7 @@ unless they also appear within this list. </DL> </P><P> -<A NAME="IDX331"></A> +<A NAME="IDX334"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_filename_quote_characters</B> <DD>A list of characters that cause a filename to be quoted by the completer @@ -4528,7 +4553,7 @@ when they appear in a completed filename. The default is the null string. </DL> </P><P> -<A NAME="IDX332"></A> +<A NAME="IDX335"></A> <DL> <DT><U>Variable:</U> const char * <B>rl_special_prefixes</B> <DD>The list of characters that are word break characters, but should be @@ -4539,7 +4564,7 @@ shell variables and hostnames. </DL> </P><P> -<A NAME="IDX333"></A> +<A NAME="IDX336"></A> <DL> <DT><U>Variable:</U> int <B>rl_completion_query_items</B> <DD>Up to this many items will be displayed in response to a @@ -4548,7 +4573,7 @@ she wants to see them all. The default value is 100. </DL> </P><P> -<A NAME="IDX334"></A> +<A NAME="IDX337"></A> <DL> <DT><U>Variable:</U> int <B>rl_completion_append_character</B> <DD>When a single completion alternative matches at the end of the command @@ -4561,17 +4586,47 @@ an application-specific command line syntax specification. </DL> </P><P> -<A NAME="IDX335"></A> +<A NAME="IDX338"></A> <DL> <DT><U>Variable:</U> int <B>rl_completion_suppress_append</B> <DD>If non-zero, <VAR>rl_completion_append_character</VAR> is not appended to -matches at the end of the command line, as described above. It is -set to 0 before any application-specific completion function is called, -and may only be changed within such a function. +matches at the end of the command line, as described above. +It is set to 0 before any application-specific completion function +is called, and may only be changed within such a function. </DL> </P><P> -<A NAME="IDX336"></A> +<A NAME="IDX339"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_quote_character</B> +<DD>When Readline is completing quoted text, as delimited by one of the +characters in <VAR>rl_completer_quote_characters</VAR>, it sets this variable +to the quoting character found. +This is set before any application-specific completion function is called. +</DL> +</P><P> + +<A NAME="IDX340"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_suppress_quote</B> +<DD>If non-zero, Readline does not append a matching quote character when +performing completion on a quoted string. +It is set to 0 before any application-specific completion function +is called, and may only be changed within such a function. +</DL> +</P><P> + +<A NAME="IDX341"></A> +<DL> +<DT><U>Variable:</U> int <B>rl_completion_found_quote</B> +<DD>When Readline is completing quoted text, it sets this variable +to a non-zero value if the word being completed contains or is delimited +by any quoting characters, including backslashes. +This is set before any application-specific completion function is called. +</DL> +</P><P> + +<A NAME="IDX342"></A> <DL> <DT><U>Variable:</U> int <B>rl_completion_mark_symlink_dirs</B> <DD>If non-zero, a slash will be appended to completed filenames that are @@ -4586,7 +4641,7 @@ function modifies the value, the user's preferences are honored. </DL> </P><P> -<A NAME="IDX337"></A> +<A NAME="IDX343"></A> <DL> <DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B> <DD>If non-zero, then duplicates in the matches are removed. @@ -4594,7 +4649,7 @@ The default is 1. </DL> </P><P> -<A NAME="IDX338"></A> +<A NAME="IDX344"></A> <DL> <DT><U>Variable:</U> int <B>rl_filename_completion_desired</B> <DD>Non-zero means that the results of the matches are to be treated as @@ -4608,7 +4663,7 @@ characters in <CODE>rl_filename_quote_characters</CODE> and </DL> </P><P> -<A NAME="IDX339"></A> +<A NAME="IDX345"></A> <DL> <DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B> <DD>Non-zero means that the results of the matches are to be quoted using @@ -4622,7 +4677,7 @@ by <CODE>rl_filename_quoting_function</CODE>. </DL> </P><P> -<A NAME="IDX340"></A> +<A NAME="IDX346"></A> <DL> <DT><U>Variable:</U> int <B>rl_attempted_completion_over</B> <DD>If an application-specific completion function assigned to @@ -4633,7 +4688,7 @@ It should be set only by an application's completion function. </DL> </P><P> -<A NAME="IDX341"></A> +<A NAME="IDX347"></A> <DL> <DT><U>Variable:</U> int <B>rl_completion_type</B> <DD>Set to a character describing the type of completion Readline is currently @@ -4645,7 +4700,7 @@ the same interface as <CODE>rl_complete()</CODE>. </DL> </P><P> -<A NAME="IDX342"></A> +<A NAME="IDX348"></A> <DL> <DT><U>Variable:</U> int <B>rl_inhibit_completion</B> <DD>If this variable is non-zero, completion is inhibited. The completion @@ -5156,7 +5211,7 @@ valid_argument (caller, arg) <!--docid::SEC50::--> <P> -<A NAME="IDX343"></A> +<A NAME="IDX349"></A> <center> Version 1.2, November 2002 </center> @@ -5726,7 +5781,7 @@ to permit their use in free software. <TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">editing command lines</A></TD><TD valign=top><A HREF="rlman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="cp_F"></A>F</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX343">FDL, GNU Free Documentation License</A></TD><TD valign=top><A HREF="rlman.html#SEC50">A.1 GNU Free Documentation License</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX349">FDL, GNU Free Documentation License</A></TD><TD valign=top><A HREF="rlman.html#SEC50">A.1 GNU Free Documentation License</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#SEC9">initialization file, readline</A></TD><TD valign=top><A HREF="rlman.html#SEC9">1.3 Readline Init File</A></TD></TR> @@ -5740,7 +5795,7 @@ to permit their use in free software. <TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">notation, readline</A></TD><TD valign=top><A HREF="rlman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176">readline, function</A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178">readline, function</A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX4">variables, readline</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> @@ -5834,16 +5889,16 @@ to permit their use in free software. <TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn__"></A>_</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_A"></A>A</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX43"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX44"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> @@ -5865,62 +5920,62 @@ to permit their use in free software. <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX5">bell-style</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_C"></A>C</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX89"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX90"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX39"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX40"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX6">comment-begin</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX7">completion-query-items</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX8">convert-meta</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_D"></A>D</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX69"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX70"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX9">disable-completion</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX87"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX88"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_E"></A>E</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX10">editing-mode</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX11">enable-keypad</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX138"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX51"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX52"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX29"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX30"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX12">expand-tilde</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_F"></A>F</TH><TD></TD><TD></TD></TR> @@ -5943,18 +5998,18 @@ to permit their use in free software. <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_I"></A>I</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX15">input-meta</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX17">isearch-terminators</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_K"></A>K</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX18">keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX93"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX94"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX99"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX100"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX101"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> @@ -5964,8 +6019,8 @@ to permit their use in free software. <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX19">mark-modified-lines</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX20">mark-symlinked-directories</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX21">match-hidden-files</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX16">meta-flag</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_N"></A>N</TH><TD></TD><TD></TD></TR> @@ -5983,10 +6038,10 @@ to permit their use in free software. <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_P"></A>P</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX23">page-completions</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX45"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX46"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> @@ -5995,201 +6050,207 @@ to permit their use in free software. <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX76"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_R"></A>R</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC24">2.1 Basic Behavior</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX41"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX42"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX53"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX54"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC30">2.4.1 Naming a Function</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_already_prompted</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX340">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_bind_key_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_bind_key_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_bind_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_bind_keyseq_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_bind_keyseq_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_bind_keyseq_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_binding_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299">rl_catch_signals</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_completion_append_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX336">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_completion_query_items</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX335">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX341">rl_completion_type</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_deprep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_dispatching</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_done</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209">rl_editing_mode</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179">rl_end</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_erase_empty_line</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_event_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_executing_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_executing_macro</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_explicit_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX338">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX339">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_getc_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX337">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX342">rl_inhibit_completion</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_instream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_last_func</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_library_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177">rl_line_buffer</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_mark</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_numeric_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_outstream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_pending_input</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178">rl_point</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_pre_input_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_prep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_prompt</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_readline_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_readline_state</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_readline_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_redisplay_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_special_prefixes</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_startup_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_terminal_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_tty_unset_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC30">2.4.1 Naming a Function</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_already_prompted</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX346">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_bind_key_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_bind_key_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_bind_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_bind_keyseq_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_bind_keyseq_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_bind_keyseq_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_binding_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301">rl_catch_signals</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX337">rl_completion_append_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX341">rl_completion_found_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX342">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX336">rl_completion_query_items</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX339">rl_completion_quote_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX338">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX340">rl_completion_suppress_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX347">rl_completion_type</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_completion_word_break_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_deprep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_dispatching</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_done</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211">rl_editing_mode</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_end</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_erase_empty_line</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_event_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_executing_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_executing_macro</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209">rl_explicit_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX344">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX345">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_getc_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX343">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX348">rl_inhibit_completion</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_instream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_last_func</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_library_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179">rl_line_buffer</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_mark</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210">rl_numeric_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_outstream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_pending_input</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_point</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_pre_input_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_prep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_prompt</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_readline_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_readline_state</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_readline_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_redisplay_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX335">rl_special_prefixes</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_startup_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_terminal_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_tty_unset_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_S"></A>S</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX79"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX80"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX24">show-all-if-ambiguous</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX25">show-all-if-unmodified</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX138"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_T"></A>T</TH><TD></TD><TD></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX77"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX78"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX81"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX82"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX83"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX84"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_U"></A>U</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>unix-filename-rubout ()</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX97"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX98"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX105"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> @@ -6198,19 +6259,19 @@ to permit their use in free software. <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX86"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_V"></A>V</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX26">visible-stats</A></TD><TD valign=top><A HREF="rlman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> <TR><TH><A NAME="fn_Y"></A>Y</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX67"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX68"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX65"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX66"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> +<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> <TR><TD COLSPAN=3> <HR></TD></TR> </TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A> @@ -6425,7 +6486,7 @@ to permit their use in free software. <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> </TR></TABLE> <H1>About this document</H1> -This document was generated by <I>Chet Ramey</I> on <I>September, 22 2003</I> +This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> <P></P> @@ -6587,7 +6648,7 @@ the following structure: <BR> <FONT SIZE="-1"> This document was generated -by <I>Chet Ramey</I> on <I>September, 22 2003</I> +by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> diff --git a/lib/readline/doc/readline.info b/lib/readline/doc/readline.info index 264ebdfb..4f7b4ae7 100644 --- a/lib/readline/doc/readline.info +++ b/lib/readline/doc/readline.info @@ -1,12 +1,11 @@ This is readline.info, produced by makeinfo version 4.5 from ./rlman.texi. -This manual describes the GNU Readline Library (version 5.0, 19 -September 2003), a library which aids in the consistency of user -interface across discrete programs which provide a command line -interface. +This manual describes the GNU Readline Library (version 5.0, 28 January +2004), a library which aids in the consistency of user interface across +discrete programs which provide a command line interface. - Copyright (C) 1988-2003 Free Software Foundation, Inc. + Copyright (C) 1988-2004 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -1040,6 +1039,11 @@ Killing And Yanking Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. +`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. + `delete-horizontal-space ()' Delete all spaces and tabs around point. By default, this is unbound. @@ -1261,7 +1265,7 @@ the standard `vi' movement keys, move to previous history lines with aiding in the consitency of user interface across discrete programs that need to provide a command line interface. - Copyright (C) 1988-2002 Free Software Foundation, Inc. + Copyright (C) 1988-2004 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice pare @@ -2141,7 +2145,12 @@ Redisplay primary prompt if the `rl_on_new_line_with_prompt()' function or `rl_already_prompted' variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) - prompt. + prompt. Applications may indicate that the prompt contains + characters that take up no physical screen space when displayed by + bracketing a sequence of such characters with the special markers + `RL_PROMPT_START_IGNORE' and `RL_PROMPT_END_IGNORE' (declared in + `readline.h'. This may be used to embed terminal-specific escape + sequences in prompts. - Function: int rl_set_prompt (const char *prompt) Make Readline use PROMPT for subsequent redisplay. This calls @@ -2836,6 +2845,15 @@ Completion Variables `rl_complete_internal()'. The default list is the value of `rl_basic_word_break_characters'. + - Variable: rl_cpvfunc_t * rl_completion_word_break_hook + If non-zero, this is the address of a function to call when + Readline is deciding where to separate words for word completion. + It should return a character string like + `rl_completer_word_break_characters' to be used to perform the + current completion. The function may choose to set + `rl_completer_word_break_characters' itself. If the function + returns `NULL', `rl_completer_word_break_characters' is used. + - Variable: const char * rl_completer_quote_characters A list of characters which can be used to quote a substring of the line. Completion occurs on the entire substring, and within the @@ -2875,6 +2893,25 @@ Completion Variables set to 0 before any application-specific completion function is called, and may only be changed within such a function. + - Variable: int rl_completion_quote_character + When Readline is completing quoted text, as delimited by one of the + characters in RL_COMPLETER_QUOTE_CHARACTERS, it sets this variable + to the quoting character found. This is set before any + application-specific completion function is called. + + - Variable: int rl_completion_suppress_quote + If non-zero, Readline does not append a matching quote character + when performing completion on a quoted string. It is set to 0 + before any application-specific completion function is called, and + may only be changed within such a function. + + - Variable: int rl_completion_found_quote + When Readline is completing quoted text, it sets this variable to + a non-zero value if the word being completed contains or is + delimited by any quoting characters, including backslashes. This + is set before any application-specific completion function is + called. + - Variable: int rl_completion_mark_symlink_dirs If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the @@ -3958,21 +3995,25 @@ Function and Variable Index * rl_clear_message: Redisplay. * rl_clear_pending_input: Character Input. * rl_clear_signals: Readline Signal Handling. -* rl_complete <1>: Completion Functions. -* rl_complete: How Completing Works. +* rl_complete <1>: How Completing Works. +* rl_complete: Completion Functions. * rl_complete_internal: Completion Functions. * rl_completer_quote_characters: Completion Variables. * rl_completer_word_break_characters: Completion Variables. * rl_completion_append_character: Completion Variables. * rl_completion_display_matches_hook: Completion Variables. -* rl_completion_entry_function <1>: How Completing Works. -* rl_completion_entry_function: Completion Variables. +* rl_completion_entry_function <1>: Completion Variables. +* rl_completion_entry_function: How Completing Works. +* rl_completion_found_quote: Completion Variables. * rl_completion_mark_symlink_dirs: Completion Variables. * rl_completion_matches: Completion Functions. * rl_completion_mode: Completion Functions. * rl_completion_query_items: Completion Variables. +* rl_completion_quote_character: Completion Variables. * rl_completion_suppress_append: Completion Variables. +* rl_completion_suppress_quote: Completion Variables. * rl_completion_type: Completion Variables. +* rl_completion_word_break_hook: Completion Variables. * rl_copy_keymap: Keymaps. * rl_copy_text: Modifying Text. * rl_crlf: Redisplay. @@ -4098,6 +4139,7 @@ Function and Variable Index * transpose-words (M-t): Commands For Text. * undo (C-_ or C-x C-u): Miscellaneous Commands. * universal-argument (): Numeric Arguments. +* unix-filename-rubout (): Commands For Killing. * unix-line-discard (C-u): Commands For Killing. * unix-word-rubout (C-w): Commands For Killing. * upcase-word (M-u): Commands For Text. @@ -4110,58 +4152,58 @@ Function and Variable Index Tag Table: -Node: Top1298 -Node: Command Line Editing1939 -Node: Introduction and Notation2590 -Node: Readline Interaction4208 -Node: Readline Bare Essentials5395 -Node: Readline Movement Commands7176 -Node: Readline Killing Commands8133 -Node: Readline Arguments10043 -Node: Searching11079 -Node: Readline Init File13222 -Node: Readline Init File Syntax14283 -Node: Conditional Init Constructs25646 -Node: Sample Init File28171 -Node: Bindable Readline Commands31355 -Node: Commands For Moving32405 -Node: Commands For History33255 -Node: Commands For Text36114 -Node: Commands For Killing38829 -Node: Numeric Arguments40780 -Node: Commands For Completion41908 -Node: Keyboard Macros43441 -Node: Miscellaneous Commands44001 -Node: Readline vi Mode47351 -Node: Programming with GNU Readline49169 -Node: Basic Behavior50143 -Node: Custom Functions53573 -Node: Readline Typedefs55051 -Node: Function Writing56681 -Node: Readline Variables57889 -Node: Readline Convenience Functions67312 -Node: Function Naming68294 -Node: Keymaps69546 -Node: Binding Keys71302 -Node: Associating Function Names and Bindings75824 -Node: Allowing Undoing78069 -Node: Redisplay80604 -Node: Modifying Text83675 -Node: Character Input84904 -Node: Terminal Management86684 -Node: Utility Functions88103 -Node: Miscellaneous Functions90442 -Node: Alternate Interface92506 -Node: A Readline Example94651 -Node: Readline Signal Handling96588 -Node: Custom Completers102191 -Node: How Completing Works102906 -Node: Completion Functions106209 -Node: Completion Variables109764 -Node: A Short Completion Example120386 -Node: Copying This Manual132939 -Node: GNU Free Documentation License133179 -Node: Concept Index155573 -Node: Function and Variable Index156522 +Node: Top1296 +Node: Command Line Editing1937 +Node: Introduction and Notation2588 +Node: Readline Interaction4206 +Node: Readline Bare Essentials5393 +Node: Readline Movement Commands7174 +Node: Readline Killing Commands8131 +Node: Readline Arguments10041 +Node: Searching11077 +Node: Readline Init File13220 +Node: Readline Init File Syntax14281 +Node: Conditional Init Constructs25644 +Node: Sample Init File28169 +Node: Bindable Readline Commands31353 +Node: Commands For Moving32403 +Node: Commands For History33253 +Node: Commands For Text36112 +Node: Commands For Killing38827 +Node: Numeric Arguments40958 +Node: Commands For Completion42086 +Node: Keyboard Macros43619 +Node: Miscellaneous Commands44179 +Node: Readline vi Mode47529 +Node: Programming with GNU Readline49347 +Node: Basic Behavior50321 +Node: Custom Functions53751 +Node: Readline Typedefs55229 +Node: Function Writing56859 +Node: Readline Variables58067 +Node: Readline Convenience Functions67490 +Node: Function Naming68472 +Node: Keymaps69724 +Node: Binding Keys71480 +Node: Associating Function Names and Bindings76002 +Node: Allowing Undoing78247 +Node: Redisplay80782 +Node: Modifying Text84216 +Node: Character Input85445 +Node: Terminal Management87225 +Node: Utility Functions88644 +Node: Miscellaneous Functions90983 +Node: Alternate Interface93047 +Node: A Readline Example95192 +Node: Readline Signal Handling97129 +Node: Custom Completers102732 +Node: How Completing Works103447 +Node: Completion Functions106750 +Node: Completion Variables110305 +Node: A Short Completion Example122375 +Node: Copying This Manual134928 +Node: GNU Free Documentation License135168 +Node: Concept Index157562 +Node: Function and Variable Index158511 End Tag Table diff --git a/lib/readline/doc/readline.ps b/lib/readline/doc/readline.ps index d3718386..a6b031ac 100644 --- a/lib/readline/doc/readline.ps +++ b/lib/readline/doc/readline.ps @@ -1,14 +1,14 @@ %!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: readline.dvi -%%Pages: 72 +%%Pages: 74 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi %DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2003.09.22:0904 +%DVIPSSource: TeX output 2004.07.27:0931 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -797,8 +797,8 @@ FC000F006C6C131E6C6C5BEC803890387FC078013F5B90381FE1E090380FF3C0ECFF806D 306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0 D900FEC7FC272B7DA02E>13 D E %EndDVIPSBitmapFont -%DVIPSBitmapFont: Fr cmbx12 14.4 53 -/Fr 53 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 +%DVIPSBitmapFont: Fr cmbx12 14.4 54 +/Fr 54 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2 @@ -814,64 +814,66 @@ C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 22>I<EB07F8EB3FFE90B5FC3901FC07803903F00FC03807C01FEA0F80121F130048EB0F 8091C7FC127EA3EAFE02EB1FF0EB3FFCEB603EEB801F00FF14809038000FC0A24814E0A4 127EA4123E003F14C07EEC1F80D80F8013003807E07E6CB45A6C5B38003FC01B277DA622 ->I<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480 -A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F08049130300 -0181491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F800 -1FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE -00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8 -B712E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF00F -9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290C9 -FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397F -F007C0011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03FC -001FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A2 -17C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A3 -3903FC001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EB -FC0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A32729 -7EA82C>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A3160014 -03A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE0 -03903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848804848804848 -80485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C -7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8 -F00FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835> -I<B512F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F00 -161E5E5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFD -E79038FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F -80B539F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A2 -1507A2150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D -0003EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8 -130EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE3 -80A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8 -FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF01801380 -147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF115 -0F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835> -I<ECFFC0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F81 -48486D7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C -6C14FEA26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC -010013C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FE -A716FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I< -ECFFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48 -486D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C -6C14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC0 -90263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F -5A6F5A6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A6 -5E4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170E -A21503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E0 -000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F -FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0 -1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8 -25>I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A24815 -01A5C791C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA -0001ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7 -FC2F297EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B -017F140E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE03 -01015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230 -297FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E -13016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F16 -0E17F09126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC7003 -5BA2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E8002 -1E141EA242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D -6C130E6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7 -FC6D138FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89 +>I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CC6485AA249 +5A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA822>I<EC +0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480A24948 +6C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F08049130300018149 +1301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8001FE0ED +0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE00EDFF +C09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8B712E0 +16C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039 +FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290C9FC5AA9 +7E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF007C0 +011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03FC001FF8 +ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A217C016 +1FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A33903FC +001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EBFC0F14 +03A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327297EA82C +>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A316001403A214 +0F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE0039039 +07FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880485A +82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E6C7E +6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F00FB5 +FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I<B512 +F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F00161E5E +5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFDE79038 +FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F80B539 +F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A21507A2 +150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D0003EF +E000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2 +D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380A291 +3807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8FFFCEC +7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF01801380147F15 +C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F16F9 +ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835>I<ECFF +C0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F8148486D +7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C6C14FE +A26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC010013 +C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA716FC +150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<ECFFC0 +010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48486D7E +A24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C6C14FE +143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC090263F +C07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F5A6F5A +6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E4B5A +1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA21503 +923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E0000F13 +F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFF +E06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A4 +6C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I< +007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A2481501A5C7 +91C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA0001ED +07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC2F29 +7EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B017F14 +0E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE0301015C +ECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230297FA8 +33>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13016C +604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E17F0 +9126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035BA291 +3AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E141E +A242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D6C130E +6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7FC6D13 +8FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89 D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA 0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B7E9A21 >97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F09038F001F89038E0 @@ -1219,25 +1221,25 @@ TeXDict begin %%Page: 1 1 1 0 bop 75 659 a Fu(GNU)33 b(Readline)h(Library)p 75 709 1800 17 v 936 757 a Ft(Edition)17 b(5.0,)c(for)i -Fs(Readline)f(Library)g Ft(V)l(ersion)i(5.0.)1559 811 -y(Septem)o(b)q(er)g(2003)75 2467 y Fr(Chet)22 b(Ramey)-6 -b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75 +Fs(Readline)f(Library)g Ft(V)l(ersion)i(5.0.)1609 811 +y(Jan)o(uary)f(2004)75 2467 y Fr(Chet)22 b(Ramey)-6 b(,)23 +b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75 2534 y(Brian)h(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p 75 2570 1800 9 v eop %%Page: 2 2 -2 1 bop 75 1512 a Ft(This)11 b(man)o(ual)g(describ)q(es)h(the)f(GNU)g -(Readline)h(Library)f(\(v)o(ersion)f(5.0,)h(19)f(Septem)o(b)q(er)h -(2003\),)f(a)g(library)75 1567 y(whic)o(h)20 b(aids)h(in)f(the)g -(consistency)g(of)f(user)h(in)o(terface)g(across)f(discrete)h(programs) -f(whic)o(h)h(pro)o(vide)g(a)75 1621 y(command)15 b(line)i(in)o -(terface.)75 1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 -1689 y Fq(\015)d Ft(1988-2003)f(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)75 1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f -(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o -(ual)f(pro)o(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f -(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h -(copies.)195 1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,) -h(distribute)h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195 +2 1 bop 75 1512 a Ft(This)15 b(man)o(ual)g(describ)q(es)h(the)f(GNU)f +(Readline)i(Library)g(\(v)o(ersion)e(5.0,)f(28)i(Jan)o(uary)f(2004\),)f +(a)h(library)75 1567 y(whic)o(h)20 b(aids)h(in)f(the)g(consistency)g +(of)f(user)h(in)o(terface)g(across)f(discrete)h(programs)f(whic)o(h)h +(pro)o(vide)g(a)75 1621 y(command)15 b(line)i(in)o(terface.)75 +1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fq(\015)d +Ft(1988-2004)f(F)l(ree)i(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)75 +1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g +(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o +(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q +(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)195 +1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,)h(distribute) +h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195 1933 y(the)h(terms)f(of)h(the)g(GNU)g(F)l(ree)g(Do)q(cumen)o(tation)g (License,)i(V)l(ersion)f(1.1)e(or)g(an)o(y)h(later)195 1988 y(v)o(ersion)14 b(published)i(b)o(y)e(the)g(F)l(ree)f(Soft)o(w)o @@ -1388,20 +1390,20 @@ Fn(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f (.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Ft(43)374 315 y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b Fn(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)20 b Ft(46)75 437 y Fr(App)r(endix)k(A)50 b(Cop)n(ying)23 +(.)f(.)20 b Ft(47)75 437 y Fr(App)r(endix)k(A)50 b(Cop)n(ying)23 b(This)g(Man)n(ual)15 b Fo(.)c(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)37 -b Fr(55)224 505 y Ft(A.1)45 b(GNU)15 b(F)l(ree)h(Do)q(cumen)o(tation)f +b Fr(57)224 505 y Ft(A.1)45 b(GNU)15 b(F)l(ree)h(Do)q(cumen)o(tation)f (License)g Fn(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)28 b Ft(55)374 560 y(A.1.1)44 +(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)28 b Ft(57)374 560 y(A.1.1)44 b(ADDENDUM:)14 b(Ho)o(w)g(to)h(use)h(this)f(License)i(for)e(y)o(our)465 615 y(do)q(cumen)o(ts)f Fn(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)29 b Ft(61)75 +(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)29 b Ft(63)75 736 y Fr(Concept)22 b(Index)10 b Fo(.)i(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)h(.)f(.)33 b Fr(63)75 871 y(F)-6 b(unction)25 +g(.)g(.)h(.)f(.)33 b Fr(65)75 871 y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9 b Fo(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)32 b Fr(65)p +h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)32 b Fr(67)p eop %%Page: 1 5 1 4 bop 75 -58 a Ft(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 @@ -2309,114 +2311,119 @@ b(With)11 b(an)g(explicit)i(non-p)q(ositiv)o(e)f(n)o(umeric)g(argumen)o Fs(emacs)e Ft(mo)q(de;)h Fs(vi)g Ft(mo)q(de)h(do)q(es)g(o)o(v)o (erwrite)315 204 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15 b(call)h(to)f Fs(readline\(\))f Ft(starts)f(in)k(insert)e(mo)q(de.)315 -271 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f +269 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f Fs(self-insert)f Ft(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315 -326 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36 -b(Characters)20 b(b)q(ound)i(to)e Fs(backward-)315 381 +324 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36 +b(Characters)20 b(b)q(ound)i(to)e Fs(backward-)315 379 y(delete-char)14 b Ft(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q -(oin)o(t)h(with)f(a)g(space.)315 448 y(By)g(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 559 y Fh(1.4.4)30 b(Killing)20 -b(And)h(Y)-5 b(anking)75 680 y Fs(kill-line)14 b(\(C-k\))315 -735 y Ft(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)75 814 y Fs(backward-kill-line)e(\(C-x)h(Rubout\))315 -869 y Ft(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 948 y Fs(unix-line-discard)e(\(C-u\))315 1003 +(oin)o(t)h(with)f(a)g(space.)315 444 y(By)g(default,)h(this)f(command)g +(is)h(un)o(b)q(ound.)75 550 y Fh(1.4.4)30 b(Killing)20 +b(And)h(Y)-5 b(anking)75 669 y Fs(kill-line)14 b(\(C-k\))315 +724 y Ft(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f +(the)g(line.)75 800 y Fs(backward-kill-line)e(\(C-x)h(Rubout\))315 +854 y Ft(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g +(line.)75 930 y Fs(unix-line-discard)e(\(C-u\))315 985 y Ft(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1082 y Fs(kill-whole-line) -e(\(\))315 1137 y Ft(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren) +(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1060 y Fs(kill-whole-line) +e(\(\))315 1115 y Ft(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren) o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29 -b(By)19 b(default,)315 1192 y(this)d(is)f(un)o(b)q(ound.)75 -1271 y Fs(kill-word)f(\(M-d\))315 1325 y Ft(Kill)j(from)d(p)q(oin)o(t)h +b(By)19 b(default,)315 1170 y(this)d(is)f(un)o(b)q(ound.)75 +1245 y Fs(kill-word)f(\(M-d\))315 1300 y Ft(Kill)j(from)d(p)q(oin)o(t)h (to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o -(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1380 y(of)h(the)g(next)g(w)o +(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1355 y(of)h(the)g(next)g(w)o (ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g -Fs(forward-word)p Ft(.)75 1459 y Fs(backward-kill-word)e(\(M-)592 -1457 y Fk(h)p 603 1431 73 2 v 603 1459 a Fj(DEL)p 603 -1467 V 674 1457 a Fk(i)689 1459 y Fs(\))315 1514 y Ft(Kill)k(the)d(w)o +Fs(forward-word)p Ft(.)75 1430 y Fs(backward-kill-word)e(\(M-)592 +1428 y Fk(h)p 603 1402 73 2 v 603 1430 a Fj(DEL)p 603 +1438 V 674 1428 a Fk(i)689 1430 y Fs(\))315 1485 y Ft(Kill)k(the)d(w)o (ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f -(the)h(same)f(as)g Fs(backward-word)p Ft(.)75 1593 y -Fs(unix-word-rubout)f(\(C-w\))315 1648 y Ft(Kill)18 b(the)e(w)o(ord)f +(the)h(same)f(as)g Fs(backward-word)p Ft(.)75 1560 y +Fs(unix-word-rubout)f(\(C-w\))315 1615 y Ft(Kill)18 b(the)e(w)o(ord)f (b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g -(b)q(oundary)l(.)23 b(The)16 b(killed)315 1703 y(text)f(is)g(sa)o(v)o -(ed)g(on)g(the)h(kill-ring.)75 1782 y Fs(delete-horizontal-space)c -(\(\))315 1836 y Ft(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q -(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 -1915 y Fs(kill-region)e(\(\))315 1970 y Ft(Kill)j(the)f(text)e(in)i -(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 2049 y Fs(copy-region-as-kill)d(\(\))315 -2104 y Ft(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h -(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o -(a)o(y)l(.)315 2159 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 2238 y Fs(copy-backward-word)d(\(\))315 2293 -y Ft(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i -(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 -2348 y(same)c(as)g Fs(backward-word)p Ft(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)75 2427 y Fs(copy-forward-word)d(\(\)) -315 2481 y Ft(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f +(b)q(oundary)l(.)23 b(The)16 b(killed)315 1670 y(text)f(is)g(sa)o(v)o +(ed)g(on)g(the)h(kill-ring.)75 1745 y Fs(unix-filename-rubout)c(\(\)) +315 1800 y Ft(Kill)20 b(the)f(w)o(ord)e(b)q(ehind)j(p)q(oin)o(t,)f +(using)g(white)g(space)f(and)h(the)f(slash)h(c)o(haracter)e(as)h(the) +315 1855 y(w)o(ord)d(b)q(oundaries.)21 b(The)15 b(killed)j(text)c(is)i +(sa)o(v)o(ed)f(on)g(the)g(kill-ring.)75 1930 y Fs +(delete-horizontal-space)d(\(\))315 1985 y Ft(Delete)k(all)g(spaces)f +(and)h(tabs)e(around)i(p)q(oin)o(t.)k(By)15 b(default,)h(this)f(is)h +(un)o(b)q(ound.)75 2060 y Fs(kill-region)e(\(\))315 2115 +y Ft(Kill)j(the)f(text)e(in)i(the)g(curren)o(t)f(region.)20 +b(By)15 b(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 +2190 y Fs(copy-region-as-kill)d(\(\))315 2245 y Ft(Cop)o(y)j(the)i +(text)e(in)i(the)f(region)g(to)g(the)g(kill)h(bu\013er,)f(so)g(it)g +(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o(a)o(y)l(.)315 +2300 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 +2375 y Fs(copy-backward-word)d(\(\))315 2430 y Ft(Cop)o(y)19 +b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i(kill)h +(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 +2485 y(same)c(as)g Fs(backward-word)p Ft(.)j(By)d(default,)g(this)h +(command)f(is)h(un)o(b)q(ound.)75 2560 y Fs(copy-forward-word)d(\(\)) +315 2615 y Ft(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f (to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e -(the)315 2536 y(same)g(as)g Fs(forward-word)p Ft(.)j(By)d(default,)h -(this)f(command)g(is)h(un)o(b)q(ound.)75 2615 y Fs(yank)f(\(C-y\))315 -2670 y Ft(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the) -h(bu\013er)f(at)f(p)q(oin)o(t.)p eop +(the)315 2670 y(same)g(as)g Fs(forward-word)p Ft(.)j(By)d(default,)h +(this)f(command)g(is)h(un)o(b)q(ound.)p eop %%Page: 17 21 17 20 bop 75 -58 a Ft(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 149 y Fs(yank-pop)14 b(\(M-y\))315 204 y Ft(Rotate)i(the)h -(kill-ring,)j(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 -b(can)h(only)g(do)f(this)h(if)f(the)h(prior)315 259 y(command)d(is)h -Fs(yank)e Ft(or)h Fs(yank-pop)p Ft(.)75 382 y Fh(1.4.5)30 -b(Sp)r(ecifying)20 b(Numeric)h(Argumen)n(ts)75 507 y -Fs(digit-argument)13 b(\()p Fl(M-0)p Fs(,)i Fl(M-1)p -Fs(,)f(...)h Fl(M--)p Fs(\))315 562 y Ft(Add)f(this)g(digit)g(to)f(the) -h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h -(argumen)o(t.)315 616 y Fl(M--)h Ft(starts)f(a)h(negativ)o(e)g(argumen) -o(t.)75 702 y Fs(universal-argument)e(\(\))315 756 y -Ft(This)g(is)h(another)e(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o -(t.)18 b(If)13 b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 -811 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us) -f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 866 +b(17)75 149 y Fs(yank)15 b(\(C-y\))315 204 y Ft(Y)l(ank)g(the)h(top)f +(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.) +75 276 y Fs(yank-pop)g(\(M-y\))315 331 y Ft(Rotate)i(the)h(kill-ring,)j +(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f +(this)h(if)f(the)h(prior)315 386 y(command)d(is)h Fs(yank)e +Ft(or)h Fs(yank-pop)p Ft(.)75 486 y Fh(1.4.5)30 b(Sp)r(ecifying)20 +b(Numeric)h(Argumen)n(ts)75 604 y Fs(digit-argument)13 +b(\()p Fl(M-0)p Fs(,)i Fl(M-1)p Fs(,)f(...)h Fl(M--)p +Fs(\))315 658 y Ft(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e +(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315 +713 y Fl(M--)h Ft(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75 +785 y Fs(universal-argument)e(\(\))315 840 y Ft(This)g(is)h(another)e +(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13 +b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 +895 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us) +f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 949 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g -(digits,)g(executing)g Fs(universal-argument)315 921 +(digits,)g(executing)g Fs(universal-argument)315 1004 y Ft(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h (otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315 -976 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)f -(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 -1030 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h +1059 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y) +f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 +1114 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h (the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 -1085 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f +1169 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f (executing)i(this)f(function)h(the)e(\014rst)h(time)315 -1140 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g +1223 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g (time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315 -1195 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f -(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1318 y Fh(1.4.6)30 +1278 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f +(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1378 y Fh(1.4.6)30 b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 1443 y Fs(complete)14 b(\()305 1441 y Fk(h)p -317 1414 74 2 v 317 1443 a Fj(T)m(AB)p 317 1450 V 389 -1441 a Fk(i)404 1443 y Fs(\))315 1497 y Ft(A)o(ttempt)c(to)h(p)q +b(ou)75 1496 y Fs(complete)14 b(\()305 1494 y Fk(h)p +317 1468 74 2 v 317 1496 a Fj(T)m(AB)p 317 1504 V 389 +1494 a Fk(i)404 1496 y Fs(\))315 1551 y Ft(A)o(ttempt)c(to)h(p)q (erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19 -b(The)11 b(actual)h(completion)315 1552 y(p)q(erformed)j(is)h +b(The)11 b(actual)h(completion)315 1606 y(p)q(erformed)j(is)h (application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename) -g(completion.)75 1637 y Fs(possible-completions)c(\(M-?\))315 -1692 y Ft(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(p)q(oin)o(t.)75 1777 y Fs(insert-completions)d(\(M-*\))315 -1832 y Ft(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) +g(completion.)75 1678 y Fs(possible-completions)c(\(M-?\))315 +1732 y Ft(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) +q(efore)h(p)q(oin)o(t.)75 1804 y Fs(insert-completions)d(\(M-*\))315 +1859 y Ft(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315 -1887 y(b)o(y)f Fs(possible-completions)p Ft(.)75 1972 -y Fs(menu-complete)e(\(\))315 2027 y Ft(Similar)g(to)f +1914 y(b)o(y)f Fs(possible-completions)p Ft(.)75 1985 +y Fs(menu-complete)e(\(\))315 2040 y Ft(Similar)g(to)f Fs(complete)p Ft(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i -(completed)f(with)h(a)e(single)j(matc)o(h)315 2082 y(from)k(the)h(list) +(completed)f(with)h(a)e(single)j(matc)o(h)315 2095 y(from)k(the)h(list) h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19 -b(execution)h(of)f Fs(menu-complete)315 2136 y Ft(steps)h(through)g +b(execution)h(of)f Fs(menu-complete)315 2150 y Ft(steps)h(through)g (the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f -(matc)o(h)f(in)i(turn.)315 2191 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g +(matc)o(h)f(in)i(turn.)315 2205 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g (of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f -(the)i(setting)315 2246 y(of)f Fs(bell-style)p Ft(\))e(and)i(the)g +(the)i(setting)315 2259 y(of)f Fs(bell-style)p Ft(\))e(and)i(the)g (original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g -Fi(n)i Ft(mo)o(v)o(es)e Fi(n)315 2301 y Ft(p)q(ositions)h(forw)o(ard)e +Fi(n)i Ft(mo)o(v)o(es)e Fi(n)315 2314 y Ft(p)q(ositions)h(forw)o(ard)e (in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g -(ma)o(y)g(b)q(e)h(used)g(to)315 2356 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h +(ma)o(y)g(b)q(e)h(used)g(to)315 2369 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h (through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)315 2408 y Fk(h)p 327 2382 V 327 -2410 a Fj(T)m(AB)p 327 2418 V 399 2408 a Fk(i)414 2410 +(b)q(e)h(b)q(ound)g(to)315 2422 y Fk(h)p 327 2396 V 327 +2424 a Fj(T)m(AB)p 327 2431 V 399 2422 a Fk(i)414 2424 y Ft(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)75 2496 y Fs(delete-char-or-list)e(\(\))315 2550 y Ft(Deletes)h(the)f(c)o (haracter)g(under)h(the)g(cursor)f(if)h(not)f(at)g(the)g(b)q(eginning)j @@ -3387,302 +3394,312 @@ b Ff(rl)p 216 149 18 3 v 25 w(forced)p 395 149 V 25 w(up)r(date)p 594 149 V 24 w(displa)n(y)25 b Fe(\()p Fs(void)p Fe(\))195 204 y Ft(F)l(orce)20 b(the)g(line)h(to)e(b)q(e)i(up)q(dated)f(and)g (redispla)o(y)o(ed,)i(whether)e(or)g(not)f(Readline)i(thinks)g(the)195 -259 y(screen)16 b(displa)o(y)g(is)g(correct.)1675 358 -y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 358 V -25 w(on)p 302 358 V 25 w(new)p 426 358 V 26 w(line)k -Fe(\()p Fs(void)p Fe(\))195 412 y Ft(T)l(ell)16 b(the)f(up)q(date)h +259 y(screen)16 b(displa)o(y)g(is)g(correct.)1675 352 +y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 352 V +25 w(on)p 302 352 V 25 w(new)p 426 352 V 26 w(line)k +Fe(\()p Fs(void)p Fe(\))195 407 y Ft(T)l(ell)16 b(the)f(up)q(date)h (functions)g(that)e(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h -(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 467 -y(ouputting)f(a)e(newline.)1675 566 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 566 V 25 w(on)p 302 566 V 25 -w(new)p 426 566 V 26 w(line)p 540 566 V 27 w(with)p 677 -566 V 26 w(prompt)h Fe(\()p Fs(void)p Fe(\))195 621 y +(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 462 +y(ouputting)f(a)e(newline.)1675 555 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 555 V 25 w(on)p 302 555 V 25 +w(new)p 426 555 V 26 w(line)p 540 555 V 27 w(with)p 677 +555 V 26 w(prompt)h Fe(\()p Fs(void)p Fe(\))195 610 y Ft(T)l(ell)13 b(the)g(up)q(date)f(functions)h(that)e(w)o(e)h(ha)o(v)o (e)g(mo)o(v)o(ed)f(on)o(to)g(a)h(new)g(line,)i(with)f -Fi(rl)p 1553 621 14 2 v 20 w(prompt)g Ft(already)195 -675 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f +Fi(rl)p 1553 610 14 2 v 20 w(prompt)g Ft(already)195 +665 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f (applications)i(that)e(w)o(an)o(t)f(to)h(output)g(the)g(prompt)g -(string)195 730 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to)e +(string)195 719 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to)e (kno)o(w)g(the)h(prompt)f(string)h(length)g(for)f(redispla)o(y)l(.)21 -b(It)195 785 y(should)16 b(b)q(e)g(used)g(after)e(setting)i -Fi(rl)p 795 785 V 20 w(already)p 960 785 V 20 w(prompted)p -Ft(.)1675 884 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p -216 884 18 3 v 25 w(reset)p 362 884 V 25 w(line)p 475 -884 V 28 w(state)j Fe(\()p Fs(void)p Fe(\))195 938 y +b(It)195 774 y(should)16 b(b)q(e)g(used)g(after)e(setting)i +Fi(rl)p 795 774 V 20 w(already)p 960 774 V 20 w(prompted)p +Ft(.)1675 867 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p +216 867 18 3 v 25 w(reset)p 362 867 V 25 w(line)p 475 +867 V 28 w(state)j Fe(\()p Fs(void)p Fe(\))195 922 y Ft(Reset)17 b(the)g(displa)o(y)i(state)d(to)h(a)g(clean)h(state)f(and)g (redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)195 -993 y(new)e(line.)1675 1092 y([F)l(unction])-1800 b Fg(int)20 -b Ff(rl)p 216 1092 V 25 w(crlf)j Fe(\()p Fs(void)p Fe(\))195 -1147 y Ft(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g -(next)g(screen)h(line.)1675 1245 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 1245 V 25 w(sho)n(w)p 364 1245 -V 25 w(c)n(har)j Fe(\()p Fs(int)15 b(c)p Fe(\))195 1300 +977 y(new)e(line.)1675 1070 y([F)l(unction])-1800 b Fg(int)20 +b Ff(rl)p 216 1070 V 25 w(crlf)j Fe(\()p Fs(void)p Fe(\))195 +1125 y Ft(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g +(next)g(screen)h(line.)1675 1218 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 1218 V 25 w(sho)n(w)p 364 1218 +V 25 w(c)n(har)j Fe(\()p Fs(int)15 b(c)p Fe(\))195 1273 y Ft(Displa)o(y)i(c)o(haracter)e Fi(c)20 b Ft(on)c Fs(rl_outstream)p Ft(.)21 b(If)c(Readline)g(has)f(not)g(b)q(een)i(set)e(to)f(displa)o(y)j -(meta)195 1355 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o +(meta)195 1328 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o (v)o(ert)d(meta)h(c)o(haracters)f(to)g(a)h(meta-pre\014xed)g(k)o(ey)g -(sequence.)195 1410 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g +(sequence.)195 1382 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g (applications)i(whic)o(h)f(wish)g(to)f(do)g(their)g(o)o(wn)g(redispla)o -(y)l(.)1675 1508 y([F)l(unction])-1800 b Fg(int)20 b -Ff(rl)p 216 1508 V 25 w(message)h Fe(\()p Fs(const)14 -b(char)h(*,)g(...)o Fe(\))195 1563 y Ft(The)c(argumen)o(ts)e(are)h(a)g +(y)l(.)1675 1475 y([F)l(unction])-1800 b Fg(int)20 b +Ff(rl)p 216 1475 V 25 w(message)h Fe(\()p Fs(const)14 +b(char)h(*,)g(...)o Fe(\))195 1530 y Ft(The)c(argumen)o(ts)e(are)h(a)g (format)f(string)h(as)g(w)o(ould)h(b)q(e)g(supplied)i(to)c -Fs(printf)p Ft(,)h(p)q(ossibly)i(con)o(taining)195 1618 +Fs(printf)p Ft(,)h(p)q(ossibly)i(con)o(taining)195 1585 y(con)o(v)o(ersion)22 b(sp)q(eci\014cations)i(suc)o(h)f(as)e(`)p Fs(\045d)p Ft(',)i(and)f(an)o(y)g(additional)h(argumen)o(ts)e -(necessary)i(to)195 1673 y(satisfy)d(the)h(con)o(v)o(ersion)g(sp)q +(necessary)i(to)195 1640 y(satisfy)d(the)h(con)o(v)o(ersion)g(sp)q (eci\014cations.)38 b(The)21 b(resulting)h(string)e(is)i(displa)o(y)o -(ed)g(in)f(the)g Fi(ec)o(ho)195 1728 y(area)p Ft(.)e(The)d(ec)o(ho)f +(ed)g(in)f(the)g Fi(ec)o(ho)195 1695 y(area)p Ft(.)e(The)d(ec)o(ho)f (area)g(is)g(also)g(used)h(to)f(displa)o(y)h(n)o(umeric)g(argumen)o(ts) -f(and)g(searc)o(h)g(strings.)1675 1826 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 1826 V 25 w(clear)p 359 1826 -V 27 w(message)g Fe(\()p Fs(void)p Fe(\))195 1881 y Ft(Clear)15 -b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1675 1980 -y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242 1980 -V 25 w(sa)n(v)n(e)p 370 1980 V 26 w(prompt)h Fe(\()p -Fs(void)p Fe(\))195 2034 y Ft(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)h +f(and)g(searc)o(h)g(strings.)1675 1788 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 1788 V 25 w(clear)p 359 1788 +V 27 w(message)g Fe(\()p Fs(void)p Fe(\))195 1843 y Ft(Clear)15 +b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1675 1936 +y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242 1936 +V 25 w(sa)n(v)n(e)p 370 1936 V 26 w(prompt)h Fe(\()p +Fs(void)p Fe(\))195 1991 y Ft(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)h (prompt)e(displa)o(y)i(state)e(in)h(preparation)f(for)g(displa)o(ying)j -(a)d(new)195 2089 y(message)15 b(in)h(the)f(message)g(area)f(with)i -Fs(rl_message\(\))p Ft(.)1675 2188 y([F)l(unction])-1800 -b Fg(void)20 b Ff(rl)p 242 2188 V 25 w(restore)p 441 -2188 V 25 w(prompt)g Fe(\()p Fs(void)p Fe(\))195 2243 +(a)d(new)195 2045 y(message)15 b(in)h(the)f(message)g(area)f(with)i +Fs(rl_message\(\))p Ft(.)1675 2138 y([F)l(unction])-1800 +b Fg(void)20 b Ff(rl)p 242 2138 V 25 w(restore)p 441 +2138 V 25 w(prompt)g Fe(\()p Fs(void)p Fe(\))195 2193 y Ft(Restore)g(the)i(lo)q(cal)g(Readline)h(prompt)e(displa)o(y)h(state) f(sa)o(v)o(ed)g(b)o(y)g(the)g(most)g(recen)o(t)g(call)i(to)195 -2297 y Fs(rl_save_prompt)p Ft(.)1675 2396 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 2396 V 25 w(expand)p 421 2396 +2248 y Fs(rl_save_prompt)p Ft(.)1675 2341 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 2341 V 25 w(expand)p 421 2341 V 25 w(prompt)h Fe(\()p Fs(char)14 b(*prompt)p Fe(\))195 -2451 y Ft(Expand)22 b(an)o(y)f(sp)q(ecial)i(c)o(haracter)e(sequences)h +2396 y Ft(Expand)22 b(an)o(y)f(sp)q(ecial)i(c)o(haracter)e(sequences)h (in)g Fi(prompt)g Ft(and)g(set)f(up)h(the)f(lo)q(cal)i(Readline)195 -2506 y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18 +2451 y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18 b(function)h(is)f(called)i(b)o(y)e Fs(readline\(\))p -Ft(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 2560 y(called)12 +Ft(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 2506 y(called)12 b(to)e(expand)h(the)g(primary)g(prompt)f(if)h(the)f Fs -(rl_on_new_line_with_prompt\(\))d Ft(function)195 2615 +(rl_on_new_line_with_prompt\(\))d Ft(function)195 2560 y(or)12 b Fs(rl_already_prompted)e Ft(v)m(ariable)k(is)g(used.)19 b(It)13 b(returns)g(the)f(n)o(um)o(b)q(er)i(of)e(visible)j(c)o -(haracters)195 2670 y(on)g(the)g(last)h(line)g(of)f(the)g(\(p)q -(ossibly)i(m)o(ulti-line\))g(prompt.)p eop +(haracters)195 2615 y(on)i(the)g(last)g(line)h(of)f(the)g(\(p)q +(ossibly)h(m)o(ulti-line\))h(prompt.)24 b(Applications)19 +b(ma)o(y)d(indicate)j(that)195 2670 y(the)14 b(prompt)f(con)o(tains)i +(c)o(haracters)e(that)g(tak)o(e)g(up)h(no)g(ph)o(ysical)i(screen)e +(space)g(when)h(displa)o(y)o(ed)p eop %%Page: 34 38 -34 37 bop 75 -58 a Ft(34)1299 b(GNU)15 b(Readline)h(Library)1675 -149 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 149 -18 3 v 25 w(set)p 312 149 V 26 w(prompt)g Fe(\()p Fs(const)14 -b(char)h(*prompt)p Fe(\))195 204 y Ft(Mak)o(e)e(Readline)i(use)e -Fi(prompt)h Ft(for)f(subsequen)o(t)h(redispla)o(y)l(.)21 -b(This)14 b(calls)g Fs(rl_expand_prompt\(\))195 259 y -Ft(to)h(expand)g(the)h(prompt)e(and)i(sets)f Fs(rl_prompt)f -Ft(to)g(the)h(result.)75 375 y Fh(2.4.7)30 b(Mo)r(difying)20 -b(T)-5 b(ext)1675 499 y Ft([F)l(unction])-1800 b Fg(int)20 -b Ff(rl)p 216 499 V 25 w(insert)p 383 499 V 26 w(text)k -Fe(\()p Fs(const)14 b(char)g(*text)p Fe(\))195 554 y -Ft(Insert)i Fi(text)g Ft(in)o(to)g(the)g(line)h(at)f(the)g(curren)o(t)f -(cursor)h(p)q(osition.)22 b(Returns)16 b(the)g(n)o(um)o(b)q(er)g(of)f -(c)o(har-)195 608 y(acters)g(inserted.)1675 704 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 704 V 25 w(delete)p 388 704 +34 37 bop 75 -58 a Ft(34)1299 b(GNU)15 b(Readline)h(Library)195 +149 y(b)o(y)k(brac)o(k)o(eting)h(a)f(sequence)i(of)e(suc)o(h)g(c)o +(haracters)g(with)h(the)g(sp)q(ecial)h(mark)o(ers)d Fs(RL_PROMPT_)195 +204 y(START_IGNORE)14 b Ft(and)h Fs(RL_PROMPT_END_IGNORE)e +Ft(\(declared)j(in)g(`)p Fs(readline.h)p Ft('.)j(This)d(ma)o(y)e(b)q(e) +195 259 y(used)i(to)e(em)o(b)q(ed)i(terminal-sp)q(eci\014c)i(escap)q(e) +e(sequences)h(in)f(prompts.)1675 355 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 355 18 3 v 25 w(set)p 312 355 +V 26 w(prompt)g Fe(\()p Fs(const)14 b(char)h(*prompt)p +Fe(\))195 410 y Ft(Mak)o(e)e(Readline)i(use)e Fi(prompt)h +Ft(for)f(subsequen)o(t)h(redispla)o(y)l(.)21 b(This)14 +b(calls)g Fs(rl_expand_prompt\(\))195 465 y Ft(to)h(expand)g(the)h +(prompt)e(and)i(sets)f Fs(rl_prompt)f Ft(to)g(the)h(result.)75 +580 y Fh(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1675 +704 y Ft([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 +704 V 25 w(insert)p 383 704 V 26 w(text)k Fe(\()p Fs(const)14 +b(char)g(*text)p Fe(\))195 759 y Ft(Insert)i Fi(text)g +Ft(in)o(to)g(the)g(line)h(at)f(the)g(curren)o(t)f(cursor)h(p)q +(osition.)22 b(Returns)16 b(the)g(n)o(um)o(b)q(er)g(of)f(c)o(har-)195 +814 y(acters)g(inserted.)1675 910 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 910 V 25 w(delete)p 388 910 V 27 w(text)k Fe(\()p Fs(int)14 b(start,)h(int)g(end)p -Fe(\))195 759 y Ft(Delete)k(the)g(text)g(b)q(et)o(w)o(een)g +Fe(\))195 965 y Ft(Delete)k(the)g(text)g(b)q(et)o(w)o(een)g Fi(start)g Ft(and)g Fi(end)i Ft(in)f(the)f(curren)o(t)f(line.)33 -b(Returns)18 b(the)h(n)o(um)o(b)q(er)g(of)195 814 y(c)o(haracters)14 -b(deleted.)1675 910 y([F)l(unction])-1800 b Fg(char)20 -b(*)f Ff(rl)p 287 910 V 26 w(cop)n(y)p 427 910 V 25 w(text)24 -b Fe(\()p Fs(int)15 b(start,)f(int)h(end)p Fe(\))195 -965 y Ft(Return)g(a)g(cop)o(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i -Fi(start)f Ft(and)g Fi(end)j Ft(in)e(the)f(curren)o(t)g(line.)1675 -1060 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 -1060 V 25 w(kill)p 316 1060 V 28 w(text)k Fe(\()p Fs(int)15 -b(start,)f(int)h(end)p Fe(\))195 1115 y Ft(Cop)o(y)i(the)g(text)f(b)q -(et)o(w)o(een)i Fi(start)f Ft(and)g Fi(end)i Ft(in)f(the)f(curren)o(t)g -(line)i(to)e(the)g(kill)i(ring,)e(app)q(ending)195 1170 -y(or)f(prep)q(ending)k(to)c(the)h(last)g(kill)i(if)e(the)g(last)g -(command)g(w)o(as)f(a)h(kill)i(command.)25 b(The)17 b(text)f(is)195 -1225 y(deleted.)26 b(If)17 b Fi(start)g Ft(is)g(less)g(than)g -Fi(end)p Ft(,)g(the)g(text)g(is)g(app)q(ended,)h(otherwise)f(prep)q -(ended.)27 b(If)17 b(the)195 1280 y(last)e(command)g(w)o(as)g(not)f(a)h -(kill,)i(a)e(new)g(kill)i(ring)f(slot)f(is)h(used.)1675 -1375 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 -1375 V 25 w(push)p 360 1375 V 25 w(macro)p 540 1375 V -23 w(input)j Fe(\()p Fs(char)15 b(*macro)p Fe(\))195 -1430 y Ft(Cause)f Fi(macro)i Ft(to)d(b)q(e)i(inserted)g(in)o(to)f(the)g -(line,)i(as)e(if)g(it)h(had)f(b)q(een)h(in)o(v)o(ok)o(ed)g(b)o(y)f(a)g -(k)o(ey)g(b)q(ound)h(to)195 1485 y(a)g(macro.)k(Not)c(esp)q(ecially)i -(useful;)f(use)g Fs(rl_insert_text\(\))d Ft(instead.)75 -1601 y Fh(2.4.8)30 b(Character)21 b(Input)1675 1725 y -Ft([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 1725 -V 25 w(read)p 351 1725 V 25 w(k)n(ey)k Fe(\()p Fs(void)p -Fe(\))195 1780 y Ft(Return)14 b(the)h(next)g(c)o(haracter)f(a)o(v)m -(ailable)i(from)e(Readline's)i(curren)o(t)f(input)g(stream.)k(This)d -(han-)195 1834 y(dles)e(input)g(inserted)h(in)o(to)e(the)g(input)h -(stream)f(via)g Fi(rl)p 1112 1834 14 2 v 21 w(p)q(ending)p -1289 1834 V 22 w(input)i Ft(\(see)e(Section)h(2.3)f([Read-)195 -1889 y(line)21 b(V)l(ariables],)g(page)f(24\))f(and)h +b(Returns)18 b(the)h(n)o(um)o(b)q(er)g(of)195 1019 y(c)o(haracters)14 +b(deleted.)1675 1115 y([F)l(unction])-1800 b Fg(char)20 +b(*)f Ff(rl)p 287 1115 V 26 w(cop)n(y)p 427 1115 V 25 +w(text)24 b Fe(\()p Fs(int)15 b(start,)f(int)h(end)p +Fe(\))195 1170 y Ft(Return)g(a)g(cop)o(y)g(of)g(the)g(text)f(b)q(et)o +(w)o(een)i Fi(start)f Ft(and)g Fi(end)j Ft(in)e(the)f(curren)o(t)g +(line.)1675 1266 y([F)l(unction])-1800 b Fg(int)20 b +Ff(rl)p 216 1266 V 25 w(kill)p 316 1266 V 28 w(text)k +Fe(\()p Fs(int)15 b(start,)f(int)h(end)p Fe(\))195 1321 +y Ft(Cop)o(y)i(the)g(text)f(b)q(et)o(w)o(een)i Fi(start)f +Ft(and)g Fi(end)i Ft(in)f(the)f(curren)o(t)g(line)i(to)e(the)g(kill)i +(ring,)e(app)q(ending)195 1375 y(or)f(prep)q(ending)k(to)c(the)h(last)g +(kill)i(if)e(the)g(last)g(command)g(w)o(as)f(a)h(kill)i(command.)25 +b(The)17 b(text)f(is)195 1430 y(deleted.)26 b(If)17 b +Fi(start)g Ft(is)g(less)g(than)g Fi(end)p Ft(,)g(the)g(text)g(is)g(app) +q(ended,)h(otherwise)f(prep)q(ended.)27 b(If)17 b(the)195 +1485 y(last)e(command)g(w)o(as)g(not)f(a)h(kill,)i(a)e(new)g(kill)i +(ring)f(slot)f(is)h(used.)1675 1581 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 1581 V 25 w(push)p 360 1581 +V 25 w(macro)p 540 1581 V 23 w(input)j Fe(\()p Fs(char)15 +b(*macro)p Fe(\))195 1636 y Ft(Cause)f Fi(macro)i Ft(to)d(b)q(e)i +(inserted)g(in)o(to)f(the)g(line,)i(as)e(if)g(it)h(had)f(b)q(een)h(in)o +(v)o(ok)o(ed)g(b)o(y)f(a)g(k)o(ey)g(b)q(ound)h(to)195 +1691 y(a)g(macro.)k(Not)c(esp)q(ecially)i(useful;)f(use)g +Fs(rl_insert_text\(\))d Ft(instead.)75 1806 y Fh(2.4.8)30 +b(Character)21 b(Input)1675 1930 y Ft([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 1930 V 25 w(read)p 351 1930 +V 25 w(k)n(ey)k Fe(\()p Fs(void)p Fe(\))195 1985 y Ft(Return)14 +b(the)h(next)g(c)o(haracter)f(a)o(v)m(ailable)i(from)e(Readline's)i +(curren)o(t)f(input)g(stream.)k(This)d(han-)195 2040 +y(dles)e(input)g(inserted)h(in)o(to)e(the)g(input)h(stream)f(via)g +Fi(rl)p 1112 2040 14 2 v 21 w(p)q(ending)p 1289 2040 +V 22 w(input)i Ft(\(see)e(Section)h(2.3)f([Read-)195 +2095 y(line)21 b(V)l(ariables],)g(page)f(24\))f(and)h Fs(rl_stuff_char\(\))p Ft(,)e(macros,)h(and)h(c)o(haracters)f(read)h -(from)195 1944 y(the)d(k)o(eyb)q(oard.)25 b(While)19 +(from)195 2149 y(the)d(k)o(eyb)q(oard.)25 b(While)19 b(w)o(aiting)e(for)f(input,)j(this)e(function)h(will)h(call)f(an)o(y)e -(function)i(assigned)195 1999 y(to)d(the)g Fs(rl_event_hook)e -Ft(v)m(ariable.)1675 2095 y([F)l(unction])-1800 b Fg(int)20 -b Ff(rl)p 216 2095 18 3 v 25 w(getc)k Fe(\()p Fs(FILE)14 -b(*stream)p Fe(\))195 2149 y Ft(Return)c(the)h(next)g(c)o(haracter)f(a) +(function)i(assigned)195 2204 y(to)d(the)g Fs(rl_event_hook)e +Ft(v)m(ariable.)1675 2300 y([F)l(unction])-1800 b Fg(int)20 +b Ff(rl)p 216 2300 18 3 v 25 w(getc)k Fe(\()p Fs(FILE)14 +b(*stream)p Fe(\))195 2355 y Ft(Return)c(the)h(next)g(c)o(haracter)f(a) o(v)m(ailable)i(from)e Fi(stream)p Ft(,)g(whic)o(h)i(is)f(assumed)f(to) -g(b)q(e)i(the)e(k)o(eyb)q(oard.)1675 2245 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 2245 V 25 w(stu\013)p 351 2245 -V 26 w(c)n(har)i Fe(\()p Fs(int)15 b(c)p Fe(\))195 2300 +g(b)q(e)i(the)e(k)o(eyb)q(oard.)1675 2451 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 2451 V 25 w(stu\013)p 351 2451 +V 26 w(c)n(har)i Fe(\()p Fs(int)15 b(c)p Fe(\))195 2506 y Ft(Insert)i Fi(c)i Ft(in)o(to)d(the)h(Readline)h(input)f(stream.)23 b(It)16 b(will)i(b)q(e)f Fs(")p Ft(read)p Fs(")g Ft(b)q(efore)f -(Readline)i(attempts)195 2355 y(to)13 b(read)g(c)o(haracters)g(from)f +(Readline)i(attempts)195 2560 y(to)13 b(read)g(c)o(haracters)g(from)f (the)i(terminal)g(with)g Fs(rl_read_key\(\))p Ft(.)j(Up)d(to)f(512)f(c) -o(haracters)h(ma)o(y)195 2410 y(b)q(e)j(pushed)g(bac)o(k.)k +o(haracters)h(ma)o(y)195 2615 y(b)q(e)j(pushed)g(bac)o(k.)k Fs(rl_stuff_char)14 b Ft(returns)h(1)g(if)h(the)f(c)o(haracter)g(w)o -(as)f(successfully)j(inserted;)195 2465 y(0)e(otherwise.)1675 -2560 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 -2560 V 25 w(execute)p 428 2560 V 27 w(next)j Fe(\()p -Fs(int)15 b(c)p Fe(\))195 2615 y Ft(Mak)o(e)i Fi(c)k -Ft(b)q(e)d(the)g(next)g(command)g(to)f(b)q(e)i(executed)f(when)h -Fs(rl_read_key\(\))d Ft(is)i(called.)29 b(This)195 2670 -y(sets)15 b Fi(rl)p 317 2670 14 2 v 20 w(p)q(ending)p -493 2670 V 22 w(input)p Ft(.)p eop +(as)f(successfully)j(inserted;)195 2670 y(0)e(otherwise.)p +eop %%Page: 35 39 35 38 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g (Readline)843 b(35)1675 149 y([F)l(unction])-1800 b Fg(int)20 -b Ff(rl)p 216 149 18 3 v 25 w(clear)p 359 149 V 27 w(p)r(ending)p -586 149 V 24 w(input)k Fe(\()p Fs(void)p Fe(\))195 204 -y Ft(Unset)d Fi(rl)p 364 204 14 2 v 20 w(p)q(ending)p -540 204 V 22 w(input)p Ft(,)i(e\013ectiv)o(ely)f(negating)f(the)g -(e\013ect)g(of)f(an)o(y)h(previous)g(call)h(to)e Fs(rl_)195 -259 y(execute_next\(\))p Ft(.)29 b(This)19 b(w)o(orks)f(only)h(if)h -(the)e(p)q(ending)j(input)f(has)f(not)f(already)h(b)q(een)h(read)195 -314 y(with)c Fs(rl_read_key\(\))p Ft(.)1675 404 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 404 18 3 v 25 w(set)p 312 404 -V 26 w(k)n(eyb)r(oard)p 569 404 V 24 w(input)p 726 404 -V 26 w(timeout)j Fe(\()p Fs(int)14 b(u)p Fe(\))195 459 -y Ft(While)21 b(w)o(aiting)g(for)e(k)o(eyb)q(oard)h(input)h(in)g -Fs(rl_read_key\(\))p Ft(,)e(Readline)i(will)h(w)o(ait)e(for)f -Fi(u)h Ft(mi-)195 514 y(croseconds)h(for)e(input)j(b)q(efore)f(calling) -h(an)o(y)e(function)h(assigned)g(to)f Fs(rl_event_hook)p -Ft(.)34 b(The)195 569 y(default)16 b(w)o(aiting)f(p)q(erio)q(d)i(is)e -(one-ten)o(th)h(of)e(a)h(second.)21 b(Returns)14 b(the)i(old)f(timeout) -h(v)m(alue.)75 679 y Fh(2.4.9)30 b(T)-5 b(erminal)20 -b(Managemen)n(t)1675 800 y Ft([F)l(unction])-1800 b Fg(void)20 -b Ff(rl)p 242 800 V 25 w(prep)p 381 800 V 25 w(terminal)j -Fe(\()p Fs(int)15 b(meta_flag)p Fe(\))195 855 y Ft(Mo)q(dify)22 +b Ff(rl)p 216 149 18 3 v 25 w(execute)p 428 149 V 27 +w(next)j Fe(\()p Fs(int)15 b(c)p Fe(\))195 204 y Ft(Mak)o(e)i +Fi(c)k Ft(b)q(e)d(the)g(next)g(command)g(to)f(b)q(e)i(executed)f(when)h +Fs(rl_read_key\(\))d Ft(is)i(called.)29 b(This)195 259 +y(sets)15 b Fi(rl)p 317 259 14 2 v 20 w(p)q(ending)p +493 259 V 22 w(input)p Ft(.)1675 349 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 349 18 3 v 25 w(clear)p 359 +349 V 27 w(p)r(ending)p 586 349 V 24 w(input)k Fe(\()p +Fs(void)p Fe(\))195 404 y Ft(Unset)d Fi(rl)p 364 404 +14 2 v 20 w(p)q(ending)p 540 404 V 22 w(input)p Ft(,)i(e\013ectiv)o +(ely)f(negating)f(the)g(e\013ect)g(of)f(an)o(y)h(previous)g(call)h(to)e +Fs(rl_)195 459 y(execute_next\(\))p Ft(.)29 b(This)19 +b(w)o(orks)f(only)h(if)h(the)e(p)q(ending)j(input)f(has)f(not)f +(already)h(b)q(een)h(read)195 514 y(with)c Fs(rl_read_key\(\))p +Ft(.)1675 604 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p +216 604 18 3 v 25 w(set)p 312 604 V 26 w(k)n(eyb)r(oard)p +569 604 V 24 w(input)p 726 604 V 26 w(timeout)j Fe(\()p +Fs(int)14 b(u)p Fe(\))195 659 y Ft(While)21 b(w)o(aiting)g(for)e(k)o +(eyb)q(oard)h(input)h(in)g Fs(rl_read_key\(\))p Ft(,)e(Readline)i(will) +h(w)o(ait)e(for)f Fi(u)h Ft(mi-)195 714 y(croseconds)h(for)e(input)j(b) +q(efore)f(calling)h(an)o(y)e(function)h(assigned)g(to)f +Fs(rl_event_hook)p Ft(.)34 b(The)195 768 y(default)16 +b(w)o(aiting)f(p)q(erio)q(d)i(is)e(one-ten)o(th)h(of)e(a)h(second.)21 +b(Returns)14 b(the)i(old)f(timeout)h(v)m(alue.)75 879 +y Fh(2.4.9)30 b(T)-5 b(erminal)20 b(Managemen)n(t)1675 +1000 y Ft([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p +242 1000 V 25 w(prep)p 381 1000 V 25 w(terminal)j Fe(\()p +Fs(int)15 b(meta_flag)p Fe(\))195 1055 y Ft(Mo)q(dify)22 b(the)f(terminal)h(settings)f(for)g(Readline's)h(use,)h(so)d -Fs(readline\(\))g Ft(can)i(read)f(a)g(single)195 910 +Fs(readline\(\))g Ft(can)i(read)f(a)g(single)195 1110 y(c)o(haracter)15 b(at)g(a)g(time)g(from)g(the)h(k)o(eyb)q(oard.)k(The) -c Fi(meta)p 1189 910 14 2 v 19 w(\015ag)j Ft(argumen)o(t)c(should)i(b)q -(e)f(non-zero)195 965 y(if)g(Readline)g(should)g(read)f(eigh)o(t-bit)i -(input.)1675 1055 y([F)l(unction])-1800 b Fg(void)20 -b Ff(rl)p 242 1055 18 3 v 25 w(deprep)p 439 1055 V 25 -w(terminal)j Fe(\()p Fs(void)p Fe(\))195 1110 y Ft(Undo)16 +c Fi(meta)p 1189 1110 14 2 v 19 w(\015ag)j Ft(argumen)o(t)c(should)i(b) +q(e)f(non-zero)195 1165 y(if)g(Readline)g(should)g(read)f(eigh)o(t-bit) +i(input.)1675 1255 y([F)l(unction])-1800 b Fg(void)20 +b Ff(rl)p 242 1255 18 3 v 25 w(deprep)p 439 1255 V 25 +w(terminal)j Fe(\()p Fs(void)p Fe(\))195 1310 y Ft(Undo)16 b(the)g(e\013ects)f(of)h Fs(rl_prep_terminal\(\))p Ft(,)d(lea)o(ving)k (the)e(terminal)i(in)g(the)e(state)g(in)i(whic)o(h)195 -1165 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i(to)d -Fs(rl_prep_terminal\(\))p Ft(.)1675 1255 y([F)l(unction])-1800 -b Fg(void)20 b Ff(rl)p 242 1255 V 25 w(tt)n(y)p 339 1255 -V 27 w(set)p 437 1255 V 25 w(default)p 635 1255 V 26 +1365 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i(to)d +Fs(rl_prep_terminal\(\))p Ft(.)1675 1455 y([F)l(unction])-1800 +b Fg(void)20 b Ff(rl)p 242 1455 V 25 w(tt)n(y)p 339 1455 +V 27 w(set)p 437 1455 V 25 w(default)p 635 1455 V 26 w(bindings)j Fe(\()p Fs(Keymap)14 b(kmap)p Fe(\))195 -1310 y Ft(Read)k(the)h(op)q(erating)f(system's)g(terminal)h(editing)h +1510 y Ft(Read)k(the)h(op)q(erating)f(system's)g(terminal)h(editing)h (c)o(haracters)e(\(as)f(w)o(ould)i(b)q(e)g(displa)o(y)o(ed)h(b)o(y)195 -1365 y Fs(stty)p Ft(\))14 b(to)h(their)h(Readline)g(equiv)m(alen)o(ts.) +1564 y Fs(stty)p Ft(\))14 b(to)h(their)h(Readline)g(equiv)m(alen)o(ts.) 22 b(The)15 b(bindings)i(are)e(p)q(erformed)g(in)h Fi(kmap)p -Ft(.)1675 1455 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p -242 1455 V 25 w(tt)n(y)p 339 1455 V 27 w(unset)p 501 -1455 V 25 w(default)p 699 1455 V 25 w(bindings)k Fe(\()p -Fs(Keymap)14 b(kmap)p Fe(\))195 1510 y Ft(Reset)h(the)h(bindings)i +Ft(.)1675 1655 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p +242 1655 V 25 w(tt)n(y)p 339 1655 V 27 w(unset)p 501 +1655 V 25 w(default)p 699 1655 V 25 w(bindings)k Fe(\()p +Fs(Keymap)14 b(kmap)p Fe(\))195 1710 y Ft(Reset)h(the)h(bindings)i (manipulated)f(b)o(y)f Fs(rl_tty_set_default_bindings)c -Ft(so)k(that)f(the)h(ter-)195 1564 y(minal)21 b(editing)g(c)o +Ft(so)k(that)f(the)h(ter-)195 1764 y(minal)21 b(editing)g(c)o (haracters)e(are)h(b)q(ound)g(to)f Fs(rl_insert)p Ft(.)33 -b(The)20 b(bindings)i(are)d(p)q(erformed)h(in)195 1619 -y Fi(kmap)p Ft(.)1675 1710 y([F)l(unction])-1800 b Fg(int)20 -b Ff(rl)p 216 1710 V 25 w(reset)p 362 1710 V 25 w(terminal)k +b(The)20 b(bindings)i(are)d(p)q(erformed)h(in)195 1819 +y Fi(kmap)p Ft(.)1675 1910 y([F)l(unction])-1800 b Fg(int)20 +b Ff(rl)p 216 1910 V 25 w(reset)p 362 1910 V 25 w(terminal)k Fe(\()p Fs(const)14 b(char)g(*terminal_name)p Fe(\))195 -1764 y Ft(Reinitialize)h(Readline's)d(idea)h(of)f(the)g(terminal)g -(settings)g(using)h Fi(terminal)p 1488 1764 14 2 v 21 -w(name)h Ft(as)e(the)g(termi-)195 1819 y(nal)k(t)o(yp)q(e)g(\(e.g.,)f -Fs(vt100)p Ft(\).)21 b(If)16 b Fi(terminal)p 876 1819 +1964 y Ft(Reinitialize)h(Readline's)d(idea)h(of)f(the)g(terminal)g +(settings)g(using)h Fi(terminal)p 1488 1964 14 2 v 21 +w(name)h Ft(as)e(the)g(termi-)195 2019 y(nal)k(t)o(yp)q(e)g(\(e.g.,)f +Fs(vt100)p Ft(\).)21 b(If)16 b Fi(terminal)p 876 2019 V 21 w(name)i Ft(is)f Fs(NULL)p Ft(,)e(the)h(v)m(alue)h(of)e(the)h -Fs(TERM)g Ft(en)o(vironmen)o(t)195 1874 y(v)m(ariable)h(is)e(used.)75 -1984 y Fh(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1675 -2106 y Ft([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p -242 2106 18 3 v 25 w(replace)p 443 2106 V 27 w(line)k +Fs(TERM)g Ft(en)o(vironmen)o(t)195 2074 y(v)m(ariable)h(is)e(used.)75 +2184 y Fh(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1675 +2306 y Ft([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p +242 2306 18 3 v 25 w(replace)p 443 2306 V 27 w(line)k Fe(\()p Fs(const)15 b(char)f(*text,)g(int)h(clear_undo)p -Fe(\))195 2161 y Ft(Replace)20 b(the)g(con)o(ten)o(ts)f(of)g +Fe(\))195 2360 y Ft(Replace)20 b(the)g(con)o(ten)o(ts)f(of)g Fs(rl_line_buffer)f Ft(with)i Fi(text)p Ft(.)33 b(The)20 -b(p)q(oin)o(t)g(and)g(mark)f(are)h(pre-)195 2215 y(serv)o(ed,)13 -b(if)g(p)q(ossible.)21 b(If)13 b Fi(clear)p 711 2215 +b(p)q(oin)o(t)g(and)g(mark)f(are)h(pre-)195 2415 y(serv)o(ed,)13 +b(if)g(p)q(ossible.)21 b(If)13 b Fi(clear)p 711 2415 14 2 v 21 w(undo)i Ft(is)e(non-zero,)h(the)e(undo)i(list)f(asso)q -(ciated)g(with)g(the)g(curren)o(t)195 2270 y(line)k(is)f(cleared.)1675 -2360 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 -2360 18 3 v 25 w(extend)p 409 2360 V 26 w(line)p 523 -2360 V 27 w(bu\013er)j Fe(\()p Fs(int)14 b(len)p Fe(\))195 -2415 y Ft(Ensure)h(that)g Fs(rl_line_buffer)e Ft(has)i(enough)g(space)h +(ciated)g(with)g(the)g(curren)o(t)195 2470 y(line)k(is)f(cleared.)1675 +2560 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 +2560 18 3 v 25 w(extend)p 409 2560 V 26 w(line)p 523 +2560 V 27 w(bu\013er)j Fe(\()p Fs(int)14 b(len)p Fe(\))195 +2615 y Ft(Ensure)h(that)g Fs(rl_line_buffer)e Ft(has)i(enough)g(space)h (to)e(hold)i Fi(len)g Ft(c)o(haracters,)e(p)q(ossibly)i(real-)195 -2470 y(lo)q(cating)g(it)f(if)h(necessary)l(.)1675 2560 -y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 2560 -V 25 w(initial)q(i)q(ze)26 b Fe(\()p Fs(void)p Fe(\))195 -2615 y Ft(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o -(ternal)h(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call) -195 2670 y(this;)d Fs(readline\(\))f Ft(calls)i(it)g(b)q(efore)f -(reading)h(an)o(y)f(input.)p eop +2670 y(lo)q(cating)g(it)f(if)h(necessary)l(.)p eop %%Page: 36 40 36 39 bop 75 -58 a Ft(36)1299 b(GNU)15 b(Readline)h(Library)1675 149 y([F)l(unction])-1800 b Fg(int)20 b Ff(rl)p 216 149 -18 3 v 25 w(ding)j Fe(\()p Fs(void)p Fe(\))195 204 y -Ft(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g(setting)f -(of)g Fs(bell-style)p Ft(.)1675 305 y([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 305 V 25 w(alphab)r(etic)25 -b Fe(\()p Fs(int)14 b(c)p Fe(\))195 360 y Ft(Return)h(1)g(if)g +18 3 v 25 w(initial)q(i)q(ze)26 b Fe(\()p Fs(void)p Fe(\))195 +204 y Ft(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o(ternal) +h(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call)195 +259 y(this;)d Fs(readline\(\))f Ft(calls)i(it)g(b)q(efore)f(reading)h +(an)o(y)f(input.)1675 343 y([F)l(unction])-1800 b Fg(int)20 +b Ff(rl)p 216 343 V 25 w(ding)j Fe(\()p Fs(void)p Fe(\))195 +398 y Ft(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g +(setting)f(of)g Fs(bell-style)p Ft(.)1675 482 y([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 482 V 25 w(alphab)r(etic)25 +b Fe(\()p Fs(int)14 b(c)p Fe(\))195 537 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1675 -462 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242 -462 V 25 w(displa)n(y)p 440 462 V 27 w(matc)n(h)p 621 -462 V 25 w(list)k Fe(\()p Fs(char)15 b(**matches,)e(int)i(len,)g(int)g -(max)p Fe(\))195 516 y Ft(A)i(con)o(v)o(enience)i(function)f(for)f +621 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242 +621 V 25 w(displa)n(y)p 440 621 V 27 w(matc)n(h)p 621 +621 V 25 w(list)k Fe(\()p Fs(char)15 b(**matches,)e(int)i(len,)g(int)g +(max)p Fe(\))195 676 y Ft(A)i(con)o(v)o(enience)i(function)f(for)f (displa)o(ying)i(a)e(list)h(of)e(strings)h(in)i(columnar)e(format)f(on) -h(Read-)195 571 y(line's)h(output)f(stream.)23 b Fs(matches)16 +h(Read-)195 731 y(line's)h(output)f(stream.)23 b Fs(matches)16 b Ft(is)h(the)g(list)h(of)e(strings,)h(in)g(argv)f(format,)g(suc)o(h)h -(as)f(a)h(list)g(of)195 626 y(completion)c(matc)o(hes.)19 +(as)f(a)h(list)g(of)195 786 y(completion)c(matc)o(hes.)19 b Fs(len)11 b Ft(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h Fs(matches)p Ft(,)f(and)g Fs(max)g Ft(is)g(the)h(length)f(of)195 -681 y(the)h(longest)g(string)g(in)h Fs(matches)p Ft(.)19 +841 y(the)h(longest)g(string)g(in)h Fs(matches)p Ft(.)19 b(This)13 b(function)h(uses)f(the)h(setting)f(of)f Fs -(print-completions-)195 736 y(horizontally)k Ft(to)i(select)h(ho)o(w)e +(print-completions-)195 895 y(horizontally)k Ft(to)i(select)h(ho)o(w)e (the)i(matc)o(hes)e(are)h(displa)o(y)o(ed)h(\(see)g(Section)g(1.3.1)d -([Readline)195 790 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137 -892 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f +([Readline)195 950 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137 +1034 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f (de\014ned)i(in)g Fs(chardefs.h)p Ft(.)k(Applications)d(should)75 -946 y(refrain)d(from)g(using)h(them.)1675 1048 y([F)l(unction])-1800 -b Fg(int)p 177 1048 V 45 w Ff(rl)p 241 1048 V 25 w(upp)r(ercase)p -516 1048 V 25 w(p)22 b Fe(\()p Fs(int)15 b(c)p Fe(\))195 -1102 y Ft(Return)g(1)g(if)g Fi(c)j Ft(is)e(an)f(upp)q(ercase)i(alphab)q -(etic)f(c)o(haracter.)1675 1204 y([F)l(unction])-1800 -b Fg(int)p 177 1204 V 45 w Ff(rl)p 241 1204 V 25 w(lo)n(w)n(ercase)p -499 1204 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195 -1258 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(lo)o(w)o(ercase)g -(alphab)q(etic)i(c)o(haracter.)1675 1360 y([F)l(unction])-1800 -b Fg(int)p 177 1360 V 45 w Ff(rl)p 241 1360 V 25 w(digit)p -379 1360 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195 -1414 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(n)o(umeric)h(c)o -(haracter.)1675 1516 y([F)l(unction])-1800 b Fg(int)p -177 1516 V 45 w Ff(rl)p 241 1516 V 25 w(to)p 317 1516 +1089 y(refrain)d(from)g(using)h(them.)1675 1174 y([F)l(unction])-1800 +b Fg(int)p 177 1174 V 45 w Ff(rl)p 241 1174 V 25 w(upp)r(ercase)p +516 1174 V 25 w(p)22 b Fe(\()p Fs(int)15 b(c)p Fe(\))195 +1228 y Ft(Return)g(1)g(if)g Fi(c)j Ft(is)e(an)f(upp)q(ercase)i(alphab)q +(etic)f(c)o(haracter.)1675 1313 y([F)l(unction])-1800 +b Fg(int)p 177 1313 V 45 w Ff(rl)p 241 1313 V 25 w(lo)n(w)n(ercase)p +499 1313 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195 +1367 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(lo)o(w)o(ercase)g +(alphab)q(etic)i(c)o(haracter.)1675 1452 y([F)l(unction])-1800 +b Fg(int)p 177 1452 V 45 w Ff(rl)p 241 1452 V 25 w(digit)p +379 1452 V 27 w(p)23 b Fe(\()p Fs(int)14 b(c)p Fe(\))195 +1507 y Ft(Return)h(1)g(if)g Fi(c)j Ft(is)e(a)f(n)o(umeric)h(c)o +(haracter.)1675 1591 y([F)l(unction])-1800 b Fg(int)p +177 1591 V 45 w Ff(rl)p 241 1591 V 25 w(to)p 317 1591 V 26 w(upp)r(er)21 b Fe(\()p Fs(int)15 b(c)p Fe(\))195 -1571 y Ft(If)d Fi(c)j Ft(is)d(a)g(lo)o(w)o(ercase)f(alphab)q(etic)j(c)o +1646 y Ft(If)d Fi(c)j Ft(is)d(a)g(lo)o(w)o(ercase)f(alphab)q(etic)j(c)o (haracter,)d(return)h(the)g(corresp)q(onding)h(upp)q(ercase)g(c)o -(haracter.)1675 1672 y([F)l(unction])-1800 b Fg(int)p -177 1672 V 45 w Ff(rl)p 241 1672 V 25 w(to)p 317 1672 +(haracter.)1675 1730 y([F)l(unction])-1800 b Fg(int)p +177 1730 V 45 w Ff(rl)p 241 1730 V 25 w(to)p 317 1730 V 26 w(lo)n(w)n(er)24 b Fe(\()p Fs(int)14 b(c)p Fe(\))195 -1727 y Ft(If)h Fi(c)i Ft(is)e(an)f(upp)q(ercase)i(alphab)q(etic)g(c)o +1785 y Ft(If)h Fi(c)i Ft(is)e(an)f(upp)q(ercase)i(alphab)q(etic)g(c)o (haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o(w)o(ercase)f(c)o -(harac-)195 1781 y(ter.)1675 1883 y([F)l(unction])-1800 -b Fg(int)p 177 1883 V 45 w Ff(rl)p 241 1883 V 25 w(digit)p -379 1883 V 27 w(v)m(alue)24 b Fe(\()p Fs(int)14 b(c)p -Fe(\))195 1937 y Ft(If)h Fi(c)k Ft(is)c(a)g(n)o(um)o(b)q(er,)g(return)g -(the)h(v)m(alue)g(it)g(represen)o(ts.)75 2059 y Fh(2.4.11)29 -b(Miscellaneous)22 b(F)-5 b(unctions)1675 2185 y Ft([F)l(unction])-1800 -b Fg(int)20 b Ff(rl)p 216 2185 V 25 w(macro)p 396 2185 +(harac-)195 1839 y(ter.)1675 1924 y([F)l(unction])-1800 +b Fg(int)p 177 1924 V 45 w Ff(rl)p 241 1924 V 25 w(digit)p +379 1924 V 27 w(v)m(alue)24 b Fe(\()p Fs(int)14 b(c)p +Fe(\))195 1979 y Ft(If)h Fi(c)k Ft(is)c(a)g(n)o(um)o(b)q(er,)g(return)g +(the)h(v)m(alue)g(it)g(represen)o(ts.)75 2083 y Fh(2.4.11)29 +b(Miscellaneous)22 b(F)-5 b(unctions)1675 2202 y Ft([F)l(unction])-1800 +b Fg(int)20 b Ff(rl)p 216 2202 V 25 w(macro)p 396 2202 V 24 w(bind)j Fe(\()p Fs(const)14 b(char)h(*keyseq,)f(const)g(char)h -(*macro,)f(Keymap)283 2240 y(map)p Fe(\))195 2295 y Ft(Bind)f(the)f(k)o +(*macro,)f(Keymap)283 2257 y(map)p Fe(\))195 2312 y Ft(Bind)f(the)f(k)o (ey)f(sequence)i Fi(k)o(eyseq)g Ft(to)e(in)o(v)o(ok)o(e)g(the)h(macro)f Fi(macro)p Ft(.)18 b(The)12 b(binding)h(is)f(p)q(erformed)g(in)195 -2350 y Fi(map)p Ft(.)19 b(When)14 b Fi(k)o(eyseq)h Ft(is)f(in)o(v)o(ok) +2367 y Fi(map)p Ft(.)19 b(When)14 b Fi(k)o(eyseq)h Ft(is)f(in)o(v)o(ok) o(ed,)g(the)g Fi(macro)i Ft(will)f(b)q(e)f(inserted)h(in)o(to)f(the)g -(line.)21 b(This)14 b(function)195 2404 y(is)i(deprecated;)f(use)h +(line.)21 b(This)14 b(function)195 2421 y(is)i(deprecated;)f(use)h Fs(rl_generic_bind\(\))d Ft(instead.)1675 2506 y([F)l(unction])-1800 b Fg(void)20 b Ff(rl)p 242 2506 V 25 w(macro)p 422 2506 V 24 w(dump)r(er)g Fe(\()p Fs(int)15 b(readable)p Fe(\))195 @@ -4318,180 +4335,221 @@ b(char)g(*)f Ff(rl)p 437 149 18 3 v 26 w(completer)p (for)g Fs(rl_complete_)195 259 y(internal\(\))p Ft(.)18 b(The)e(default)g(list)g(is)f(the)h(v)m(alue)g(of)f Fs (rl_basic_word_break_chara)o(cters)p Ft(.)1685 355 y([V)l(ariable]) --1799 b Fg(const)20 b(char)g(*)f Ff(rl)p 437 355 V 26 -w(completer)p 711 355 V 25 w(quote)p 875 355 V 25 w(c)n(haracters)195 -410 y Ft(A)e(list)h(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)g(used) -h(to)e(quote)h(a)f(substring)h(of)g(the)g(line.)26 b(Completion)195 -465 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)g(substring,)h(and)f(within)i -(the)e(substring)g Fs(rl_completer_word_break_)195 519 +-1799 b Fg(rl_cpvfunc_t)21 b(*)e Ff(rl)p 496 355 V 26 +w(completion)p 796 355 V 26 w(w)n(ord)p 946 355 V 25 +w(break)p 1111 355 V 25 w(ho)r(ok)195 410 y Ft(If)d(non-zero,)g(this)g +(is)g(the)g(address)g(of)f(a)h(function)g(to)f(call)i(when)g(Readline)g +(is)f(deciding)i(where)195 465 y(to)f(separate)f(w)o(ords)h(for)f(w)o +(ord)g(completion.)27 b(It)18 b(should)g(return)f(a)g(c)o(haracter)f +(string)h(lik)o(e)h Fs(rl_)195 519 y(completer_word_break_chara)o +(cters)13 b Ft(to)j(b)q(e)h(used)g(to)f(p)q(erform)g(the)h(curren)o(t)f +(completion.)195 574 y(The)d(function)g(ma)o(y)e(c)o(ho)q(ose)i(to)f +(set)g Fs(rl_completer_word_break_)o(charact)o(ers)d +Ft(itself.)20 b(If)13 b(the)195 629 y(function)j(returns)f +Fs(NULL)p Ft(,)f Fs(rl_completer_word_break_chara)o(cters)e +Ft(is)k(used.)1685 725 y([V)l(ariable])-1799 b Fg(const)20 +b(char)g(*)f Ff(rl)p 437 725 V 26 w(completer)p 711 725 +V 25 w(quote)p 875 725 V 25 w(c)n(haracters)195 780 y +Ft(A)e(list)h(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)g(used)h(to)e +(quote)h(a)f(substring)h(of)g(the)g(line.)26 b(Completion)195 +834 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)g(substring,)h(and)f(within)i +(the)e(substring)g Fs(rl_completer_word_break_)195 889 y(characters)j Ft(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g (unless)i(they)e(also)h(app)q(ear)g(within)h(this)195 -574 y(list.)1685 670 y([V)l(ariable])-1799 b Fg(const)20 -b(char)g(*)f Ff(rl)p 437 670 V 26 w(\014lename)p 671 -670 V 24 w(quote)p 834 670 V 26 w(c)n(haracters)195 725 -y Ft(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g(\014lename)h -(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f(they)195 -780 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21 +944 y(list.)1685 1040 y([V)l(ariable])-1799 b Fg(const)20 +b(char)g(*)f Ff(rl)p 437 1040 V 26 w(\014lename)p 671 +1040 V 24 w(quote)p 834 1040 V 26 w(c)n(haracters)195 +1095 y Ft(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g +(\014lename)h(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f +(they)195 1149 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21 b(The)16 b(default)g(is)f(the)h(n)o(ull)g(string.)1685 -875 y([V)l(ariable])-1799 b Fg(const)20 b(char)g(*)f -Ff(rl)p 437 875 V 26 w(sp)r(ecial)p 629 875 V 26 w(pre\014xes)195 -930 y Ft(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f +1245 y([V)l(ariable])-1799 b Fg(const)20 b(char)g(*)f +Ff(rl)p 437 1245 V 26 w(sp)r(ecial)p 629 1245 V 26 w(pre\014xes)195 +1300 y Ft(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f (break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g(in)h -Fi(text)f Ft(when)195 985 y(it)f(is)f(passed)h(to)f(the)g(completion)h +Fi(text)f Ft(when)195 1355 y(it)f(is)f(passed)h(to)f(the)g(completion)h (function.)20 b(Programs)11 b(can)h(use)h(this)g(to)f(help)h(determine) -h(what)195 1040 y(kind)i(of)e(completing)i(to)e(do.)19 +h(what)195 1410 y(kind)i(of)e(completing)i(to)e(do.)19 b(F)l(or)14 b(instance,)i(Bash)e(sets)h(this)g(v)m(ariable)h(to)e -Fs(")p Ft($)p Fs(@")g Ft(so)g(that)g(it)h(can)195 1095 +Fs(")p Ft($)p Fs(@")g Ft(so)g(that)g(it)h(can)195 1465 y(complete)h(shell)h(v)m(ariables)f(and)g(hostnames.)1685 -1191 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 -1191 V 25 w(completion)p 515 1191 V 26 w(query)p 683 -1191 V 25 w(items)195 1245 y Ft(Up)e(to)g(this)g(man)o(y)g(items)g +1560 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 +1560 V 25 w(completion)p 515 1560 V 26 w(query)p 683 +1560 V 25 w(items)195 1615 y Ft(Up)e(to)g(this)g(man)o(y)g(items)g (will)i(b)q(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)e(a)h(p)q -(ossible-completions)j(call.)195 1300 y(After)14 b(that,)f(w)o(e)h(ask) +(ossible-completions)j(call.)195 1670 y(After)14 b(that,)f(w)o(e)h(ask) g(the)h(user)f(if)h(she)f(is)h(sure)g(she)f(w)o(an)o(ts)f(to)h(see)h -(them)f(all.)20 b(The)15 b(default)g(v)m(alue)195 1355 -y(is)h(100.)1685 1451 y([V)l(ariable])-1799 b Fg(int)20 -b Ff(rl)p 216 1451 V 25 w(completion)p 515 1451 V 26 -w(app)r(end)p 725 1451 V 24 w(c)n(haracter)195 1506 y +(them)f(all.)20 b(The)15 b(default)g(v)m(alue)195 1725 +y(is)h(100.)1685 1821 y([V)l(ariable])-1799 b Fg(int)20 +b Ff(rl)p 216 1821 V 25 w(completion)p 515 1821 V 26 +w(app)r(end)p 725 1821 V 24 w(c)n(haracter)195 1875 y Ft(When)d(a)f(single)i(completion)g(alternativ)o(e)f(matc)o(hes)f(at)g -(the)h(end)g(of)f(the)h(command)f(line,)j(this)195 1560 +(the)h(end)g(of)f(the)h(command)f(line,)j(this)195 1930 y(c)o(haracter)10 b(is)h(app)q(ended)i(to)d(the)g(inserted)i (completion)g(text.)18 b(The)11 b(default)g(is)g(a)g(space)g(c)o -(haracter)195 1615 y(\(`)j('\).)42 b(Setting)23 b(this)g(to)f(the)h(n)o +(haracter)195 1985 y(\(`)j('\).)42 b(Setting)23 b(this)g(to)f(the)h(n)o (ull)h(c)o(haracter)e(\(`)p Fs(\\0)p Ft('\))f(prev)o(en)o(ts)i(an)o -(ything)f(b)q(eing)i(app)q(ended)195 1670 y(automatically)l(.)32 +(ything)f(b)q(eing)i(app)q(ended)195 2040 y(automatically)l(.)32 b(This)19 b(can)g(b)q(e)h(c)o(hanged)f(in)g(application-sp)q(eci)q -(\014c)j(completion)e(functions)g(to)195 1725 y(pro)o(vide)g(the)g +(\014c)j(completion)e(functions)g(to)195 2095 y(pro)o(vide)g(the)g (\\most)f(sensible)j(w)o(ord)d(separator)g(c)o(haracter")g(according)h -(to)f(an)h(application-)195 1780 y(sp)q(eci\014c)d(command)e(line)i -(syn)o(tax)d(sp)q(eci\014cation.)1685 1875 y([V)l(ariable])-1799 -b Fg(int)20 b Ff(rl)p 216 1875 V 25 w(completion)p 515 -1875 V 26 w(suppress)p 756 1875 V 23 w(app)r(end)195 -1930 y Ft(If)d(non-zero,)g Fi(rl)p 474 1930 14 2 v 20 -w(completion)p 710 1930 V 21 w(app)q(end)p 875 1930 V +(to)f(an)h(application-)195 2149 y(sp)q(eci\014c)d(command)e(line)i +(syn)o(tax)d(sp)q(eci\014cation.)1685 2245 y([V)l(ariable])-1799 +b Fg(int)20 b Ff(rl)p 216 2245 V 25 w(completion)p 515 +2245 V 26 w(suppress)p 756 2245 V 23 w(app)r(end)195 +2300 y Ft(If)d(non-zero,)g Fi(rl)p 474 2300 14 2 v 20 +w(completion)p 710 2300 V 21 w(app)q(end)p 875 2300 V 22 w(c)o(haracter)i Ft(is)e(not)f(app)q(ended)i(to)e(matc)o(hes)h(at)f -(the)g(end)195 1985 y(of)d(the)h(command)g(line,)h(as)f(describ)q(ed)h +(the)g(end)195 2355 y(of)d(the)h(command)g(line,)h(as)f(describ)q(ed)h (ab)q(o)o(v)o(e.)k(It)14 b(is)h(set)e(to)g(0)h(b)q(efore)g(an)o(y)f -(application-sp)q(eci)q(\014c)195 2040 y(completion)j(function)g(is)g +(application-sp)q(eci)q(\014c)195 2410 y(completion)j(function)g(is)g (called,)g(and)g(ma)o(y)e(only)i(b)q(e)g(c)o(hanged)f(within)i(suc)o(h) -e(a)g(function.)1685 2136 y([V)l(ariable])-1799 b Fg(int)20 -b Ff(rl)p 216 2136 18 3 v 25 w(completion)p 515 2136 -V 26 w(mark)p 672 2136 V 24 w(symlink)p 890 2136 V 25 -w(dirs)195 2191 y Ft(If)c(non-zero,)g(a)g(slash)g(will)i(b)q(e)e(app)q -(ended)i(to)d(completed)i(\014lenames)g(that)e(are)g(sym)o(b)q(olic)j -(links)195 2245 y(to)11 b(directory)i(names,)f(sub)s(ject)g(to)f(the)i -(v)m(alue)g(of)f(the)g(user-settable)g Fi(mark-directories)j -Ft(v)m(ariable.)195 2300 y(This)f(v)m(ariable)h(exists)f(so)g(that)f -(application-sp)q(eci\014c)k(completion)e(functions)f(can)g(o)o(v)o -(erride)g(the)195 2355 y(user's)21 b(global)h(preference)g(\(set)e(via) -i(the)f Fi(mark-symlink)o(ed-directories)k Ft(Readline)e(v)m(ariable\)) -195 2410 y(if)c(appropriate.)31 b(This)19 b(v)m(ariable)h(is)g(set)e -(to)g(the)h(user's)g(preference)h(b)q(efore)f(an)o(y)f(application-)195 -2465 y(sp)q(eci\014c)g(completion)f(function)f(is)h(called,)g(so)e -(unless)i(that)e(function)i(mo)q(di\014es)g(the)f(v)m(alue,)h(the)195 -2519 y(user's)e(preferences)h(are)f(honored.)1685 2615 -y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 2615 -V 25 w(ignore)p 396 2615 V 25 w(completion)p 695 2615 -V 26 w(duplicates)195 2670 y Ft(If)15 b(non-zero,)h(then)f(duplicates)i -(in)f(the)f(matc)o(hes)g(are)g(remo)o(v)o(ed.)k(The)d(default)g(is)f -(1.)p eop +e(a)g(function.)1685 2506 y([V)l(ariable])-1799 b Fg(int)20 +b Ff(rl)p 216 2506 18 3 v 25 w(completion)p 515 2506 +V 26 w(quote)p 680 2506 V 25 w(c)n(haracter)195 2560 +y Ft(When)e(Readline)i(is)e(completing)i(quoted)e(text,)g(as)f +(delimited)k(b)o(y)d(one)g(of)g(the)g(c)o(haracters)f(in)195 +2615 y Fi(rl)p 228 2615 14 2 v 20 w(completer)p 442 2615 +V 21 w(quote)p 573 2615 V 20 w(c)o(haracters)p Ft(,)i(it)h(sets)f(this) +h(v)m(ariable)h(to)e(the)h(quoting)f(c)o(haracter)g(found.)195 +2670 y(This)d(is)f(set)g(b)q(efore)h(an)o(y)f(application-sp)q +(eci\014c)k(completion)d(function)g(is)g(called.)p eop %%Page: 46 50 46 49 bop 75 -58 a Ft(46)1299 b(GNU)15 b(Readline)h(Library)1685 149 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 149 -18 3 v 25 w(\014lename)p 449 149 V 25 w(completion)p -748 149 V 26 w(desired)195 204 y Ft(Non-zero)c(means)g(that)f(the)h +18 3 v 25 w(completion)p 515 149 V 26 w(suppress)p 756 +149 V 23 w(quote)195 204 y Ft(If)c(non-zero,)h(Readline)g(do)q(es)g +(not)e(app)q(end)j(a)d(matc)o(hing)i(quote)f(c)o(haracter)f(when)i(p)q +(erforming)195 259 y(completion)c(on)f(a)f(quoted)h(string.)19 +b(It)11 b(is)i(set)e(to)g(0)h(b)q(efore)g(an)o(y)f(application-sp)q +(eci)q(\014c)k(completion)195 314 y(function)h(is)g(called,)g(and)g(ma) +o(y)e(only)i(b)q(e)g(c)o(hanged)f(within)i(suc)o(h)e(a)g(function.)1685 +400 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 400 +V 25 w(completion)p 515 400 V 26 w(found)p 684 400 V +24 w(quote)195 455 y Ft(When)c(Readline)h(is)g(completing)g(quoted)e +(text,)h(it)g(sets)f(this)h(v)m(ariable)i(to)d(a)g(non-zero)h(v)m(alue) +h(if)195 510 y(the)11 b(w)o(ord)e(b)q(eing)j(completed)g(con)o(tains)e +(or)h(is)g(delimited)h(b)o(y)f(an)o(y)f(quoting)h(c)o(haracters,)f +(including)195 564 y(bac)o(kslashes.)20 b(This)c(is)g(set)f(b)q(efore)g +(an)o(y)g(application-sp)q(eci\014)q(c)j(completion)e(function)g(is)g +(called.)1685 650 y([V)l(ariable])-1799 b Fg(int)20 b +Ff(rl)p 216 650 V 25 w(completion)p 515 650 V 26 w(mark)p +672 650 V 24 w(symlink)p 890 650 V 25 w(dirs)195 705 +y Ft(If)c(non-zero,)g(a)g(slash)g(will)i(b)q(e)e(app)q(ended)i(to)d +(completed)i(\014lenames)g(that)e(are)g(sym)o(b)q(olic)j(links)195 +760 y(to)11 b(directory)i(names,)f(sub)s(ject)g(to)f(the)i(v)m(alue)g +(of)f(the)g(user-settable)g Fi(mark-directories)j Ft(v)m(ariable.)195 +815 y(This)f(v)m(ariable)h(exists)f(so)g(that)f(application-sp)q +(eci\014c)k(completion)e(functions)f(can)g(o)o(v)o(erride)g(the)195 +870 y(user's)21 b(global)h(preference)g(\(set)e(via)i(the)f +Fi(mark-symlink)o(ed-directories)k Ft(Readline)e(v)m(ariable\))195 +924 y(if)c(appropriate.)31 b(This)19 b(v)m(ariable)h(is)g(set)e(to)g +(the)h(user's)g(preference)h(b)q(efore)f(an)o(y)f(application-)195 +979 y(sp)q(eci\014c)g(completion)f(function)f(is)h(called,)g(so)e +(unless)i(that)e(function)i(mo)q(di\014es)g(the)f(v)m(alue,)h(the)195 +1034 y(user's)e(preferences)h(are)f(honored.)1685 1120 +y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 1120 +V 25 w(ignore)p 396 1120 V 25 w(completion)p 695 1120 +V 26 w(duplicates)195 1175 y Ft(If)15 b(non-zero,)h(then)f(duplicates)i +(in)f(the)f(matc)o(hes)g(are)g(remo)o(v)o(ed.)k(The)d(default)g(is)f +(1.)1685 1261 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p +216 1261 V 25 w(\014lename)p 449 1261 V 25 w(completion)p +748 1261 V 26 w(desired)195 1316 y Ft(Non-zero)c(means)g(that)f(the)h (results)g(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(treated)e(as)g -(\014lenames.)23 b(This)195 259 y(is)d Fn(always)k Ft(zero)c(when)g +(\014lenames.)23 b(This)195 1371 y(is)d Fn(always)k Ft(zero)c(when)g (completion)h(is)g(attempted,)f(and)g(can)g(only)h(b)q(e)g(c)o(hanged)f -(within)h(an)195 314 y(application-sp)q(eci\014)q(c)h(completion)f +(within)h(an)195 1425 y(application-sp)q(eci\014)q(c)h(completion)f (function.)35 b(If)20 b(it)f(is)i(set)e(to)g(a)h(non-zero)g(v)m(alue)h -(b)o(y)e(suc)o(h)h(a)195 369 y(function,)12 b(directory)g(names)f(ha)o +(b)o(y)e(suc)o(h)h(a)195 1480 y(function,)12 b(directory)g(names)f(ha)o (v)o(e)g(a)f(slash)i(app)q(ended)h(and)e(Readline)h(attempts)f(to)f -(quote)h(com-)195 423 y(pleted)19 b(\014lenames)f(if)g(they)g(con)o +(quote)h(com-)195 1535 y(pleted)19 b(\014lenames)f(if)g(they)g(con)o (tain)g(an)o(y)f(c)o(haracters)f(in)j Fs(rl_filename_quote_charact)o -(ers)195 478 y Ft(and)c Fs(rl_filename_quoting_desired)d -Ft(is)k(set)f(to)f(a)h(non-zero)g(v)m(alue.)1685 570 -y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 570 V -25 w(\014lename)p 449 570 V 25 w(quoting)p 663 570 V -26 w(desired)195 625 y Ft(Non-zero)14 b(means)g(that)f(the)i(results)f -(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h(double)g -(quotes)195 680 y(\(or)20 b(an)i(application-sp)q(eci\014c)i(quoting)e -(mec)o(hanism\))f(if)h(the)f(completed)i(\014lename)f(con)o(tains)195 -735 y(an)o(y)13 b(c)o(haracters)h(in)g Fs(rl_filename_quote_chars)p -Ft(.)i(This)f(is)f Fn(always)k Ft(non-zero)c(when)g(comple-)195 -790 y(tion)g(is)g(attempted,)g(and)g(can)g(only)g(b)q(e)g(c)o(hanged)h -(within)g(an)e(application-sp)q(eci)q(\014c)k(completion)195 -844 y(function.)i(The)11 b(quoting)g(is)g(e\013ected)f(via)h(a)f(call)i -(to)e(the)h(function)g(p)q(oin)o(ted)g(to)f(b)o(y)h Fs(rl_filename_)195 -899 y(quoting_function)p Ft(.)1685 991 y([V)l(ariable])-1799 -b Fg(int)20 b Ff(rl)p 216 991 V 25 w(attempted)p 500 -991 V 25 w(completion)p 799 991 V 26 w(o)n(v)n(er)195 -1046 y Ft(If)47 b(an)g(application-sp)q(eci\014)q(c)j(completion)e -(function)g(assigned)f(to)g Fs(rl_attempted_)195 1101 -y(completion_function)24 b Ft(sets)i(this)h(v)m(ariable)h(to)e(a)g -(non-zero)h(v)m(alue,)j(Readline)e(will)g(not)195 1156 -y(p)q(erform)15 b(its)g(default)g(\014lename)h(completion)g(ev)o(en)f -(if)g(the)g(application's)h(completion)g(function)195 -1210 y(returns)f(no)g(matc)o(hes.)20 b(It)15 b(should)h(b)q(e)g(set)f -(only)h(b)o(y)f(an)g(application's)h(completion)h(function.)1685 -1303 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 -1303 V 25 w(completion)p 515 1303 V 26 w(t)n(yp)r(e)195 -1357 y Ft(Set)e(to)e(a)i(c)o(haracter)f(describing)i(the)e(t)o(yp)q(e)h -(of)f(completion)i(Readline)g(is)f(curren)o(tly)g(attempt-)195 -1412 y(ing;)g(see)f(the)f(description)i(of)f Fs -(rl_complete_internal\(\))c Ft(\(see)k(Section)h(2.6.2)d([Completion) -195 1467 y(F)l(unctions],)k(page)f(42\))g(for)f(the)i(list)g(of)f(c)o -(haracters.)28 b(This)19 b(is)g(set)f(to)g(the)g(appropriate)h(v)m -(alue)195 1522 y(b)q(efore)d(an)o(y)g(application-sp)q(eci\014c)j -(completion)e(function)g(is)f(called,)h(allo)o(wing)g(suc)o(h)f -(functions)195 1577 y(to)f(presen)o(t)g(the)g(same)g(in)o(terface)g(as) -g Fs(rl_complete\(\))p Ft(.)1685 1669 y([V)l(ariable])-1799 -b Fg(int)20 b Ff(rl)p 216 1669 V 25 w(inhibit)p 404 1669 -V 28 w(completion)195 1724 y Ft(If)14 b(this)h(v)m(ariable)g(is)g -(non-zero,)f(completion)i(is)e(inhibited.)22 b(The)15 -b(completion)g(c)o(haracter)e(will)j(b)q(e)195 1778 y(inserted)g(as)f -(an)o(y)g(other)g(b)q(ound)h(to)e Fs(self-insert)p Ft(.)75 -1890 y Fh(2.6.4)30 b(A)21 b(Short)f(Completion)g(Example)137 -2012 y Ft(Here)11 b(is)f(a)g(small)h(application)h(demonstrating)e(the) -g(use)h(of)e(the)i(GNU)f(Readline)h(library)l(.)19 b(It)11 -b(is)f(called)75 2067 y Fs(fileman)p Ft(,)17 b(and)h(the)g(source)g(co) -q(de)g(resides)h(in)f(`)p Fs(examples/fileman.c)p Ft('.)25 -b(This)18 b(sample)g(application)75 2122 y(pro)o(vides)c(completion)g -(of)e(command)h(names,)g(line)i(editing)g(features,)d(and)i(access)f -(to)f(the)h(history)h(list.)p eop +(ers)195 1590 y Ft(and)c Fs(rl_filename_quoting_desired)d +Ft(is)k(set)f(to)f(a)h(non-zero)g(v)m(alue.)1685 1676 +y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p 216 1676 +V 25 w(\014lename)p 449 1676 V 25 w(quoting)p 663 1676 +V 26 w(desired)195 1731 y Ft(Non-zero)14 b(means)g(that)f(the)i +(results)f(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h +(double)g(quotes)195 1785 y(\(or)20 b(an)i(application-sp)q(eci\014c)i +(quoting)e(mec)o(hanism\))f(if)h(the)f(completed)i(\014lename)f(con)o +(tains)195 1840 y(an)o(y)13 b(c)o(haracters)h(in)g Fs +(rl_filename_quote_chars)p Ft(.)i(This)f(is)f Fn(always)k +Ft(non-zero)c(when)g(comple-)195 1895 y(tion)g(is)g(attempted,)g(and)g +(can)g(only)g(b)q(e)g(c)o(hanged)h(within)g(an)e(application-sp)q(eci)q +(\014c)k(completion)195 1950 y(function.)i(The)11 b(quoting)g(is)g +(e\013ected)f(via)h(a)f(call)i(to)e(the)h(function)g(p)q(oin)o(ted)g +(to)f(b)o(y)h Fs(rl_filename_)195 2005 y(quoting_function)p +Ft(.)1685 2091 y([V)l(ariable])-1799 b Fg(int)20 b Ff(rl)p +216 2091 V 25 w(attempted)p 500 2091 V 25 w(completion)p +799 2091 V 26 w(o)n(v)n(er)195 2146 y Ft(If)47 b(an)g(application-sp)q +(eci\014)q(c)j(completion)e(function)g(assigned)f(to)g +Fs(rl_attempted_)195 2200 y(completion_function)24 b +Ft(sets)i(this)h(v)m(ariable)h(to)e(a)g(non-zero)h(v)m(alue,)j +(Readline)e(will)g(not)195 2255 y(p)q(erform)15 b(its)g(default)g +(\014lename)h(completion)g(ev)o(en)f(if)g(the)g(application's)h +(completion)g(function)195 2310 y(returns)f(no)g(matc)o(hes.)20 +b(It)15 b(should)h(b)q(e)g(set)f(only)h(b)o(y)f(an)g(application's)h +(completion)h(function.)1685 2396 y([V)l(ariable])-1799 +b Fg(int)20 b Ff(rl)p 216 2396 V 25 w(completion)p 515 +2396 V 26 w(t)n(yp)r(e)195 2451 y Ft(Set)e(to)e(a)i(c)o(haracter)f +(describing)i(the)e(t)o(yp)q(e)h(of)f(completion)i(Readline)g(is)f +(curren)o(tly)g(attempt-)195 2506 y(ing;)g(see)f(the)f(description)i +(of)f Fs(rl_complete_internal\(\))c Ft(\(see)k(Section)h(2.6.2)d +([Completion)195 2560 y(F)l(unctions],)k(page)f(42\))g(for)f(the)i +(list)g(of)f(c)o(haracters.)28 b(This)19 b(is)g(set)f(to)g(the)g +(appropriate)h(v)m(alue)195 2615 y(b)q(efore)d(an)o(y)g(application-sp) +q(eci\014c)j(completion)e(function)g(is)f(called,)h(allo)o(wing)g(suc)o +(h)f(functions)195 2670 y(to)f(presen)o(t)g(the)g(same)g(in)o(terface)g +(as)g Fs(rl_complete\(\))p Ft(.)p eop %%Page: 47 51 47 50 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(47)195 149 y Fd(/*)19 b(fileman.c)d(--)j(A)g(tiny)f -(applicatio)o(n)e(which)i(demonstrat)o(es)e(how)j(to)f(use)h(the)254 -193 y(GNU)f(Readline)f(library.)36 b(This)18 b(applicatio)o(n)e -(interactive)o(ly)g(allows)h(users)254 237 y(to)i(manipulat)o(e)d -(files)i(and)h(their)e(modes.)h(*/)195 324 y(#include)f(<stdio.h)o(>) -195 367 y(#include)g(<sys/typ)o(es.)o(h>)195 411 y(#include)g(<sys/fil) -o(e.h)o(>)195 455 y(#include)g(<sys/sta)o(t.h)o(>)195 -498 y(#include)g(<sys/err)o(no.)o(h>)195 585 y(#include)g(<readlin)o -(e/r)o(ea)o(dli)o(ne.)o(h>)195 629 y(#include)g(<readlin)o(e/h)o(is)o -(tor)o(y.h)o(>)195 716 y(extern)g(char)h(*xmalloc)f(\(\);)195 -803 y(/*)i(The)f(names)g(of)h(functions)d(that)i(actually)f(do)h(the)h -(manipulat)o(ion)o(.)d(*/)195 847 y(int)i(com_list)f(__P\(\(char)f -(*\)\);)195 890 y(int)i(com_view)f(__P\(\(char)f(*\)\);)195 -934 y(int)i(com_rename)e(__P\(\(char)g(*\)\);)195 978 -y(int)i(com_stat)f(__P\(\(char)f(*\)\);)195 1021 y(int)i(com_pwd)f -(__P\(\(char)f(*\)\);)195 1065 y(int)i(com_delete)e(__P\(\(char)g -(*\)\);)195 1108 y(int)i(com_help)f(__P\(\(char)f(*\)\);)195 -1152 y(int)i(com_cd)g(__P\(\(char)e(*\)\);)195 1196 y(int)i(com_quit)f -(__P\(\(char)f(*\)\);)195 1283 y(/*)j(A)g(structure)d(which)i(contains) -e(information)g(on)j(the)f(commands)f(this)h(program)254 -1326 y(can)g(understand)o(.)f(*/)195 1413 y(typedef)g(struct)g({)234 -1457 y(char)h(*name;)g(/*)g(User)g(printable)f(name)h(of)h(the)f -(function.)e(*/)234 1501 y(rl_icpfunc)o(_t)g(*func;)h(/*)i(Function)e -(to)i(call)f(to)h(do)f(the)h(job.)f(*/)234 1544 y(char)g(*doc;)g(/*)h -(Documenta)o(tio)o(n)d(for)j(this)f(function.)36 b(*/)195 -1588 y(})19 b(COMMAND;)195 1675 y(COMMAND)e(commands[)o(])g(=)i({)234 -1719 y({)g("cd",)f(com_cd,)f("Change)g(to)i(directory)d(DIR")i(},)234 -1762 y({)h("delete",)e(com_dele)o(te,)f("Delete)h(FILE")h(},)234 -1806 y({)h("help",)e(com_help,)f("Display)h(this)h(text")g(},)234 -1849 y({)h("?",)g(com_help)o(,)e("Synonym)f(for)j(`help'")e(},)234 -1893 y({)i("list",)e(com_list,)f("List)i(files)g(in)h(DIR")f(},)234 +(Readline)843 b(47)1685 149 y([V)l(ariable])-1799 b Fg(int)20 +b Ff(rl)p 216 149 18 3 v 25 w(inhibit)p 404 149 V 28 +w(completion)195 204 y Ft(If)14 b(this)h(v)m(ariable)g(is)g(non-zero,)f +(completion)i(is)e(inhibited.)22 b(The)15 b(completion)g(c)o(haracter)e +(will)j(b)q(e)195 259 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to) +e Fs(self-insert)p Ft(.)75 371 y Fh(2.6.4)30 b(A)21 b(Short)f +(Completion)g(Example)137 493 y Ft(Here)11 b(is)f(a)g(small)h +(application)h(demonstrating)e(the)g(use)h(of)e(the)i(GNU)f(Readline)h +(library)l(.)19 b(It)11 b(is)f(called)75 548 y Fs(fileman)p +Ft(,)17 b(and)h(the)g(source)g(co)q(de)g(resides)h(in)f(`)p +Fs(examples/fileman.c)p Ft('.)25 b(This)18 b(sample)g(application)75 +603 y(pro)o(vides)c(completion)g(of)e(command)h(names,)g(line)i +(editing)g(features,)d(and)i(access)f(to)f(the)h(history)h(list.)p +eop +%%Page: 48 52 +48 51 bop 75 -58 a Ft(48)1299 b(GNU)15 b(Readline)h(Library)195 +149 y Fd(/*)j(fileman.c)d(--)j(A)g(tiny)f(applicatio)o(n)e(which)i +(demonstrat)o(es)e(how)j(to)f(use)h(the)254 193 y(GNU)f(Readline)f +(library.)36 b(This)18 b(applicatio)o(n)e(interactive)o(ly)g(allows)h +(users)254 237 y(to)i(manipulat)o(e)d(files)i(and)h(their)e(modes.)h +(*/)195 324 y(#include)f(<stdio.h)o(>)195 367 y(#include)g(<sys/typ)o +(es.)o(h>)195 411 y(#include)g(<sys/fil)o(e.h)o(>)195 +455 y(#include)g(<sys/sta)o(t.h)o(>)195 498 y(#include)g(<sys/err)o +(no.)o(h>)195 585 y(#include)g(<readlin)o(e/r)o(ea)o(dli)o(ne.)o(h>)195 +629 y(#include)g(<readlin)o(e/h)o(is)o(tor)o(y.h)o(>)195 +716 y(extern)g(char)h(*xmalloc)f(\(\);)195 803 y(/*)i(The)f(names)g(of) +h(functions)d(that)i(actually)f(do)h(the)h(manipulat)o(ion)o(.)d(*/)195 +847 y(int)i(com_list)f(__P\(\(char)f(*\)\);)195 890 y(int)i(com_view)f +(__P\(\(char)f(*\)\);)195 934 y(int)i(com_rename)e(__P\(\(char)g +(*\)\);)195 978 y(int)i(com_stat)f(__P\(\(char)f(*\)\);)195 +1021 y(int)i(com_pwd)f(__P\(\(char)f(*\)\);)195 1065 +y(int)i(com_delete)e(__P\(\(char)g(*\)\);)195 1108 y(int)i(com_help)f +(__P\(\(char)f(*\)\);)195 1152 y(int)i(com_cd)g(__P\(\(char)e(*\)\);) +195 1196 y(int)i(com_quit)f(__P\(\(char)f(*\)\);)195 +1283 y(/*)j(A)g(structure)d(which)i(contains)e(information)g(on)j(the)f +(commands)f(this)h(program)254 1326 y(can)g(understand)o(.)f(*/)195 +1413 y(typedef)g(struct)g({)234 1457 y(char)h(*name;)g(/*)g(User)g +(printable)f(name)h(of)h(the)f(function.)e(*/)234 1501 +y(rl_icpfunc)o(_t)g(*func;)h(/*)i(Function)e(to)i(call)f(to)h(do)f(the) +h(job.)f(*/)234 1544 y(char)g(*doc;)g(/*)h(Documenta)o(tio)o(n)d(for)j +(this)f(function.)36 b(*/)195 1588 y(})19 b(COMMAND;)195 +1675 y(COMMAND)e(commands[)o(])g(=)i({)234 1719 y({)g("cd",)f(com_cd,)f +("Change)g(to)i(directory)d(DIR")i(},)234 1762 y({)h("delete",)e +(com_dele)o(te,)f("Delete)h(FILE")h(},)234 1806 y({)h("help",)e +(com_help,)f("Display)h(this)h(text")g(},)234 1849 y({)h("?",)g +(com_help)o(,)e("Synonym)f(for)j(`help'")e(},)234 1893 +y({)i("list",)e(com_list,)f("List)i(files)g(in)h(DIR")f(},)234 1936 y({)h("ls",)f(com_list,)e("Synonym)h(for)h(`list'")f(},)234 1980 y({)i("pwd",)f(com_pwd,)e("Print)i(the)g(current)f(working)g (directory)o(")g(},)234 2024 y({)i("quit",)e(com_quit,)f("Quit)i(using) @@ -4507,37 +4565,38 @@ y(/*)j(The)f(name)g(of)h(this)f(program,)f(as)i(taken)e(from)h (argv[0].)f(*/)195 2547 y(char)h(*progname;)195 2634 y(/*)h(When)f(non-zero,)e(this)i(means)g(the)g(user)g(is)h(done)f (using)g(this)g(program.)f(*/)p eop -%%Page: 48 52 -48 51 bop 75 -58 a Ft(48)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Fd(int)i(done;)195 237 y(char)g(*)195 280 y(dupstr)f(\(s\))293 -324 y(int)i(s;)195 367 y({)234 411 y(char)f(*r;)234 498 -y(r)h(=)h(xmalloc)d(\(strlen)f(\(s\))j(+)g(1\);)234 542 -y(strcpy)f(\(r,)g(s\);)234 585 y(return)g(\(r\);)195 -629 y(})195 716 y(main)g(\(argc,)f(argv\))293 760 y(int)i(argc;)293 -803 y(char)f(**argv;)195 847 y({)234 890 y(char)g(*line,)g(*s;)234 -978 y(progname)f(=)i(argv[0];)234 1065 y(initialize)o(_re)o(ad)o(lin)o -(e)d(\(\);)j(/*)g(Bind)f(our)g(completer.)e(*/)234 1152 -y(/*)j(Loop)f(reading)f(and)h(executing)f(lines)g(until)h(the)g(user)h -(quits.)e(*/)234 1196 y(for)i(\()g(;)g(done)f(==)h(0;)g(\))273 -1239 y({)313 1283 y(line)f(=)h(readline)d(\("FileMan:)g("\);)313 -1370 y(if)j(\(!line\))352 1413 y(break;)313 1501 y(/*)g(Remove)e -(leading)g(and)h(trailing)f(whitespac)o(e)f(from)j(the)f(line.)372 -1544 y(Then,)f(if)i(there)f(is)h(anything)d(left,)i(add)g(it)h(to)g -(the)f(history)f(list)372 1588 y(and)h(execute)f(it.)h(*/)313 -1631 y(s)h(=)g(stripwhite)d(\(line\);)313 1719 y(if)j(\(*s\))352 -1762 y({)391 1806 y(add_histor)o(y)d(\(s\);)391 1849 -y(execute_li)o(ne)g(\(s\);)352 1893 y(})313 1980 y(free)i(\(line\);)273 -2024 y(})234 2067 y(exit)g(\(0\);)195 2111 y(})195 2198 -y(/*)h(Execute)e(a)i(command)e(line.)h(*/)195 2242 y(int)195 -2285 y(execute_li)o(ne)e(\(line\))293 2329 y(char)i(*line;)195 -2372 y({)234 2416 y(register)f(int)h(i;)234 2460 y(COMMAND)f(*command;) -234 2503 y(char)h(*word;)234 2590 y(/*)h(Isolate)e(the)h(command)f -(word.)h(*/)234 2634 y(i)h(=)h(0;)p eop %%Page: 49 53 49 52 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(49)234 149 y Fd(while)18 b(\(line[i])e(&&)j(whitespace) -d(\(line[i]\)\))273 193 y(i++;)234 237 y(word)i(=)i(line)e(+)h(i;)234 -324 y(while)f(\(line[i])e(&&)j(!whitespac)o(e)e(\(line[i]\))o(\))273 +(Readline)843 b(49)195 149 y Fd(int)18 b(done;)195 237 +y(char)g(*)195 280 y(dupstr)f(\(s\))293 324 y(int)i(s;)195 +367 y({)234 411 y(char)f(*r;)234 498 y(r)h(=)h(xmalloc)d(\(strlen)f +(\(s\))j(+)g(1\);)234 542 y(strcpy)f(\(r,)g(s\);)234 +585 y(return)g(\(r\);)195 629 y(})195 716 y(main)g(\(argc,)f(argv\))293 +760 y(int)i(argc;)293 803 y(char)f(**argv;)195 847 y({)234 +890 y(char)g(*line,)g(*s;)234 978 y(progname)f(=)i(argv[0];)234 +1065 y(initialize)o(_re)o(ad)o(lin)o(e)d(\(\);)j(/*)g(Bind)f(our)g +(completer.)e(*/)234 1152 y(/*)j(Loop)f(reading)f(and)h(executing)f +(lines)g(until)h(the)g(user)h(quits.)e(*/)234 1196 y(for)i(\()g(;)g +(done)f(==)h(0;)g(\))273 1239 y({)313 1283 y(line)f(=)h(readline)d +(\("FileMan:)g("\);)313 1370 y(if)j(\(!line\))352 1413 +y(break;)313 1501 y(/*)g(Remove)e(leading)g(and)h(trailing)f(whitespac) +o(e)f(from)j(the)f(line.)372 1544 y(Then,)f(if)i(there)f(is)h(anything) +d(left,)i(add)g(it)h(to)g(the)f(history)f(list)372 1588 +y(and)h(execute)f(it.)h(*/)313 1631 y(s)h(=)g(stripwhite)d(\(line\);) +313 1719 y(if)j(\(*s\))352 1762 y({)391 1806 y(add_histor)o(y)d(\(s\);) +391 1849 y(execute_li)o(ne)g(\(s\);)352 1893 y(})313 +1980 y(free)i(\(line\);)273 2024 y(})234 2067 y(exit)g(\(0\);)195 +2111 y(})195 2198 y(/*)h(Execute)e(a)i(command)e(line.)h(*/)195 +2242 y(int)195 2285 y(execute_li)o(ne)e(\(line\))293 +2329 y(char)i(*line;)195 2372 y({)234 2416 y(register)f(int)h(i;)234 +2460 y(COMMAND)f(*command;)234 2503 y(char)h(*word;)234 +2590 y(/*)h(Isolate)e(the)h(command)f(word.)h(*/)234 +2634 y(i)h(=)h(0;)p eop +%%Page: 50 54 +50 53 bop 75 -58 a Ft(50)1299 b(GNU)15 b(Readline)h(Library)234 +149 y Fd(while)i(\(line[i])e(&&)j(whitespace)d(\(line[i]\)\))273 +193 y(i++;)234 237 y(word)i(=)i(line)e(+)h(i;)234 324 +y(while)f(\(line[i])e(&&)j(!whitespac)o(e)e(\(line[i]\))o(\))273 367 y(i++;)234 455 y(if)i(\(line[i]\))273 498 y(line[i++])e(=)i('\\0';) 234 585 y(command)e(=)i(find_comma)o(nd)d(\(word\);)234 672 y(if)j(\(!command\))273 716 y({)313 760 y(fprintf)e(\(stderr,)f @@ -4565,43 +4624,44 @@ y(char)i(*string;)195 2242 y({)234 2285 y(register)f(char)h(*s,)g(*t;) 273 2416 y(;)234 2503 y(if)h(\(*s)g(==)f(0\))273 2547 y(return)g(\(s\);)234 2634 y(t)h(=)h(s)f(+)g(strlen)e(\(s\))i(-)g(1;)p eop -%%Page: 50 54 -50 53 bop 75 -58 a Ft(50)1299 b(GNU)15 b(Readline)h(Library)234 -149 y Fd(while)i(\(t)h(>)g(s)g(&&)g(whitespace)d(\(*t\)\))273 -193 y(t--;)234 237 y(*++t)i(=)i('\\0';)234 324 y(return)e(s;)195 -367 y(})195 455 y(/*)h(*********)o(***)o(**)o(***)o(**)o(***)o(***)o -(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**) -o(***)o(***)d(*/)195 498 y(/*)1294 b(*/)195 542 y(/*)352 -b(Interface)16 b(to)j(Readline)e(Completio)o(n)311 b(*/)195 -585 y(/*)1294 b(*/)195 629 y(/*)19 b(*********)o(***)o(**)o(***)o(**)o -(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o -(**)o(***)o(**)o(***)o(***)d(*/)195 716 y(char)i(*command_g)o(en)o(era) -o(to)o(r)f(__P\(\(cons)o(t)f(char)j(*,)f(int\)\);)195 -760 y(char)g(**fileman_)o(co)o(mpl)o(et)o(ion)e(__P\(\(cons)o(t)h(char) -h(*,)h(int,)f(int\)\);)195 847 y(/*)h(Tell)f(the)g(GNU)h(Readline)d -(library)h(how)i(to)g(complete)o(.)36 b(We)19 b(want)f(to)h(try)g(to) -254 890 y(complete)d(on)j(command)e(names)h(if)h(this)f(is)h(the)f -(first)g(word)g(in)h(the)f(line,)g(or)254 934 y(on)h(filenames)d(if)j -(not.)f(*/)195 978 y(initialize)o(_r)o(ead)o(li)o(ne)e(\(\))195 -1021 y({)234 1065 y(/*)j(Allow)f(condition)o(al)e(parsing)h(of)i(the)f -(~/.inputrc)e(file.)i(*/)234 1108 y(rl_readlin)o(e_n)o(am)o(e)f(=)i -("FileMan")o(;)234 1196 y(/*)g(Tell)f(the)h(complete)o(r)e(that)h(we)h -(want)f(a)h(crack)f(first.)f(*/)234 1239 y(rl_attempt)o(ed_)o(co)o(mpl) -o(et)o(ion)o(_fu)o(nc)o(tio)o(n)f(=)k(fileman_c)o(om)o(ple)o(tio)o(n;) -195 1283 y(})195 1370 y(/*)f(Attempt)e(to)i(complete)d(on)j(the)f -(contents)f(of)i(TEXT.)37 b(START)18 b(and)g(END)254 -1413 y(bound)g(the)g(region)f(of)i(rl_line_bu)o(ff)o(er)d(that)i -(contains)f(the)h(word)g(to)254 1457 y(complete.)36 b(TEXT)18 -b(is)g(the)h(word)f(to)h(complete.)36 b(We)18 b(can)h(use)f(the)h -(entire)254 1501 y(contents)d(of)j(rl_line_bu)o(ffe)o(r)d(in)j(case)f -(we)h(want)f(to)h(do)g(some)f(simple)254 1544 y(parsing.)36 -b(Returnthe)16 b(array)i(of)h(matches,)d(or)j(NULL)f(if)h(there)f -(aren't)f(any.)h(*/)195 1588 y(char)g(**)195 1631 y(fileman_co)o(mp)o -(let)o(io)o(n)f(\(text,)g(start,)g(end\))293 1675 y(const)h(char)g -(*text;)293 1719 y(int)h(start,)e(end;)195 1762 y({)234 -1806 y(char)h(**matches;)234 1893 y(matches)f(=)i(\(char)f(**\)NULL;) -234 1980 y(/*)h(If)g(this)f(word)g(is)h(at)g(the)f(start)g(of)h(the)f -(line,)g(then)g(it)h(is)g(a)g(command)293 2024 y(to)g(complete.)36 +%%Page: 51 55 +51 54 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g +(Readline)843 b(51)234 149 y Fd(while)18 b(\(t)h(>)g(s)g(&&)g +(whitespace)d(\(*t\)\))273 193 y(t--;)234 237 y(*++t)i(=)i('\\0';)234 +324 y(return)e(s;)195 367 y(})195 455 y(/*)h(*********)o(***)o(**)o +(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o +(***)o(***)o(**)o(***)o(**)o(***)o(***)d(*/)195 498 y(/*)1294 +b(*/)195 542 y(/*)352 b(Interface)16 b(to)j(Readline)e(Completio)o(n) +311 b(*/)195 585 y(/*)1294 b(*/)195 629 y(/*)19 b(*********)o(***)o(**) +o(***)o(**)o(***)o(***)o(**)o(***)o(**)o(***)o(***)o(**)o(***)o(**)o +(***)o(***)o(**)o(***)o(**)o(***)o(***)d(*/)195 716 y(char)i +(*command_g)o(en)o(era)o(to)o(r)f(__P\(\(cons)o(t)f(char)j(*,)f +(int\)\);)195 760 y(char)g(**fileman_)o(co)o(mpl)o(et)o(ion)e +(__P\(\(cons)o(t)h(char)h(*,)h(int,)f(int\)\);)195 847 +y(/*)h(Tell)f(the)g(GNU)h(Readline)d(library)h(how)i(to)g(complete)o(.) +36 b(We)19 b(want)f(to)h(try)g(to)254 890 y(complete)d(on)j(command)e +(names)h(if)h(this)f(is)h(the)f(first)g(word)g(in)h(the)f(line,)g(or) +254 934 y(on)h(filenames)d(if)j(not.)f(*/)195 978 y(initialize)o(_r)o +(ead)o(li)o(ne)e(\(\))195 1021 y({)234 1065 y(/*)j(Allow)f(condition)o +(al)e(parsing)h(of)i(the)f(~/.inputrc)e(file.)i(*/)234 +1108 y(rl_readlin)o(e_n)o(am)o(e)f(=)i("FileMan")o(;)234 +1196 y(/*)g(Tell)f(the)h(complete)o(r)e(that)h(we)h(want)f(a)h(crack)f +(first.)f(*/)234 1239 y(rl_attempt)o(ed_)o(co)o(mpl)o(et)o(ion)o(_fu)o +(nc)o(tio)o(n)f(=)k(fileman_c)o(om)o(ple)o(tio)o(n;)195 +1283 y(})195 1370 y(/*)f(Attempt)e(to)i(complete)d(on)j(the)f(contents) +f(of)i(TEXT.)37 b(START)18 b(and)g(END)254 1413 y(bound)g(the)g(region) +f(of)i(rl_line_bu)o(ff)o(er)d(that)i(contains)f(the)h(word)g(to)254 +1457 y(complete.)36 b(TEXT)18 b(is)g(the)h(word)f(to)h(complete.)36 +b(We)18 b(can)h(use)f(the)h(entire)254 1501 y(contents)d(of)j +(rl_line_bu)o(ffe)o(r)d(in)j(case)f(we)h(want)f(to)h(do)g(some)f +(simple)254 1544 y(parsing.)36 b(Returnthe)16 b(array)i(of)h(matches,)d +(or)j(NULL)f(if)h(there)f(aren't)f(any.)h(*/)195 1588 +y(char)g(**)195 1631 y(fileman_co)o(mp)o(let)o(io)o(n)f(\(text,)g +(start,)g(end\))293 1675 y(const)h(char)g(*text;)293 +1719 y(int)h(start,)e(end;)195 1762 y({)234 1806 y(char)h(**matches;) +234 1893 y(matches)f(=)i(\(char)f(**\)NULL;)234 1980 +y(/*)h(If)g(this)f(word)g(is)h(at)g(the)f(start)g(of)h(the)f(line,)g +(then)g(it)h(is)g(a)g(command)293 2024 y(to)g(complete.)36 b(Otherwise)16 b(it)j(is)f(the)h(name)f(of)h(a)g(file)f(in)h(the)f (current)293 2067 y(directory.)e(*/)234 2111 y(if)j(\(start)e(==)i(0\)) 273 2154 y(matches)e(=)j(rl_compl)o(eti)o(on_)o(ma)o(tch)o(es)c @@ -4614,14 +4674,14 @@ b(lets)g(us)254 2416 y(know)g(whether)f(to)i(start)e(from)h(scratch;)f 2503 y(char)g(*)195 2547 y(command_ge)o(ne)o(rat)o(or)e(\(text,)h (state\))293 2590 y(const)h(char)g(*text;)293 2634 y(int)h(state;)p eop -%%Page: 51 55 -51 54 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(51)195 149 y Fd({)234 193 y(static)18 -b(int)g(list_inde)o(x,)e(len;)234 237 y(char)i(*name;)234 -324 y(/*)h(If)g(this)f(is)h(a)g(new)f(word)h(to)f(complete,)f(initiali) -o(ze)f(now.)38 b(This)293 367 y(includes)17 b(saving)g(the)h(length)g -(of)g(TEXT)h(for)f(efficiency)o(,)e(and)293 411 y(initializi)o(ng)g -(the)i(index)g(variable)f(to)i(0.)f(*/)234 455 y(if)h(\(!state\))273 +%%Page: 52 56 +52 55 bop 75 -58 a Ft(52)1299 b(GNU)15 b(Readline)h(Library)195 +149 y Fd({)234 193 y(static)i(int)g(list_inde)o(x,)e(len;)234 +237 y(char)i(*name;)234 324 y(/*)h(If)g(this)f(is)h(a)g(new)f(word)h +(to)f(complete,)f(initiali)o(ze)f(now.)38 b(This)293 +367 y(includes)17 b(saving)g(the)h(length)g(of)g(TEXT)h(for)f +(efficiency)o(,)e(and)293 411 y(initializi)o(ng)g(the)i(index)g +(variable)f(to)i(0.)f(*/)234 455 y(if)h(\(!state\))273 498 y({)313 542 y(list_inde)o(x)d(=)k(0;)313 585 y(len)e(=)h(strlen)f (\(text\);)273 629 y(})234 716 y(/*)h(Return)e(the)i(next)f(name)g (which)g(partially)e(matches)h(from)h(the)293 760 y(command)f(list.)h @@ -4650,17 +4710,17 @@ b(This)18 b(is)h(for)g(the)f(LIST,)g(VIEW)g(and)g(RENAME)254 (arg\)\))273 2416 y(return)h(1;)234 2503 y(sprintf)f(\(syscom,)g("more) g(\045s",)h(arg\);)234 2547 y(return)g(\(system)e(\(syscom\)\);)195 2590 y(})p eop -%%Page: 52 56 -52 55 bop 75 -58 a Ft(52)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Fd(com_rename)g(\(arg\))293 193 y(char)i(*arg;)195 -237 y({)234 280 y(too_danger)o(ous)e(\("rename")o(\);)234 -324 y(return)i(\(1\);)195 367 y(})195 455 y(com_stat)f(\(arg\))293 -498 y(char)h(*arg;)195 542 y({)234 585 y(struct)g(stat)g(finfo;)234 -672 y(if)h(\(!valid_ar)o(gu)o(men)o(t)d(\("stat",)h(arg\)\))273 -716 y(return)h(\(1\);)234 803 y(if)h(\(stat)f(\(arg,)f(&finfo\))g(==)i -(-1\))273 847 y({)313 890 y(perror)e(\(arg\);)313 934 -y(return)g(\(1\);)273 978 y(})234 1065 y(printf)h(\("Statis)o(tic)o(s)e -(for)j(`\045s':\\n",)d(arg\);)234 1152 y(printf)i(\("\045s)g(has)g +%%Page: 53 57 +53 56 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g +(Readline)843 b(53)195 149 y Fd(com_rename)16 b(\(arg\))293 +193 y(char)i(*arg;)195 237 y({)234 280 y(too_danger)o(ous)e(\("rename") +o(\);)234 324 y(return)i(\(1\);)195 367 y(})195 455 y(com_stat)f +(\(arg\))293 498 y(char)h(*arg;)195 542 y({)234 585 y(struct)g(stat)g +(finfo;)234 672 y(if)h(\(!valid_ar)o(gu)o(men)o(t)d(\("stat",)h +(arg\)\))273 716 y(return)h(\(1\);)234 803 y(if)h(\(stat)f(\(arg,)f +(&finfo\))g(==)i(-1\))273 847 y({)313 890 y(perror)e(\(arg\);)313 +934 y(return)g(\(1\);)273 978 y(})234 1065 y(printf)h(\("Statis)o(tic)o +(s)e(for)j(`\045s':\\n",)d(arg\);)234 1152 y(printf)i(\("\045s)g(has)g (\045d)h(link\045s,)e(and)h(is)h(\045d)g(byte\045s)e(in)i(length.\\n")o (,)d(arg,)391 1196 y(finfo.st_n)o(li)o(nk,)391 1239 y(\(finfo.st_)o(nl) o(ink)g(==)j(1\))g(?)g("")g(:)g("s",)391 1283 y(finfo.st_s)o(iz)o(e,) @@ -4683,17 +4743,16 @@ y(})195 1936 y(/*)h(Print)f(out)g(help)g(for)g(ARG,)h(or)f(for)h(all)f 2460 y(printf)e(\("\045s\\t\\t\045s.)o(\\n)o(",)f(commands[i)o(].n)o (am)o(e,)g(commands[i)o(].d)o(oc\))o(;)391 2503 y(printed++;)352 2547 y(})273 2590 y(})p eop -%%Page: 53 57 -53 56 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(53)234 149 y Fd(if)19 b(\(!printed\))273 -193 y({)313 237 y(printf)e(\("No)h(commands)f(match)g(`\045s'.)38 -b(Possibil)o(tie)o(s)17 b(are:\\n",)f(arg\);)313 324 -y(for)i(\(i)h(=)g(0;)g(commands[i)o(].)o(nam)o(e;)d(i++\))352 -367 y({)391 411 y(/*)j(Print)f(in)g(six)h(columns.)d(*/)391 -455 y(if)j(\(printed)d(==)j(6\))430 498 y({)470 542 y(printed)d(=)k(0;) -470 585 y(printf)d(\("\\n"\);)430 629 y(})391 716 y(printf)g -(\("\045s\\t",)g(commands[)o(i].)o(nam)o(e\))o(;)391 -760 y(printed++;)352 803 y(})313 890 y(if)i(\(printed)o(\))352 +%%Page: 54 58 +54 57 bop 75 -58 a Ft(54)1299 b(GNU)15 b(Readline)h(Library)234 +149 y Fd(if)j(\(!printed\))273 193 y({)313 237 y(printf)e(\("No)h +(commands)f(match)g(`\045s'.)38 b(Possibil)o(tie)o(s)17 +b(are:\\n",)f(arg\);)313 324 y(for)i(\(i)h(=)g(0;)g(commands[i)o(].)o +(nam)o(e;)d(i++\))352 367 y({)391 411 y(/*)j(Print)f(in)g(six)h +(columns.)d(*/)391 455 y(if)j(\(printed)d(==)j(6\))430 +498 y({)470 542 y(printed)d(=)k(0;)470 585 y(printf)d(\("\\n"\);)430 +629 y(})391 716 y(printf)g(\("\045s\\t",)g(commands[)o(i].)o(nam)o(e\)) +o(;)391 760 y(printed++;)352 803 y(})313 890 y(if)i(\(printed)o(\))352 934 y(printf)e(\("\\n"\);)273 978 y(})234 1021 y(return)h(\(0\);)195 1065 y(})195 1152 y(/*)h(Change)e(to)i(the)f(directory)f(ARG.)h(*/)195 1196 y(com_cd)f(\(arg\))293 1239 y(char)h(*arg;)195 1283 @@ -4711,14 +4770,15 @@ y({)234 1326 y(if)h(\(chdir)e(\(arg\))h(==)h(-1\))273 y(})195 2503 y(/*)h(The)f(user)g(wishes)g(to)g(quit)h(using)e(this)h (program.)36 b(Just)19 b(set)f(DONE)254 2547 y(non-zero.)e(*/)195 2590 y(com_quit)h(\(arg\))293 2634 y(char)h(*arg;)p eop -%%Page: 54 58 -54 57 bop 75 -58 a Ft(54)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Fd({)234 193 y(done)i(=)i(1;)234 237 y(return)e(\(0\);)195 -280 y(})195 367 y(/*)h(Function)d(which)i(tells)g(you)g(that)g(you)h -(can't)e(do)i(this.)f(*/)195 411 y(too_danger)o(ou)o(s)f(\(caller\))293 -455 y(char)h(*caller;)195 498 y({)234 542 y(fprintf)f(\(stderr,)411 -585 y("\045s:)h(Too)g(dangerous)e(for)j(me)g(to)g(distribu)o(te.)o -(\\n")411 629 y(caller\);)234 672 y(fprintf)e(\(stderr,)g("Write)g(it)i +%%Page: 55 59 +55 58 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g +(Readline)843 b(55)195 149 y Fd({)234 193 y(done)18 b(=)i(1;)234 +237 y(return)e(\(0\);)195 280 y(})195 367 y(/*)h(Function)d(which)i +(tells)g(you)g(that)g(you)h(can't)e(do)i(this.)f(*/)195 +411 y(too_danger)o(ou)o(s)f(\(caller\))293 455 y(char)h(*caller;)195 +498 y({)234 542 y(fprintf)f(\(stderr,)411 585 y("\045s:)h(Too)g +(dangerous)e(for)j(me)g(to)g(distribu)o(te.)o(\\n")411 +629 y(caller\);)234 672 y(fprintf)e(\(stderr,)g("Write)g(it)i (yourself.)o(\\n")o(\);)195 716 y(})195 803 y(/*)g(Return)e(non-zero)g (if)h(ARG)h(is)g(a)g(valid)f(argument)e(for)j(CALLER,)254 847 y(else)f(print)g(an)g(error)g(message)f(and)h(return)g(zero.)f(*/) @@ -4728,9 +4788,12 @@ h(!*arg\))273 1108 y({)313 1152 y(fprintf)e(\(stderr,)f("\045s:)i (Argument)f(required.)o(\\n)o(",)f(caller\);)313 1196 y(return)h(\(0\);)273 1239 y(})234 1326 y(return)h(\(1\);)195 1370 y(})p eop -%%Page: 55 59 -55 58 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o -(ual)1053 b(55)75 149 y Fp(App)r(endix)25 b(A)20 b(Cop)n(ying)26 +%%Page: 56 60 +56 59 bop 75 -58 a Ft(56)1299 b(GNU)15 b(Readline)h(Library)p +eop +%%Page: 57 61 +57 60 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o +(ual)1053 b(57)75 149 y Fp(App)r(endix)25 b(A)20 b(Cop)n(ying)26 b(This)g(Man)n(ual)75 345 y Fr(A.1)33 b(GNU)21 b(F)-6 b(ree)23 b(Do)r(cumen)n(tation)g(License)698 455 y Ft(V)l(ersion)16 b(1.2,)e(No)o(v)o(em)o(b)q(er)h(2002)195 526 y(Cop)o(yrigh)o(t)421 @@ -4802,8 +4865,8 @@ h(ma)o(y)e(not)h(explain)h(an)o(y)f(mathematics.\))18 b(The)165 2670 y(relationship)d(could)g(b)q(e)f(a)g(matter)e(of)i (historical)g(connection)h(with)f(the)g(sub)s(ject)f(or)h(with)g (related)p eop -%%Page: 56 60 -56 59 bop 75 -58 a Ft(56)1299 b(GNU)15 b(Readline)h(Library)165 +%%Page: 58 62 +58 61 bop 75 -58 a Ft(58)1299 b(GNU)15 b(Readline)h(Library)165 149 y(matters,)h(or)g(of)g(legal,)i(commercial,)g(philosophical,)i (ethical)e(or)e(p)q(olitical)j(p)q(osition)f(regarding)165 204 y(them.)165 275 y(The)13 b(\\In)o(v)m(arian)o(t)g(Sections")g(are)g @@ -4893,9 +4956,9 @@ k(are)d(considered)j(to)165 2560 y(b)q(e)g(included)j(b)o(y)d d(ha)o(v)o(e)h(is)h(v)o(oid)g(and)g(has)f(no)165 2670 y(e\013ect)d(on)g(the)g(meaning)h(of)f(this)h(License.)p eop -%%Page: 57 61 -57 60 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o -(ual)1053 b(57)100 149 y(2.)29 b(VERBA)l(TIM)15 b(COPYING)165 +%%Page: 59 63 +59 62 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o +(ual)1053 b(59)100 149 y(2.)29 b(VERBA)l(TIM)15 b(COPYING)165 222 y(Y)l(ou)k(ma)o(y)g(cop)o(y)f(and)i(distribute)g(the)f(Do)q(cumen)o (t)g(in)h(an)o(y)f(medium,)h(either)g(commercially)g(or)165 277 y(noncommercially)l(,)k(pro)o(vided)e(that)f(this)h(License,)i(the) @@ -4977,8 +5040,8 @@ q(cumen)o(t.)100 2378 y(4.)29 b(MODIFICA)l(TIONS)165 (er)h(p)q(ossesses)h(a)e(cop)o(y)h(of)165 2670 y(it.)j(In)c(addition,)g (y)o(ou)f(m)o(ust)f(do)h(these)h(things)g(in)g(the)f(Mo)q(di\014ed)h(V) l(ersion:)p eop -%%Page: 58 62 -58 61 bop 75 -58 a Ft(58)1299 b(GNU)15 b(Readline)h(Library)178 +%%Page: 60 64 +60 63 bop 75 -58 a Ft(60)1299 b(GNU)15 b(Readline)h(Library)178 149 y(A.)30 b(Use)17 b(in)g(the)f(Title)h(P)o(age)f(\(and)g(on)h(the)f (co)o(v)o(ers,)g(if)g(an)o(y\))g(a)g(title)h(distinct)h(from)d(that)h (of)g(the)255 204 y(Do)q(cumen)o(t,)h(and)g(from)f(those)h(of)f @@ -5057,9 +5120,9 @@ h(Section.)177 2540 y(O.)30 b(Preserv)o(e)15 b(an)o(y)g(W)l(arran)o(t)o (that)d(qualify)165 2670 y(as)e(Secondary)g(Sections)h(and)f(con)o (tain)g(no)g(material)g(copied)h(from)e(the)h(Do)q(cumen)o(t,)g(y)o(ou) f(ma)o(y)h(at)p eop -%%Page: 59 63 -59 62 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o -(ual)1053 b(59)165 149 y(y)o(our)16 b(option)g(designate)h(some)f(or)f +%%Page: 61 65 +61 64 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o +(ual)1053 b(61)165 149 y(y)o(our)16 b(option)g(designate)h(some)f(or)f (all)i(of)f(these)h(sections)f(as)g(in)o(v)m(arian)o(t.)24 b(T)l(o)15 b(do)i(this,)f(add)g(their)165 204 y(titles)i(to)f(the)h (list)h(of)e(In)o(v)m(arian)o(t)h(Sections)h(in)f(the)g(Mo)q(di\014ed)h @@ -5142,8 +5205,8 @@ g(in)g(all)165 2440 y(other)c(resp)q(ects.)165 2506 y(Y)l(ou)h(ma)o(y)f 2615 y(do)q(cumen)o(t,)g(and)f(follo)o(w)g(this)h(License)h(in)f(all)h (other)d(resp)q(ects)i(regarding)g(v)o(erbatim)f(cop)o(ying)g(of)165 2670 y(that)e(do)q(cumen)o(t.)p eop -%%Page: 60 64 -60 63 bop 75 -58 a Ft(60)1299 b(GNU)15 b(Readline)h(Library)100 +%%Page: 62 66 +62 65 bop 75 -58 a Ft(62)1299 b(GNU)15 b(Readline)h(Library)100 149 y(7.)29 b(A)o(GGREGA)l(TION)14 b(WITH)i(INDEPENDENT)e(W)o(ORKS)165 214 y(A)g(compilation)h(of)f(the)g(Do)q(cumen)o(t)g(or)f(its)i(deriv)m (ativ)o(es)g(with)f(other)g(separate)f(and)i(indep)q(enden)o(t)165 @@ -5227,9 +5290,9 @@ b(If)17 b(the)g(Do)q(cumen)o(t)f(do)q(es)g(not)g(sp)q(ecify)i(a)e(v)o (ma)o(y)f(c)o(ho)q(ose)i(an)o(y)e(v)o(ersion)i(ev)o(er)f(published)j (\(not)c(as)h(a)g(draft\))f(b)o(y)i(the)f(F)l(ree)165 2660 y(Soft)o(w)o(are)d(F)l(oundation.)p eop -%%Page: 61 65 -61 64 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o -(ual)1053 b(61)75 149 y Fh(A.1.1)30 b(ADDENDUM:)22 b(Ho)n(w)f(to)f(use) +%%Page: 63 67 +63 66 bop 75 -58 a Ft(App)q(endix)17 b(A:)e(Cop)o(ying)g(This)h(Man)o +(ual)1053 b(63)75 149 y Fh(A.1.1)30 b(ADDENDUM:)22 b(Ho)n(w)f(to)f(use) h(this)f(License)h(for)f(y)n(our)h(do)r(cumen)n(ts)137 271 y Ft(T)l(o)14 b(use)g(this)g(License)h(in)g(a)e(do)q(cumen)o(t)h(y) o(ou)f(ha)o(v)o(e)h(written,)f(include)j(a)d(cop)o(y)h(of)f(the)h @@ -5262,11 +5325,11 @@ Fc(list)h(their)g(titles)p Fd(,)f(with)273 860 y(the)i(Front-Cov)o(er)d (license,)k(suc)o(h)e(as)g(the)f(GNU)75 1196 y(General)16 b(Public)h(License,)f(to)f(p)q(ermit)h(their)f(use)h(in)g(free)f(soft)o (w)o(are.)p eop -%%Page: 62 66 -62 65 bop 75 -58 a Ft(62)1299 b(GNU)15 b(Readline)h(Library)p +%%Page: 64 68 +64 67 bop 75 -58 a Ft(64)1299 b(GNU)15 b(Readline)h(Library)p eop -%%Page: 63 67 -63 66 bop 75 -58 a Ft(Concept)15 b(Index)1466 b(63)75 +%%Page: 65 69 +65 68 bop 75 -58 a Ft(Concept)15 b(Index)1466 b(65)75 149 y Fp(Concept)27 b(Index)75 319 y Fr(A)75 380 y Fb(application)q (-sp)q(eci)q(\014c)16 b(completion)f(functions)5 b Fa(.)j(.)e(.)g(.)g (.)g(.)h(.)17 b Fb(41)75 511 y Fr(C)75 571 y Fb(command)d(editing)e @@ -5276,7 +5339,7 @@ Fb(1)75 703 y Fr(E)75 763 y Fb(editing)15 b(command)f(lines)f Fa(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)24 b Fb(1)75 895 y Fr(F)75 955 y Fb(FDL,)13 b(GNU)f(F)m(ree)h(Do)q(cumen)o(tation)j(License)6 -b Fa(.)h(.)f(.)g(.)g(.)g(.)h(.)18 b Fb(55)75 1086 y Fr(I)75 +b Fa(.)h(.)f(.)g(.)g(.)g(.)h(.)18 b Fb(57)75 1086 y Fr(I)75 1147 y Fb(initiali)q(zati)q(on)e(\014le,)e(readline)t Fa(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)17 b Fb(4)75 1192 y(in)o(teraction,)e(readline)5 @@ -5301,12 +5364,12 @@ Fb(5)1012 1131 y Fr(Y)1012 1192 y Fb(y)o(anking)e(text)t Fa(.)7 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 b Fb(2)p eop -%%Page: 64 68 -64 67 bop 75 -58 a Ft(64)1299 b(GNU)15 b(Readline)h(Library)p +%%Page: 66 70 +66 69 bop 75 -58 a Ft(66)1299 b(GNU)15 b(Readline)h(Library)p eop -%%Page: 65 69 -65 68 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(65)75 149 y Fp(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 +%%Page: 67 71 +67 70 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 +b(67)75 149 y Fp(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 b(Index)p 80 305 21 3 v 75 366 a Fd(_rl_digit_)o(p)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 @@ -5491,8 +5554,8 @@ b Fb(14)1012 2626 y Fd(non-increme)o(nt)o(al-)o(re)o(ver)o(se)o(-se)o (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)20 b Fb(14)p eop -%%Page: 66 70 -66 69 bop 75 -58 a Ft(66)1299 b(GNU)15 b(Readline)h(Library)75 +%%Page: 68 72 +68 71 bop 75 -58 a Ft(68)1299 b(GNU)15 b(Readline)h(Library)75 149 y Fr(O)75 209 y Fb(output-meta)5 b Fa(.)i(.)f(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Fb(7)75 253 @@ -5604,352 +5667,363 @@ b Fb(45)75 2670 y Fd(rl_complet)o(io)o(n_d)o(is)o(pla)o(y_m)o(at)o(che) o(s_)o(hoo)o(k)9 b Fa(.)d(.)g(.)g(.)g(.)g(.)h(.)24 b Fb(44)1012 149 y Fd(rl_completi)o(on)o(_en)o(tr)o(y_f)o(un)o(cti)o(on)s Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Fb(42,)c(43)1012 -194 y Fd(rl_completi)o(on)o(_ma)o(rk)o(_sy)o(ml)o(ink)o(_di)o(rs)t -Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fb(45)1012 -238 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8 b Fa(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Fb(42)1012 282 y Fd(rl_completi)o(on)o(_mo)o(de)t Fa(.)t(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(42)1012 326 y Fd(rl_completi)o(on)o(_qu) -o(er)o(y_i)o(te)o(ms)9 b Fa(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)23 b Fb(45)1012 371 y Fd(rl_completi)o(on)o(_su) -o(pp)o(res)o(s_)o(app)o(end)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)20 b Fb(45)1012 415 y Fd(rl_completi)o(on)o(_ty)o(pe)t +194 y Fd(rl_completi)o(on)o(_fo)o(un)o(d_q)o(uo)o(te)c +Fa(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 +b Fb(46)1012 238 y Fd(rl_completi)o(on)o(_ma)o(rk)o(_sy)o(ml)o(ink)o +(_di)o(rs)t Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 +b Fb(46)1012 282 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8 +b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)g(.)h(.)25 b Fb(42)1012 326 y Fd(rl_completi)o(on)o(_mo)o(de)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(46)1012 459 y -Fd(rl_copy_key)o(ma)o(p)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)21 b Fb(28)1012 503 y Fd(rl_copy_tex)o(t)6 b Fa(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)1012 547 y -Fd(rl_crlf)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(33)1012 592 y Fd(rl_delete_t)o(ex)o(t)8 +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(42)1012 371 y +Fd(rl_completi)o(on)o(_qu)o(er)o(y_i)o(te)o(ms)9 b Fa(.)s(.)d(.)g(.)h +(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 +b Fb(45)1012 415 y Fd(rl_completi)o(on)o(_qu)o(ot)o(e_c)o(ha)o(rac)o +(ter)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 +b Fb(45)1012 459 y Fd(rl_completi)o(on)o(_su)o(pp)o(res)o(s_)o(app)o +(end)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 +b Fb(45)1012 503 y Fd(rl_completi)o(on)o(_su)o(pp)o(res)o(s_)o(quo)o +(te)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20 +b Fb(46)1012 547 y Fd(rl_completi)o(on)o(_ty)o(pe)t Fa(.)t(.)6 +b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(46)1012 592 y Fd(rl_completi)o(on)o(_wo) +o(rd)o(_br)o(ea)o(k_h)o(ook)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)20 b Fb(45)1012 636 y Fd(rl_copy_key)o(ma)o(p)8 +b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b +Fb(28)1012 680 y Fd(rl_copy_tex)o(t)6 b Fa(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)1012 724 y Fd(rl_crlf)t +Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)h(.)17 b Fb(33)1012 769 y Fd(rl_delete_t)o(ex)o(t)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b -Fb(34)1012 636 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7 +Fb(34)1012 813 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)24 b Fb(26)1012 680 y Fd(rl_deprep_t)o(er)o(min)o(al)t +g(.)g(.)24 b Fb(26)1012 857 y Fd(rl_deprep_t)o(er)o(min)o(al)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(35)1012 724 y +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(35)1012 901 y Fd(rl_ding)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(36)1012 769 y Fd(rl_director)o(y_)o +f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(36)1012 945 y Fd(rl_director)o(y_)o (com)o(pl)o(eti)o(on)o(_ho)o(ok)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(44)1012 813 y Fd(rl_discard_)o(ke)o(yma) +(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(44)1012 990 y Fd(rl_discard_)o(ke)o(yma) o(p)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(29)1012 -857 y Fd(rl_dispatch)o(in)o(g)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)21 b Fb(24)1012 901 y Fd(rl_display_)o(ma)o(tch)o(_l)o(ist)8 -b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)25 b Fb(36)1012 945 y Fd(rl_do_undo)8 +1034 y Fd(rl_dispatch)o(in)o(g)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) +g(.)g(.)h(.)21 b Fb(24)1012 1078 y Fd(rl_display_)o(ma)o(tch)o(_l)o +(ist)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(36)1012 1122 y Fd(rl_do_undo)8 b Fa(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Fb(32)1012 990 y Fd(rl_done)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(24)1012 -1034 y Fd(rl_editing_)o(mo)o(de)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g +b Fb(32)1012 1167 y Fd(rl_done)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(24)1012 +1211 y Fd(rl_editing_)o(mo)o(de)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)21 b Fb(28)1012 1078 y Fd(rl_end)5 b Fa(.)t(.)h(.)g(.)h(.)f(.)g +g(.)g(.)21 b Fb(28)1012 1255 y Fd(rl_end)5 b Fa(.)t(.)h(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Fb(24)1012 1122 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b +b Fb(24)1012 1299 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(32)1012 1167 +(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(32)1012 1343 y Fd(rl_erase_em)o(pt)o(y_l)o(in)o(e)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 -b Fb(24)1012 1211 y Fd(rl_event_ho)o(ok)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g +b Fb(24)1012 1388 y Fd(rl_event_ho)o(ok)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)22 b Fb(26)1012 1255 y Fd(rl_execute_)o(ne)o +g(.)g(.)g(.)h(.)f(.)g(.)22 b Fb(26)1012 1432 y Fd(rl_execute_)o(ne)o (xt)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Fb(34)1012 1299 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t +b Fb(35)1012 1476 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fb(26)1012 1343 y Fd(rl_executin)o(g_) +g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fb(26)1012 1520 y Fd(rl_executin)o(g_) o(mac)o(ro)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(26)1012 -1388 y Fd(rl_expand_p)o(ro)o(mpt)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g +1564 y Fd(rl_expand_p)o(ro)o(mpt)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)20 b Fb(33)1012 1432 y Fd(rl_explicit)o(_a)o(rg)7 +g(.)20 b Fb(33)1012 1609 y Fd(rl_explicit)o(_a)o(rg)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(27)1012 -1476 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fa(.)f(.)f(.)g(.)g(.)g +1653 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fa(.)f(.)f(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Fb(35)1012 1520 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o +b Fb(35)1012 1697 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o (ire)o(d)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Fb(46)1012 1564 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(fun)o +b Fb(46)1012 1741 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(fun)o (cti)o(on)t Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Fb(43)1012 1609 y Fd(rl_filename)o(_d)o(equ)o(ot)o(ing)o(_f)o(unc)o +b Fb(43)1012 1786 y Fd(rl_filename)o(_d)o(equ)o(ot)o(ing)o(_f)o(unc)o (tio)o(n)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Fb(43)1012 1653 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o +b Fb(43)1012 1830 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o (rs)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20 -b Fb(45)1012 1697 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o +b Fb(45)1012 1874 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o (d)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 -b Fb(46)1012 1741 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o +b Fb(46)1012 1918 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o (on)7 b Fa(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20 -b Fb(43)1012 1786 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7 +b Fb(43)1012 1962 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)23 b Fb(33)1012 1830 y Fd(rl_free_lin)o(e_)o(sta)o(te)t +f(.)23 b Fb(33)1012 2007 y Fd(rl_free_lin)o(e_)o(sta)o(te)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(40)1012 1874 +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(40)1012 2051 y Fd(rl_free_und)o(o_)o(lis)o(t)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -19 b Fb(32)1012 1918 y Fd(rl_function)o(_d)o(ump)o(er)t +19 b Fb(32)1012 2095 y Fd(rl_function)o(_d)o(ump)o(er)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(31)1012 1962 +g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(31)1012 2139 y Fd(rl_function)o(_o)o(f_k)o(ey)o(seq)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Fb(31)1012 2007 y Fd(rl_funmap_n)o(am)o(es)7 b Fa(.)s(.)f(.)g(.)h(.)f +b Fb(31)1012 2184 y Fd(rl_funmap_n)o(am)o(es)7 b Fa(.)s(.)f(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)21 b Fb(31)1012 2051 y Fd(rl_generic_)o(bi)o(nd)7 +h(.)f(.)g(.)g(.)g(.)21 b Fb(31)1012 2228 y Fd(rl_generic_)o(bi)o(nd)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(30)1012 -2095 y Fd(rl_get_keym)o(ap)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h +2272 y Fd(rl_get_keym)o(ap)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)22 b Fb(29)1012 2139 y Fd(rl_get_keym)o(ap)o(_by)o(_n)o +h(.)f(.)g(.)22 b Fb(29)1012 2316 y Fd(rl_get_keym)o(ap)o(_by)o(_n)o (ame)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(29)1012 2184 y Fd(rl_get_keym)o(ap)o +(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(29)1012 2360 y Fd(rl_get_keym)o(ap)o (_na)o(me)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(29)1012 -2228 y Fd(rl_get_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.) +2405 y Fd(rl_get_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)19 b Fb(40)1012 2272 y Fd(rl_get_term)o(ca)o(p)8 b +(.)19 b Fb(40)1012 2449 y Fd(rl_get_term)o(ca)o(p)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b Fb(37)1012 -2316 y Fd(rl_getc)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) +2493 y Fd(rl_getc)t Fa(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(34)1012 2360 y +(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Fb(34)1012 2537 y Fd(rl_getc_fun)o(ct)o(ion)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 -b Fb(26)1012 2405 y Fd(rl_gnu_read)o(li)o(ne_)o(p)6 b +b Fb(26)1012 2582 y Fd(rl_gnu_read)o(li)o(ne_)o(p)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(25)1012 2449 +(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(25)1012 2626 y Fd(rl_ignore_c)o(om)o(ple)o(ti)o(on_)o(du)o(pli)o(cat)o(es)t -Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fb(45)1012 -2493 y Fd(rl_ignore_s)o(om)o(e_c)o(om)o(ple)o(ti)o(ons)o(_fu)o(nc)o -(tio)o(n)8 b Fa(.)e(.)g(.)g(.)g(.)h(.)24 b Fb(44)1012 -2537 y Fd(rl_inhibit_)o(co)o(mpl)o(et)o(ion)8 b Fa(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Fb(46)1012 2582 y Fd(rl_initiali)o(ze)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)22 b Fb(35)1012 2626 y Fd(rl_insert_c)o(om)o -(ple)o(ti)o(ons)8 b Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 b Fb(42)1012 2670 -y Fd(rl_insert_t)o(ex)o(t)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)21 b Fb(34)p eop -%%Page: 67 71 -67 70 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(67)75 149 y Fd(rl_instrea)o(m)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g +Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fb(46)1012 +2670 y Fd(rl_ignore_s)o(om)o(e_c)o(om)o(ple)o(ti)o(ons)o(_fu)o(nc)o +(tio)o(n)8 b Fa(.)e(.)g(.)g(.)g(.)h(.)24 b Fb(44)p eop +%%Page: 69 73 +69 72 bop 75 -58 a Ft(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 +b(69)75 149 y Fd(rl_inhibit)o(_c)o(omp)o(le)o(tio)o(n)9 +b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)25 b Fb(47)75 193 y Fd(rl_initial)o(iz)o(e)9 +b Fa(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 +b Fb(36)75 237 y Fd(rl_insert_)o(co)o(mpl)o(et)o(ion)o(s)9 +b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)25 b Fb(42)75 280 y Fd(rl_insert_)o(te)o(xt)8 +b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b +Fb(34)75 324 y Fd(rl_instrea)o(m)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(25)75 194 y Fd(rl_invokin)o(g_)o(key)o +g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(25)75 368 y Fd(rl_invokin)o(g_)o(key)o (se)o(qs)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(31)75 -238 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8 +411 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Fb(31)75 282 y Fd(rl_kill_te)o(xt)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g +b Fb(31)75 455 y Fd(rl_kill_te)o(xt)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(34)75 326 y Fd(rl_last_fu)o(nc)6 +g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(34)75 499 y Fd(rl_last_fu)o(nc)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Fb(25)75 371 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5 +b Fb(25)75 542 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(25)75 415 y Fd(rl_line_bu)o(ff) +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(25)75 586 y Fd(rl_line_bu)o(ff) o(er)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Fb(24)75 459 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s +b Fb(24)75 629 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(31)75 503 y Fd(rl_macro_b)o(in)o(d)9 +f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(31)75 673 y Fd(rl_macro_b)o(in)o(d)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Fb(36)75 548 y Fd(rl_macro_d)o(um)o(per)6 b Fa(.)t(.)g(.)g(.)g(.)g(.) +b Fb(36)75 717 y Fd(rl_macro_d)o(um)o(per)6 b Fa(.)t(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)20 b Fb(36)75 592 y Fd(rl_make_ba)o(re)o(_ke)o(ym)o +(.)g(.)h(.)f(.)g(.)20 b Fb(36)75 760 y Fd(rl_make_ba)o(re)o(_ke)o(ym)o (ap)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(28)75 636 +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(28)75 804 y Fd(rl_make_ke)o(ym)o(ap)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)21 b Fb(28)75 680 y Fd(rl_mark)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.) +(.)g(.)21 b Fb(28)75 848 y Fd(rl_mark)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 -b Fb(24)75 725 y Fd(rl_message)7 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g +b Fb(24)75 891 y Fd(rl_message)7 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fb(33)75 769 y Fd(rl_modifyi)o(ng)6 +g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fb(33)75 935 y Fd(rl_modifyi)o(ng)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Fb(32)75 813 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fa(.)s(.)i(.)f(.)g +b Fb(32)75 979 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fa(.)s(.)i(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)19 b Fb(31)75 858 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o +g(.)g(.)g(.)g(.)19 b Fb(31)75 1022 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o (ead)s Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(24)75 902 y Fd(rl_numeric)o(_a)o -(rg)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(24)75 1066 y Fd(rl_numeric)o(_a) +o(rg)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Fb(28)75 946 y Fd(rl_on_new_)o(li)o(ne)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 990 y Fd(rl_on_new_)o(li)o(ne_)o(wi)o -(th_)o(pro)o(mp)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)21 b Fb(33)75 1035 y Fd(rl_outstre)o(am)6 +b Fb(28)75 1109 y Fd(rl_on_new_)o(li)o(ne)8 b Fa(.)s(.)e(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 1153 y Fd(rl_on_new_)o(li)o(ne_)o +(wi)o(th_)o(pro)o(mp)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(33)75 1197 y Fd(rl_outstre)o(am)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Fb(25)75 1079 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fa(.)s(.)i(.)f(.)g +b Fb(25)75 1240 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fa(.)s(.)i(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)19 b Fb(30)75 1123 y Fd(rl_pending)o(_i)o(npu)o(t)6 +g(.)g(.)g(.)g(.)19 b Fb(30)75 1284 y Fd(rl_pending)o(_i)o(npu)o(t)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fb(24)75 -1167 y Fd(rl_point)s Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +1328 y Fd(rl_point)s Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Fb(24)75 1212 y Fd(rl_possibl)o(e_)o +g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Fb(24)75 1371 y Fd(rl_possibl)o(e_)o (com)o(pl)o(eti)o(ons)7 b Fa(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(42)75 1256 y +h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(42)75 1415 y Fd(rl_pre_inp)o(ut)o(_ho)o(ok)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Fb(25)75 1300 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9 +b Fb(25)75 1459 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Fb(26)75 1344 y Fd(rl_prep_te)o(rm)o(ina)o(l)6 +f(.)g(.)g(.)g(.)25 b Fb(26)75 1502 y Fd(rl_prep_te)o(rm)o(ina)o(l)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fb(35)75 -1389 y Fd(rl_prompt)8 b Fa(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g +1546 y Fd(rl_prompt)8 b Fa(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)24 b Fb(25)75 1433 y Fd(rl_push_ma)o(cr)o(o_i)o(np) +g(.)g(.)g(.)g(.)h(.)24 b Fb(25)75 1589 y Fd(rl_push_ma)o(cr)o(o_i)o(np) o(ut)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(34)75 1477 +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(34)75 1633 y Fd(rl_read_in)o(it)o(_fi)o(le)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -19 b Fb(31)75 1521 y Fd(rl_read_ke)o(y)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g +19 b Fb(31)75 1677 y Fd(rl_read_ke)o(y)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)75 1566 y +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)75 1720 y Fd(rl_readlin)o(e_)o(nam)o(e)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -19 b Fb(25)75 1610 y Fd(rl_readlin)o(e_)o(sta)o(te)5 +19 b Fb(25)75 1764 y Fd(rl_readlin)o(e_)o(sta)o(te)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Fb(26)75 1654 +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Fb(26)75 1808 y Fd(rl_readlin)o(e_)o(ver)o(si)o(on)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 -b Fb(25)75 1698 y Fd(rl_redispl)o(ay)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g +b Fb(25)75 1851 y Fd(rl_redispl)o(ay)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(32)75 1743 y Fd(rl_redispl)o(ay)o(_fu)o +g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(32)75 1895 y Fd(rl_redispl)o(ay)o(_fu)o (nc)o(tio)o(n)9 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(26)75 1787 y +g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(26)75 1939 y Fd(rl_replace)o(_l)o(ine)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -20 b Fb(35)75 1831 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9 +20 b Fb(35)75 1982 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Fb(40)75 1875 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o +f(.)g(.)g(.)g(.)25 b Fb(40)75 2026 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o (te)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(33)75 1920 +(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(33)75 2069 y Fd(rl_reset_t)o(er)o(min)o(al)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -19 b Fb(35)75 1964 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5 +19 b Fb(35)75 2113 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(40)75 2008 y +g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(40)75 2157 y Fd(rl_restore)o(_p)o(rom)o(pt)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Fb(33)75 2052 y Fd(rl_save_pr)o(om)o(pt)8 b Fa(.)s(.)e(.)g(.)g(.)g(.) +b Fb(33)75 2200 y Fd(rl_save_pr)o(om)o(pt)8 b Fa(.)s(.)e(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 2097 y Fd(rl_set_key)7 +(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 2244 y Fd(rl_set_key)7 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 -b Fb(30)75 2141 y Fd(rl_set_key)o(bo)o(ard)o(_i)o(npu)o(t_t)o(im)o(eou) +b Fb(30)75 2288 y Fd(rl_set_key)o(bo)o(ard)o(_i)o(npu)o(t_t)o(im)o(eou) o(t)6 b Fa(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Fb(35)75 2185 y Fd(rl_set_key)o(ma)o(p)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f +b Fb(35)75 2331 y Fd(rl_set_key)o(ma)o(p)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)22 b Fb(29)75 2229 y Fd(rl_set_par)o(en)o(_bl)o +h(.)f(.)g(.)g(.)g(.)g(.)22 b Fb(29)75 2375 y Fd(rl_set_par)o(en)o(_bl)o (in)o(k_t)o(ime)o(ou)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(37)75 2274 y Fd(rl_set_pro)o(mp)o(t)9 +(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(37)75 2419 y Fd(rl_set_pro)o(mp)o(t)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Fb(34)75 2318 y Fd(rl_set_scr)o(ee)o(n_s)o(iz)o(e)5 -b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(40)1012 149 y -Fd(rl_set_sign)o(al)o(s)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)21 b Fb(41)1012 193 y Fd(rl_show_cha)o(r)6 b Fa(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(33)1012 237 y -Fd(rl_special_)o(pr)o(efi)o(xe)o(s)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 -b Fb(45)1012 280 y Fd(rl_startup_)o(ho)o(ok)7 b Fa(.)s(.)f(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)21 b Fb(25)1012 324 y Fd(rl_stuff_ch)o(ar)8 -b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 -b Fb(34)1012 367 y Fd(rl_terminal)o(_n)o(ame)6 b Fa(.)s(.)g(.)g(.)g(.)h +b Fb(34)1012 149 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6 +b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(40)1012 193 y Fd(rl_set_sign)o(al)o(s)8 +b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b +Fb(41)1012 237 y Fd(rl_show_cha)o(r)6 b Fa(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) +g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(33)1012 281 y Fd(rl_special_)o(pr)o +(efi)o(xe)o(s)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) +h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fb(45)1012 +325 y Fd(rl_startup_)o(ho)o(ok)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) +g(.)g(.)21 b Fb(25)1012 368 y Fd(rl_stuff_ch)o(ar)8 b +Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g +(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 +b Fb(34)1012 412 y Fd(rl_terminal)o(_n)o(ame)6 b Fa(.)s(.)g(.)g(.)g(.)h (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)20 b Fb(25)1012 411 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o +h(.)f(.)g(.)g(.)20 b Fb(25)1012 456 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o (_bi)o(nd)o(ing)o(s)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)21 b Fb(35)1012 455 y Fd(rl_tty_unse)o(t_)o(def)o(au)o +(.)h(.)f(.)g(.)21 b Fb(35)1012 500 y Fd(rl_tty_unse)o(t_)o(def)o(au)o (lt_)o(bi)o(ndi)o(ngs)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)20 b Fb(35)1012 498 y Fd(rl_unbind_c)o(om)o(man)o(d_)o(in_)o +g(.)g(.)20 b Fb(35)1012 544 y Fd(rl_unbind_c)o(om)o(man)o(d_)o(in_)o (ma)o(p)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)23 b Fb(30)1012 542 y Fd(rl_unbind_f)o(un)o(cti)o(on)o +(.)g(.)h(.)f(.)23 b Fb(30)1012 587 y Fd(rl_unbind_f)o(un)o(cti)o(on)o (_in)o(_m)o(ap)9 b Fa(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)23 b Fb(30)1012 585 y Fd(rl_unbind_k)o(ey)8 +(.)g(.)g(.)g(.)g(.)23 b Fb(30)1012 631 y Fd(rl_unbind_k)o(ey)8 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 -b Fb(30)1012 629 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s +b Fb(30)1012 675 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)17 b Fb(30)1012 673 y Fd(rl_username)o(_c)o +g(.)g(.)g(.)h(.)f(.)g(.)17 b Fb(30)1012 719 y Fd(rl_username)o(_c)o (omp)o(le)o(tio)o(n_)o(fun)o(cti)o(on)t Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)18 b Fb(43)1012 716 y Fd(rl_variable)o(_b)o(ind)6 +g(.)h(.)f(.)g(.)18 b Fb(43)1012 763 y Fd(rl_variable)o(_b)o(ind)6 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Fb(37)1012 -760 y Fd(rl_variable)o(_d)o(ump)o(er)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f +806 y Fd(rl_variable)o(_d)o(ump)o(er)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -19 b Fb(37)1012 886 y Fr(S)1012 944 y Fd(self-insert)9 +19 b Fb(37)1012 933 y Fr(S)1012 992 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o(\))6 b Fa(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 987 y Fd(set-mark)10 +h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1035 y Fd(set-mark)10 b(\(C-@\))g Fa(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Fb(18)1012 1031 y(sho)o(w-all-if-am)o(bigu)q(ous)14 +b Fb(18)1012 1079 y(sho)o(w-all-if-am)o(bigu)q(ous)14 b Fa(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(7)1012 1074 +(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(7)1012 1123 y(sho)o(w-all-if-unmo)q(di)q(\014ed)7 b Fa(.)i(.)d(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -19 b Fb(7)1012 1118 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c +19 b Fb(7)1012 1167 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c Fa(.)d(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)22 b Fb(18)1012 1238 y Fr(T)1012 1296 y Fd(tab-insert)9 -b(\(M-)1281 1294 y Fk(h)p 1292 1268 74 2 v 1292 1296 -a Fj(T)m(AB)p 1292 1304 V 1364 1294 a Fk(i)1379 1296 +(.)g(.)g(.)22 b Fb(18)1012 1288 y Fr(T)1012 1347 y Fd(tab-insert)9 +b(\(M-)1281 1345 y Fk(h)p 1292 1319 74 2 v 1292 1347 +a Fj(T)m(AB)p 1292 1354 V 1364 1345 a Fk(i)1379 1347 y Fd(\))e Fa(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fb(15)1012 1340 +f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fb(15)1012 1391 y Fd(tilde-expan)o(d)10 b(\(M-~\))f Fa(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 -b Fb(18)1012 1384 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d +b Fb(18)1012 1434 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d Fa(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1427 y Fd(transpose-w)o(or)o(ds)9 +(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1478 y Fd(transpose-w)o(or)o(ds)9 b(\(M-t\))d Fa(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1553 y -Fr(U)1012 1611 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c +(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1605 y +Fr(U)1012 1663 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c Fa(.)t(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)21 b Fb(18)1012 1655 y Fd(universal-a)o(rg)o +(.)g(.)h(.)f(.)g(.)g(.)21 b Fb(18)1012 1707 y Fd(universal-a)o(rg)o (ume)o(nt)9 b(\(\))d Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(17)1012 -1698 y Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))5 b -Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)18 b Fb(16)1012 1742 y Fd(unix-word-r)o(ub)o(out)9 -b(\(C-w\))d Fa(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fb(16)1012 1785 y Fd(upcase-word)9 -b(\(M-u\))e Fa(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fb(15)1012 -1911 y Fr(V)1012 1969 y Fd(vi-editing-)o(mo)o(de)9 b(\(M-C-j\))c -Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)18 b Fb(19)1012 2013 y(visible-stats)c Fa(.)6 -b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 -b Fb(7)1012 2129 y Fr(Y)1012 2187 y Fd(yank)12 b(\(C-y\))5 +1751 y Fd(unix-filena)o(me)o(-ru)o(bo)o(ut)9 b(\(\))c +Fa(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g +(.)h(.)f(.)18 b Fb(16)1012 1795 y Fd(unix-line-d)o(is)o(car)o(d)10 +b(\(C-u\))5 b Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(16)1012 1839 y Fd(unix-word-r)o(ub)o +(out)9 b(\(C-w\))d Fa(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fb(16)1012 1882 +y Fd(upcase-word)9 b(\(M-u\))e Fa(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f +(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 +b Fb(15)1012 2009 y Fr(V)1012 2068 y Fd(vi-editing-)o(mo)o(de)9 +b(\(M-C-j\))c Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) +g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(19)1012 2111 y(visible-stats)c +Fa(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) +f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 +b Fb(7)1012 2229 y Fr(Y)1012 2287 y Fd(yank)12 b(\(C-y\))5 b Fa(.)t(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Fb(16)1012 2231 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c +b Fb(17)1012 2331 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Fb(14)1012 2274 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d +b Fb(14)1012 2375 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(14)1012 2318 y Fd(yank-pop)10 +(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(14)1012 2419 y Fd(yank-pop)10 b(\(M-y\))g Fa(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(17)p eop -%%Page: 68 72 -68 71 bop 75 -58 a Ft(68)1299 b(GNU)15 b(Readline)h(Library)p +%%Page: 70 74 +70 73 bop 75 -58 a Ft(70)1299 b(GNU)15 b(Readline)h(Library)p eop %%Trailer end diff --git a/lib/readline/doc/rlman.aux b/lib/readline/doc/rlman.aux index b54c096c..b5c2d1cb 100644 --- a/lib/readline/doc/rlman.aux +++ b/lib/readline/doc/rlman.aux @@ -140,17 +140,17 @@ @xrdef{Completion Variables-pg}{43} @xrdef{Completion Variables-snt}{Section@tie 2.6.3} @xrdef{A Short Completion Example-title}{A Short Completion Example} -@xrdef{A Short Completion Example-pg}{46} +@xrdef{A Short Completion Example-pg}{47} @xrdef{A Short Completion Example-snt}{Section@tie 2.6.4} @xrdef{Copying This Manual-title}{Copying This Manual} -@xrdef{Copying This Manual-pg}{55} +@xrdef{Copying This Manual-pg}{57} @xrdef{Copying This Manual-snt}{Appendix@tie @char65{}} @xrdef{GNU Free Documentation License-title}{GNU Free Documentation License} -@xrdef{GNU Free Documentation License-pg}{55} +@xrdef{GNU Free Documentation License-pg}{57} @xrdef{GNU Free Documentation License-snt}{Section@tie @char65.1} @xrdef{Concept Index-title}{Concept Index} -@xrdef{Concept Index-pg}{63} +@xrdef{Concept Index-pg}{65} @xrdef{Concept Index-snt}{} @xrdef{Function and Variable Index-title}{Function and Variable Index} -@xrdef{Function and Variable Index-pg}{65} +@xrdef{Function and Variable Index-pg}{67} @xrdef{Function and Variable Index-snt}{} diff --git a/lib/readline/doc/rlman.cp b/lib/readline/doc/rlman.cp index 8b165829..30f7d906 100644 --- a/lib/readline/doc/rlman.cp +++ b/lib/readline/doc/rlman.cp @@ -9,4 +9,4 @@ \entry{variables, readline}{5}{variables, readline} \entry{readline, function}{21}{readline, function} \entry{application-specific completion functions}{41}{application-specific completion functions} -\entry{FDL, GNU Free Documentation License}{55}{FDL, GNU Free Documentation License} +\entry{FDL, GNU Free Documentation License}{57}{FDL, GNU Free Documentation License} diff --git a/lib/readline/doc/rlman.cps b/lib/readline/doc/rlman.cps index f4ec8c77..380e3345 100644 --- a/lib/readline/doc/rlman.cps +++ b/lib/readline/doc/rlman.cps @@ -5,7 +5,7 @@ \initial {E} \entry {editing command lines}{1} \initial {F} -\entry {FDL, GNU Free Documentation License}{55} +\entry {FDL, GNU Free Documentation License}{57} \initial {I} \entry {initialization file, readline}{4} \entry {interaction, readline}{1} diff --git a/lib/readline/doc/rlman.fn b/lib/readline/doc/rlman.fn index 114fdd07..15ab423d 100644 --- a/lib/readline/doc/rlman.fn +++ b/lib/readline/doc/rlman.fn @@ -60,12 +60,13 @@ \entry{kill-word (M-d)}{16}{\code {kill-word (M-d)}} \entry{backward-kill-word (M-DEL)}{16}{\code {backward-kill-word (M-\key {DEL})}} \entry{unix-word-rubout (C-w)}{16}{\code {unix-word-rubout (C-w)}} +\entry{unix-filename-rubout ()}{16}{\code {unix-filename-rubout ()}} \entry{delete-horizontal-space ()}{16}{\code {delete-horizontal-space ()}} \entry{kill-region ()}{16}{\code {kill-region ()}} \entry{copy-region-as-kill ()}{16}{\code {copy-region-as-kill ()}} \entry{copy-backward-word ()}{16}{\code {copy-backward-word ()}} \entry{copy-forward-word ()}{16}{\code {copy-forward-word ()}} -\entry{yank (C-y)}{16}{\code {yank (C-y)}} +\entry{yank (C-y)}{17}{\code {yank (C-y)}} \entry{yank-pop (M-y)}{17}{\code {yank-pop (M-y)}} \entry{digit-argument (M-0, M-1, ...{} M--)}{17}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}} \entry{universal-argument ()}{17}{\code {universal-argument ()}} @@ -188,7 +189,7 @@ \entry{rl_read_key}{34}{\code {rl_read_key}} \entry{rl_getc}{34}{\code {rl_getc}} \entry{rl_stuff_char}{34}{\code {rl_stuff_char}} -\entry{rl_execute_next}{34}{\code {rl_execute_next}} +\entry{rl_execute_next}{35}{\code {rl_execute_next}} \entry{rl_clear_pending_input}{35}{\code {rl_clear_pending_input}} \entry{rl_set_keyboard_input_timeout}{35}{\code {rl_set_keyboard_input_timeout}} \entry{rl_prep_terminal}{35}{\code {rl_prep_terminal}} @@ -198,7 +199,7 @@ \entry{rl_reset_terminal}{35}{\code {rl_reset_terminal}} \entry{rl_replace_line}{35}{\code {rl_replace_line}} \entry{rl_extend_line_buffer}{35}{\code {rl_extend_line_buffer}} -\entry{rl_initialize}{35}{\code {rl_initialize}} +\entry{rl_initialize}{36}{\code {rl_initialize}} \entry{rl_ding}{36}{\code {rl_ding}} \entry{rl_alphabetic}{36}{\code {rl_alphabetic}} \entry{rl_display_match_list}{36}{\code {rl_display_match_list}} @@ -248,16 +249,20 @@ \entry{rl_basic_word_break_characters}{44}{\code {rl_basic_word_break_characters}} \entry{rl_basic_quote_characters}{44}{\code {rl_basic_quote_characters}} \entry{rl_completer_word_break_characters}{45}{\code {rl_completer_word_break_characters}} +\entry{rl_completion_word_break_hook}{45}{\code {rl_completion_word_break_hook}} \entry{rl_completer_quote_characters}{45}{\code {rl_completer_quote_characters}} \entry{rl_filename_quote_characters}{45}{\code {rl_filename_quote_characters}} \entry{rl_special_prefixes}{45}{\code {rl_special_prefixes}} \entry{rl_completion_query_items}{45}{\code {rl_completion_query_items}} \entry{rl_completion_append_character}{45}{\code {rl_completion_append_character}} \entry{rl_completion_suppress_append}{45}{\code {rl_completion_suppress_append}} -\entry{rl_completion_mark_symlink_dirs}{45}{\code {rl_completion_mark_symlink_dirs}} -\entry{rl_ignore_completion_duplicates}{45}{\code {rl_ignore_completion_duplicates}} +\entry{rl_completion_quote_character}{45}{\code {rl_completion_quote_character}} +\entry{rl_completion_suppress_quote}{46}{\code {rl_completion_suppress_quote}} +\entry{rl_completion_found_quote}{46}{\code {rl_completion_found_quote}} +\entry{rl_completion_mark_symlink_dirs}{46}{\code {rl_completion_mark_symlink_dirs}} +\entry{rl_ignore_completion_duplicates}{46}{\code {rl_ignore_completion_duplicates}} \entry{rl_filename_completion_desired}{46}{\code {rl_filename_completion_desired}} \entry{rl_filename_quoting_desired}{46}{\code {rl_filename_quoting_desired}} \entry{rl_attempted_completion_over}{46}{\code {rl_attempted_completion_over}} \entry{rl_completion_type}{46}{\code {rl_completion_type}} -\entry{rl_inhibit_completion}{46}{\code {rl_inhibit_completion}} +\entry{rl_inhibit_completion}{47}{\code {rl_inhibit_completion}} diff --git a/lib/readline/doc/rlman.fns b/lib/readline/doc/rlman.fns index b1dfd486..b8e0863e 100644 --- a/lib/readline/doc/rlman.fns +++ b/lib/readline/doc/rlman.fns @@ -133,12 +133,16 @@ \entry {\code {rl_completion_append_character}}{45} \entry {\code {rl_completion_display_matches_hook}}{44} \entry {\code {rl_completion_entry_function}}{42, 43} -\entry {\code {rl_completion_mark_symlink_dirs}}{45} +\entry {\code {rl_completion_found_quote}}{46} +\entry {\code {rl_completion_mark_symlink_dirs}}{46} \entry {\code {rl_completion_matches}}{42} \entry {\code {rl_completion_mode}}{42} \entry {\code {rl_completion_query_items}}{45} +\entry {\code {rl_completion_quote_character}}{45} \entry {\code {rl_completion_suppress_append}}{45} +\entry {\code {rl_completion_suppress_quote}}{46} \entry {\code {rl_completion_type}}{46} +\entry {\code {rl_completion_word_break_hook}}{45} \entry {\code {rl_copy_keymap}}{28} \entry {\code {rl_copy_text}}{34} \entry {\code {rl_crlf}}{33} @@ -157,7 +161,7 @@ \entry {\code {rl_end_undo_group}}{32} \entry {\code {rl_erase_empty_line}}{24} \entry {\code {rl_event_hook}}{26} -\entry {\code {rl_execute_next}}{34} +\entry {\code {rl_execute_next}}{35} \entry {\code {rl_executing_keymap}}{26} \entry {\code {rl_executing_macro}}{26} \entry {\code {rl_expand_prompt}}{33} @@ -184,10 +188,10 @@ \entry {\code {rl_getc}}{34} \entry {\code {rl_getc_function}}{26} \entry {\code {rl_gnu_readline_p}}{25} -\entry {\code {rl_ignore_completion_duplicates}}{45} +\entry {\code {rl_ignore_completion_duplicates}}{46} \entry {\code {rl_ignore_some_completions_function}}{44} -\entry {\code {rl_inhibit_completion}}{46} -\entry {\code {rl_initialize}}{35} +\entry {\code {rl_inhibit_completion}}{47} +\entry {\code {rl_initialize}}{36} \entry {\code {rl_insert_completions}}{42} \entry {\code {rl_insert_text}}{34} \entry {\code {rl_instream}}{25} @@ -269,6 +273,7 @@ \initial {U} \entry {\code {undo (C-_ or C-x C-u)}}{18} \entry {\code {universal-argument ()}}{17} +\entry {\code {unix-filename-rubout ()}}{16} \entry {\code {unix-line-discard (C-u)}}{16} \entry {\code {unix-word-rubout (C-w)}}{16} \entry {\code {upcase-word (M-u)}}{15} @@ -276,7 +281,7 @@ \entry {\code {vi-editing-mode (M-C-j)}}{19} \entry {visible-stats}{7} \initial {Y} -\entry {\code {yank (C-y)}}{16} +\entry {\code {yank (C-y)}}{17} \entry {\code {yank-last-arg (M-. or M-_)}}{14} \entry {\code {yank-nth-arg (M-C-y)}}{14} \entry {\code {yank-pop (M-y)}}{17} diff --git a/lib/readline/doc/rlman.log b/lib/readline/doc/rlman.log index 08f7ef0e..4fa21f57 100644 --- a/lib/readline/doc/rlman.log +++ b/lib/readline/doc/rlman.log @@ -1,9 +1,9 @@ -This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 22 SEP 2003 09:04 -**/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlman.te -xi +This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 27 JUL 2004 09:31 +**/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlm +an.texi -(/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlman.tex -i (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, +(/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlma +n.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, \bindingoffset=\dimen16 \normaloffset=\dimen17 \pagewidth=\dimen18 @@ -34,13 +34,13 @@ i (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, \toksD=\toks18 \boxA=\box19 \countA=\count30 - fonts, + +fonts, \sffam=\fam8 \textleading=\dimen26 \mainmagstep=\count31 \fontdepth=\count32 - -page headings, + page headings, \titlepagetopglue=\skip20 \titlepagebottomglue=\skip21 \evenheadline=\toks19 @@ -81,7 +81,8 @@ page headings, \lastnegativepageno=\count43 \shortappendixwidth=\dimen33 \tocindent=\dimen34 - environments, + +environments, \errorbox=\box22 \lispnarrowing=\skip30 \envskipamount=\skip31 @@ -94,8 +95,7 @@ page headings, \lskip=\skip35 \rskip=\skip36 \tabw=\dimen38 - -defuns, + defuns, \defbodyindent=\skip37 \defargsindent=\skip38 \deflastargmargin=\skip39 @@ -186,7 +186,7 @@ gnored[] | [11] [12] [13] [14] [15] [16] [17] [18]) (rltech.texi Chapter 2 [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] -Underfull \hbox (badness 7379) in paragraph at lines 1757--1762 +Underfull \hbox (badness 7379) in paragraph at lines 1792--1797 []@textrm If an application-specific com-ple-tion func-tion as-signed to @text tt rl_attempted_ @@ -198,16 +198,16 @@ tt rl_attempted_ .@glue 3.65 plus 1.825 minus 1.21666 .etc. -[46] [47] [48] [49] [50] [51] [52] [53]) Appendix A [54] (fdl.texi [55] -[56] [57] [58] [59] [60]) (Concept Index) [61] [62] (rlman.cps) -(Function and Variable Index) [63] [64] (rlman.fns [65] [66]) [67] [68] ) +[46] [47] [48] [49] [50] [51] [52] [53] [54]) Appendix A [55] [56] (fdl.texi +[57] [58] [59] [60] [61] [62]) (Concept Index) [63] [64] (rlman.cps) +(Function and Variable Index) [65] [66] (rlman.fns [67] [68]) [69] [70] ) Here is how much of TeX's memory you used: 1489 strings out of 13013 - 18350 string characters out of 97233 - 56934 words of memory out of 263001 + 18360 string characters out of 97233 + 58248 words of memory out of 263001 2361 multiletter control sequences out of 10000+0 31953 words of font info for 111 fonts, out of 400000 for 1000 19 hyphenation exceptions out of 1000 - 15i,8n,17p,304b,695s stack positions out of 300i,100n,500p,50000b,4000s + 15i,8n,17p,309b,695s stack positions out of 300i,100n,500p,50000b,4000s -Output written on rlman.dvi (72 pages, 270424 bytes). +Output written on rlman.dvi (74 pages, 274068 bytes). diff --git a/lib/readline/doc/rlman.toc b/lib/readline/doc/rlman.toc index 9d08ef50..0dc63018 100644 --- a/lib/readline/doc/rlman.toc +++ b/lib/readline/doc/rlman.toc @@ -45,9 +45,9 @@ \subsecentry{How Completing Works}{2}{6}{1}{41} \subsecentry{Completion Functions}{2}{6}{2}{42} \subsecentry{Completion Variables}{2}{6}{3}{43} -\subsecentry{A Short Completion Example}{2}{6}{4}{46} -\appendixentry{Copying This Manual}{A}{55} -\secentry{GNU Free Documentation License}{A}{1}{55} -\subsecentry{ADDENDUM: How to use this License for your documents}{A}{1}{1}{61} -\unnumbchapentry{Concept Index}{2}{63} -\unnumbchapentry{Function and Variable Index}{2}{65} +\subsecentry{A Short Completion Example}{2}{6}{4}{47} +\appendixentry{Copying This Manual}{A}{57} +\secentry{GNU Free Documentation License}{A}{1}{57} +\subsecentry{ADDENDUM: How to use this License for your documents}{A}{1}{1}{63} +\unnumbchapentry{Concept Index}{2}{65} +\unnumbchapentry{Function and Variable Index}{2}{67} diff --git a/lib/readline/doc/rluserman.dvi b/lib/readline/doc/rluserman.dvi Binary files differindex f77eb4e6..55667c31 100644 --- a/lib/readline/doc/rluserman.dvi +++ b/lib/readline/doc/rluserman.dvi diff --git a/lib/readline/doc/rluserman.fn b/lib/readline/doc/rluserman.fn index e073421a..14643e56 100644 --- a/lib/readline/doc/rluserman.fn +++ b/lib/readline/doc/rluserman.fn @@ -38,12 +38,13 @@ \entry{kill-word (M-d)}{16}{\code {kill-word (M-d)}} \entry{backward-kill-word (M-DEL)}{16}{\code {backward-kill-word (M-\key {DEL})}} \entry{unix-word-rubout (C-w)}{16}{\code {unix-word-rubout (C-w)}} +\entry{unix-filename-rubout ()}{16}{\code {unix-filename-rubout ()}} \entry{delete-horizontal-space ()}{16}{\code {delete-horizontal-space ()}} \entry{kill-region ()}{16}{\code {kill-region ()}} \entry{copy-region-as-kill ()}{16}{\code {copy-region-as-kill ()}} \entry{copy-backward-word ()}{16}{\code {copy-backward-word ()}} \entry{copy-forward-word ()}{16}{\code {copy-forward-word ()}} -\entry{yank (C-y)}{16}{\code {yank (C-y)}} +\entry{yank (C-y)}{17}{\code {yank (C-y)}} \entry{yank-pop (M-y)}{17}{\code {yank-pop (M-y)}} \entry{digit-argument (M-0, M-1, ...{} M--)}{17}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}} \entry{universal-argument ()}{17}{\code {universal-argument ()}} diff --git a/lib/readline/doc/rluserman.fns b/lib/readline/doc/rluserman.fns index 95140153..0ead5878 100644 --- a/lib/readline/doc/rluserman.fns +++ b/lib/readline/doc/rluserman.fns @@ -82,13 +82,14 @@ \initial {U} \entry {\code {undo (C-_ or C-x C-u)}}{18} \entry {\code {universal-argument ()}}{17} +\entry {\code {unix-filename-rubout ()}}{16} \entry {\code {unix-line-discard (C-u)}}{16} \entry {\code {unix-word-rubout (C-w)}}{16} \entry {\code {upcase-word (M-u)}}{15} \initial {V} \entry {\code {vi-editing-mode (M-C-j)}}{19} \initial {Y} -\entry {\code {yank (C-y)}}{16} +\entry {\code {yank (C-y)}}{17} \entry {\code {yank-last-arg (M-. or M-_)}}{14} \entry {\code {yank-nth-arg (M-C-y)}}{14} \entry {\code {yank-pop (M-y)}}{17} diff --git a/lib/readline/doc/rluserman.html b/lib/readline/doc/rluserman.html index 1aa77787..6055fbe7 100644 --- a/lib/readline/doc/rluserman.html +++ b/lib/readline/doc/rluserman.html @@ -1,6 +1,6 @@ <HTML> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<!-- Created on September, 22 2003 by texi2html 1.64 --> +<!-- Created on July, 27 2004 by texi2html 1.64 --> <!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> @@ -1547,50 +1547,58 @@ The killed text is saved on the kill-ring. <P> <A NAME="IDX107"></A> -<DT><CODE>delete-horizontal-space ()</CODE> +<DT><CODE>unix-filename-rubout ()</CODE> <DD><A NAME="IDX108"></A> -Delete all spaces and tabs around point. By default, this is unbound. +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. <P> <A NAME="IDX109"></A> -<DT><CODE>kill-region ()</CODE> +<DT><CODE>delete-horizontal-space ()</CODE> <DD><A NAME="IDX110"></A> +Delete all spaces and tabs around point. By default, this is unbound. +<P> + +<A NAME="IDX111"></A> +<DT><CODE>kill-region ()</CODE> +<DD><A NAME="IDX112"></A> Kill the text in the current region. By default, this command is unbound. <P> -<A NAME="IDX111"></A> +<A NAME="IDX113"></A> <DT><CODE>copy-region-as-kill ()</CODE> -<DD><A NAME="IDX112"></A> +<DD><A NAME="IDX114"></A> Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. <P> -<A NAME="IDX113"></A> +<A NAME="IDX115"></A> <DT><CODE>copy-backward-word ()</CODE> -<DD><A NAME="IDX114"></A> +<DD><A NAME="IDX116"></A> Copy the word before point to the kill buffer. The word boundaries are the same as <CODE>backward-word</CODE>. By default, this command is unbound. <P> -<A NAME="IDX115"></A> +<A NAME="IDX117"></A> <DT><CODE>copy-forward-word ()</CODE> -<DD><A NAME="IDX116"></A> +<DD><A NAME="IDX118"></A> Copy the word following point to the kill buffer. The word boundaries are the same as <CODE>forward-word</CODE>. By default, this command is unbound. <P> -<A NAME="IDX117"></A> +<A NAME="IDX119"></A> <DT><CODE>yank (C-y)</CODE> -<DD><A NAME="IDX118"></A> +<DD><A NAME="IDX120"></A> Yank the top of the kill ring into the buffer at point. <P> -<A NAME="IDX119"></A> +<A NAME="IDX121"></A> <DT><CODE>yank-pop (M-y)</CODE> -<DD><A NAME="IDX120"></A> +<DD><A NAME="IDX122"></A> Rotate the kill-ring, and yank the new top. You can only do this if the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. </DL> @@ -1614,16 +1622,16 @@ the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. <!--docid::SEC18::--> <DL COMPACT> -<A NAME="IDX121"></A> +<A NAME="IDX123"></A> <DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE> -<DD><A NAME="IDX122"></A> +<DD><A NAME="IDX124"></A> Add this digit to the argument already accumulating, or start a new argument. <KBD>M--</KBD> starts a negative argument. <P> -<A NAME="IDX123"></A> +<A NAME="IDX125"></A> <DT><CODE>universal-argument ()</CODE> -<DD><A NAME="IDX124"></A> +<DD><A NAME="IDX126"></A> 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. @@ -1658,30 +1666,30 @@ By default, this is not bound to a key. <P> <DL COMPACT> -<A NAME="IDX125"></A> +<A NAME="IDX127"></A> <DT><CODE>complete (<KBD>TAB</KBD>)</CODE> -<DD><A NAME="IDX126"></A> +<DD><A NAME="IDX128"></A> Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion. <P> -<A NAME="IDX127"></A> +<A NAME="IDX129"></A> <DT><CODE>possible-completions (M-?)</CODE> -<DD><A NAME="IDX128"></A> +<DD><A NAME="IDX130"></A> List the possible completions of the text before point. <P> -<A NAME="IDX129"></A> +<A NAME="IDX131"></A> <DT><CODE>insert-completions (M-*)</CODE> -<DD><A NAME="IDX130"></A> +<DD><A NAME="IDX132"></A> Insert all completions of the text before point that would have been generated by <CODE>possible-completions</CODE>. <P> -<A NAME="IDX131"></A> +<A NAME="IDX133"></A> <DT><CODE>menu-complete ()</CODE> -<DD><A NAME="IDX132"></A> +<DD><A NAME="IDX134"></A> Similar to <CODE>complete</CODE>, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of <CODE>menu-complete</CODE> steps through the list @@ -1696,9 +1704,9 @@ This command is intended to be bound to <KBD>TAB</KBD>, but is unbound by default. <P> -<A NAME="IDX133"></A> +<A NAME="IDX135"></A> <DT><CODE>delete-char-or-list ()</CODE> -<DD><A NAME="IDX134"></A> +<DD><A NAME="IDX136"></A> Deletes the character under the cursor if not at the beginning or end of the line (like <CODE>delete-char</CODE>). If at the end of the line, behaves identically to @@ -1727,22 +1735,22 @@ This command is unbound by default. <!--docid::SEC20::--> <DL COMPACT> -<A NAME="IDX135"></A> +<A NAME="IDX137"></A> <DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD><A NAME="IDX136"></A> +<DD><A NAME="IDX138"></A> Begin saving the characters typed into the current keyboard macro. <P> -<A NAME="IDX137"></A> +<A NAME="IDX139"></A> <DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD><A NAME="IDX138"></A> +<DD><A NAME="IDX140"></A> Stop saving the characters typed into the current keyboard macro and save the definition. <P> -<A NAME="IDX139"></A> +<A NAME="IDX141"></A> <DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD><A NAME="IDX140"></A> +<DD><A NAME="IDX142"></A> Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. <P> @@ -1768,87 +1776,87 @@ in the macro appear as if typed at the keyboard. <!--docid::SEC21::--> <DL COMPACT> -<A NAME="IDX141"></A> +<A NAME="IDX143"></A> <DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD><A NAME="IDX142"></A> +<DD><A NAME="IDX144"></A> Read in the contents of the <VAR>inputrc</VAR> file, and incorporate any bindings or variable assignments found there. <P> -<A NAME="IDX143"></A> +<A NAME="IDX145"></A> <DT><CODE>abort (C-g)</CODE> -<DD><A NAME="IDX144"></A> +<DD><A NAME="IDX146"></A> Abort the current editing command and ring the terminal's bell (subject to the setting of <CODE>bell-style</CODE>). <P> -<A NAME="IDX145"></A> +<A NAME="IDX147"></A> <DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE> -<DD><A NAME="IDX146"></A> +<DD><A NAME="IDX148"></A> If the metafied character <VAR>x</VAR> is lowercase, run the command that is bound to the corresponding uppercase character. <P> -<A NAME="IDX147"></A> +<A NAME="IDX149"></A> <DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE> -<DD><A NAME="IDX148"></A> +<DD><A NAME="IDX150"></A> Metafy the next character typed. This is for keyboards without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing <KBD>M-f</KBD>. <P> -<A NAME="IDX149"></A> +<A NAME="IDX151"></A> <DT><CODE>undo (C-_ or C-x C-u)</CODE> -<DD><A NAME="IDX150"></A> +<DD><A NAME="IDX152"></A> Incremental undo, separately remembered for each line. <P> -<A NAME="IDX151"></A> +<A NAME="IDX153"></A> <DT><CODE>revert-line (M-r)</CODE> -<DD><A NAME="IDX152"></A> +<DD><A NAME="IDX154"></A> Undo all changes made to this line. This is like executing the <CODE>undo</CODE> command enough times to get back to the beginning. <P> -<A NAME="IDX153"></A> +<A NAME="IDX155"></A> <DT><CODE>tilde-expand (M-~)</CODE> -<DD><A NAME="IDX154"></A> +<DD><A NAME="IDX156"></A> Perform tilde expansion on the current word. <P> -<A NAME="IDX155"></A> +<A NAME="IDX157"></A> <DT><CODE>set-mark (C-@)</CODE> -<DD><A NAME="IDX156"></A> +<DD><A NAME="IDX158"></A> Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. <P> -<A NAME="IDX157"></A> +<A NAME="IDX159"></A> <DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD><A NAME="IDX158"></A> +<DD><A NAME="IDX160"></A> 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. <P> -<A NAME="IDX159"></A> +<A NAME="IDX161"></A> <DT><CODE>character-search (C-])</CODE> -<DD><A NAME="IDX160"></A> +<DD><A NAME="IDX162"></A> A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences. <P> -<A NAME="IDX161"></A> +<A NAME="IDX163"></A> <DT><CODE>character-search-backward (M-C-])</CODE> -<DD><A NAME="IDX162"></A> +<DD><A NAME="IDX164"></A> A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences. <P> -<A NAME="IDX163"></A> +<A NAME="IDX165"></A> <DT><CODE>insert-comment (M-#)</CODE> -<DD><A NAME="IDX164"></A> +<DD><A NAME="IDX166"></A> Without a numeric argument, the value of the <CODE>comment-begin</CODE> variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if @@ -1859,43 +1867,43 @@ the line. In either case, the line is accepted as if a newline had been typed. <P> -<A NAME="IDX165"></A> +<A NAME="IDX167"></A> <DT><CODE>dump-functions ()</CODE> -<DD><A NAME="IDX166"></A> +<DD><A NAME="IDX168"></A> 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</VAR> file. This command is unbound by default. <P> -<A NAME="IDX167"></A> +<A NAME="IDX169"></A> <DT><CODE>dump-variables ()</CODE> -<DD><A NAME="IDX168"></A> +<DD><A NAME="IDX170"></A> 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</VAR> file. This command is unbound by default. <P> -<A NAME="IDX169"></A> +<A NAME="IDX171"></A> <DT><CODE>dump-macros ()</CODE> -<DD><A NAME="IDX170"></A> +<DD><A NAME="IDX172"></A> 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</VAR> file. This command is unbound by default. <P> -<A NAME="IDX171"></A> +<A NAME="IDX173"></A> <DT><CODE>emacs-editing-mode (C-e)</CODE> -<DD><A NAME="IDX172"></A> +<DD><A NAME="IDX174"></A> When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE> editing mode. <P> -<A NAME="IDX173"></A> +<A NAME="IDX175"></A> <DT><CODE>vi-editing-mode (M-C-j)</CODE> -<DD><A NAME="IDX174"></A> +<DD><A NAME="IDX176"></A> When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE> editing mode. <P> @@ -1982,7 +1990,7 @@ so forth. <!--docid::SEC24::--> <P> -<A NAME="IDX175"></A> +<A NAME="IDX177"></A> <center> Version 1.2, November 2002 </center> @@ -2600,7 +2608,7 @@ to permit their use in free software. <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> </TR></TABLE> <H1>About this document</H1> -This document was generated by <I>Chet Ramey</I> on <I>September, 22 2003</I> +This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> <P></P> @@ -2762,7 +2770,7 @@ the following structure: <BR> <FONT SIZE="-1"> This document was generated -by <I>Chet Ramey</I> on <I>September, 22 2003</I> +by <I>Chet Ramey</I> on <I>July, 27 2004</I> using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html "><I>texi2html</I></A> diff --git a/lib/readline/doc/rluserman.info b/lib/readline/doc/rluserman.info index 50c6b174..80958ec6 100644 --- a/lib/readline/doc/rluserman.info +++ b/lib/readline/doc/rluserman.info @@ -2,11 +2,11 @@ This is rluserman.info, produced by makeinfo version 4.5 from ./rluserman.texi. This manual describes the end user interface of the GNU Readline Library -(version 5.0, 19 September 2003), a library which aids in the -consistency of user interface across discrete programs which provide a -command line interface. +(version 5.0, 28 January 2004), a library which aids in the consistency +of user interface across discrete programs which provide a command line +interface. - Copyright (C) 1988-2003 Free Software Foundation, Inc. + Copyright (C) 1988-2004 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -1036,6 +1036,11 @@ Killing And Yanking Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. +`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. + `delete-horizontal-space ()' Delete all spaces and tabs around point. By default, this is unbound. @@ -1697,30 +1702,30 @@ permit their use in free software. Tag Table: -Node: Top1341 -Node: Command Line Editing1776 -Node: Introduction and Notation2418 -Node: Readline Interaction4037 -Node: Readline Bare Essentials5225 -Node: Readline Movement Commands7007 -Node: Readline Killing Commands7965 -Node: Readline Arguments9876 -Node: Searching10913 -Node: Readline Init File13057 -Node: Readline Init File Syntax14119 -Node: Conditional Init Constructs25483 -Node: Sample Init File28009 -Node: Bindable Readline Commands31194 -Node: Commands For Moving32245 -Node: Commands For History33096 -Node: Commands For Text35956 -Node: Commands For Killing38672 -Node: Numeric Arguments40624 -Node: Commands For Completion41753 -Node: Keyboard Macros43287 -Node: Miscellaneous Commands43848 -Node: Readline vi Mode47199 -Node: Copying This Manual48115 -Node: GNU Free Documentation License48325 +Node: Top1339 +Node: Command Line Editing1774 +Node: Introduction and Notation2416 +Node: Readline Interaction4035 +Node: Readline Bare Essentials5223 +Node: Readline Movement Commands7005 +Node: Readline Killing Commands7963 +Node: Readline Arguments9874 +Node: Searching10911 +Node: Readline Init File13055 +Node: Readline Init File Syntax14117 +Node: Conditional Init Constructs25481 +Node: Sample Init File28007 +Node: Bindable Readline Commands31192 +Node: Commands For Moving32243 +Node: Commands For History33094 +Node: Commands For Text35954 +Node: Commands For Killing38670 +Node: Numeric Arguments40802 +Node: Commands For Completion41931 +Node: Keyboard Macros43465 +Node: Miscellaneous Commands44026 +Node: Readline vi Mode47377 +Node: Copying This Manual48293 +Node: GNU Free Documentation License48503 End Tag Table diff --git a/lib/readline/doc/rluserman.log b/lib/readline/doc/rluserman.log index 01f9a4dc..a5870c90 100644 --- a/lib/readline/doc/rluserman.log +++ b/lib/readline/doc/rluserman.log @@ -1,9 +1,9 @@ -This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 22 SEP 2003 09:04 -**/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rluserma -n.texi +This is TeX, Version 3.14159 (Web2C 7.3.1) (format=tex 2001.2.12) 27 JUL 2004 09:31 +**/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlu +serman.texi -(/net/granite/fs4/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rluserman -.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, +(/net/celerra-dm1/fs04/src/ns-engr/work/chet/src/bash/src/lib/readline/doc/rlus +erman.texi (texinfo.tex Loading texinfo [version 2003-02-03.16]: Basics, \bindingoffset=\dimen16 \normaloffset=\dimen17 \pagewidth=\dimen18 @@ -187,11 +187,11 @@ gnored[] | [21] [22] [23] [24] [25] [26]) [27] [28] ) Here is how much of TeX's memory you used: 1398 strings out of 13013 - 16279 string characters out of 97233 - 44937 words of memory out of 263001 + 16289 string characters out of 97233 + 44933 words of memory out of 263001 2276 multiletter control sequences out of 10000+0 31953 words of font info for 111 fonts, out of 400000 for 1000 19 hyphenation exceptions out of 1000 - 13i,8n,10p,308b,695s stack positions out of 300i,100n,500p,50000b,4000s + 13i,8n,10p,313b,695s stack positions out of 300i,100n,500p,50000b,4000s -Output written on rluserman.dvi (32 pages, 91652 bytes). +Output written on rluserman.dvi (32 pages, 91852 bytes). diff --git a/lib/readline/doc/rluserman.ps b/lib/readline/doc/rluserman.ps index eb65adcf..dd3249da 100644 --- a/lib/readline/doc/rluserman.ps +++ b/lib/readline/doc/rluserman.ps @@ -8,7 +8,7 @@ %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 300 -o rluserman.ps rluserman.dvi %DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2003.09.22:0904 +%DVIPSSource: TeX output 2004.07.27:0931 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -908,23 +908,23 @@ TeXDict begin %%Page: 1 1 1 0 bop 75 659 a Fp(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p 75 709 1800 17 v 936 757 a Fo(Edition)17 b(5.0,)c(for)i -Fn(Readline)f(Library)g Fo(V)l(ersion)i(5.0.)1559 811 -y(Septem)o(b)q(er)g(2003)75 2467 y Fm(Chet)22 b(Ramey)-6 -b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75 +Fn(Readline)f(Library)g Fo(V)l(ersion)i(5.0.)1609 811 +y(Jan)o(uary)f(2004)75 2467 y Fm(Chet)22 b(Ramey)-6 b(,)23 +b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)75 2534 y(Brian)h(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p 75 2570 1800 9 v eop %%Page: 2 2 -2 1 bop 75 1512 a Fo(This)15 b(man)o(ual)g(describ)q(es)i(the)d(end)i -(user)f(in)o(terface)g(of)f(the)h(GNU)f(Readline)i(Library)f(\(v)o -(ersion)g(5.0,)f(19)75 1567 y(Septem)o(b)q(er)19 b(2003\),)e(a)h -(library)h(whic)o(h)g(aids)g(in)g(the)f(consistency)h(of)f(user)g(in)o -(terface)h(across)e(discrete)75 1621 y(programs)d(whic)o(h)i(pro)o -(vide)g(a)f(command)g(line)i(in)o(terface.)75 1689 y(Cop)o(yrigh)o(t) -301 1688 y(c)289 1689 y Fl(\015)d Fo(1988-2003)f(F)l(ree)i(Soft)o(w)o -(are)f(F)l(oundation,)h(Inc.)75 1756 y(P)o(ermission)i(is)f(gran)o(ted) -g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h -(man)o(ual)f(pro)o(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h -(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h +2 1 bop 75 1512 a Fo(This)20 b(man)o(ual)f(describ)q(es)i(the)f(end)g +(user)f(in)o(terface)h(of)f(the)g(GNU)g(Readline)i(Library)f(\(v)o +(ersion)f(5.0,)75 1567 y(28)e(Jan)o(uary)g(2004\),)f(a)h(library)h +(whic)o(h)g(aids)f(in)h(the)g(consistency)g(of)f(user)g(in)o(terface)h +(across)e(discrete)75 1621 y(programs)e(whic)o(h)i(pro)o(vide)g(a)f +(command)g(line)i(in)o(terface.)75 1689 y(Cop)o(yrigh)o(t)301 +1688 y(c)289 1689 y Fl(\015)d Fo(1988-2004)f(F)l(ree)i(Soft)o(w)o(are)f +(F)l(oundation,)h(Inc.)75 1756 y(P)o(ermission)i(is)f(gran)o(ted)g(to)f +(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o +(ual)f(pro)o(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)f +(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h (copies.)195 1878 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)l(,) h(distribute)h(and/or)e(mo)q(dify)h(this)g(do)q(cumen)o(t)g(under)195 1933 y(the)h(terms)f(of)h(the)g(GNU)g(F)l(ree)g(Do)q(cumen)o(tation)g @@ -1922,114 +1922,119 @@ b(With)11 b(an)g(explicit)i(non-p)q(ositiv)o(e)f(n)o(umeric)g(argumen)o Fn(emacs)e Fo(mo)q(de;)h Fn(vi)g Fo(mo)q(de)h(do)q(es)g(o)o(v)o (erwrite)315 204 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15 b(call)h(to)f Fn(readline\(\))f Fo(starts)f(in)k(insert)e(mo)q(de.)315 -271 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f +269 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f Fn(self-insert)f Fo(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315 -326 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36 -b(Characters)20 b(b)q(ound)i(to)e Fn(backward-)315 381 +324 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36 +b(Characters)20 b(b)q(ound)i(to)e Fn(backward-)315 379 y(delete-char)14 b Fo(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q -(oin)o(t)h(with)f(a)g(space.)315 448 y(By)g(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 559 y Fc(1.4.4)30 b(Killing)20 -b(And)h(Y)-5 b(anking)75 680 y Fn(kill-line)14 b(\(C-k\))315 -735 y Fo(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)75 814 y Fn(backward-kill-line)e(\(C-x)h(Rubout\))315 -869 y Fo(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 948 y Fn(unix-line-discard)e(\(C-u\))315 1003 +(oin)o(t)h(with)f(a)g(space.)315 444 y(By)g(default,)h(this)f(command)g +(is)h(un)o(b)q(ound.)75 550 y Fc(1.4.4)30 b(Killing)20 +b(And)h(Y)-5 b(anking)75 669 y Fn(kill-line)14 b(\(C-k\))315 +724 y Fo(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f +(the)g(line.)75 800 y Fn(backward-kill-line)e(\(C-x)h(Rubout\))315 +854 y Fo(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g +(line.)75 930 y Fn(unix-line-discard)e(\(C-u\))315 985 y Fo(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1082 y Fn(kill-whole-line) -e(\(\))315 1137 y Fo(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren) +(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1060 y Fn(kill-whole-line) +e(\(\))315 1115 y Fo(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren) o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29 -b(By)19 b(default,)315 1192 y(this)d(is)f(un)o(b)q(ound.)75 -1271 y Fn(kill-word)f(\(M-d\))315 1325 y Fo(Kill)j(from)d(p)q(oin)o(t)h +b(By)19 b(default,)315 1170 y(this)d(is)f(un)o(b)q(ound.)75 +1245 y Fn(kill-word)f(\(M-d\))315 1300 y Fo(Kill)j(from)d(p)q(oin)o(t)h (to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o -(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1380 y(of)h(the)g(next)g(w)o +(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1355 y(of)h(the)g(next)g(w)o (ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g -Fn(forward-word)p Fo(.)75 1459 y Fn(backward-kill-word)e(\(M-)592 -1457 y Ff(h)p 603 1431 73 2 v 603 1459 a Fe(DEL)p 603 -1467 V 674 1457 a Ff(i)689 1459 y Fn(\))315 1514 y Fo(Kill)k(the)d(w)o +Fn(forward-word)p Fo(.)75 1430 y Fn(backward-kill-word)e(\(M-)592 +1428 y Ff(h)p 603 1402 73 2 v 603 1430 a Fe(DEL)p 603 +1438 V 674 1428 a Ff(i)689 1430 y Fn(\))315 1485 y Fo(Kill)k(the)d(w)o (ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f -(the)h(same)f(as)g Fn(backward-word)p Fo(.)75 1593 y -Fn(unix-word-rubout)f(\(C-w\))315 1648 y Fo(Kill)18 b(the)e(w)o(ord)f +(the)h(same)f(as)g Fn(backward-word)p Fo(.)75 1560 y +Fn(unix-word-rubout)f(\(C-w\))315 1615 y Fo(Kill)18 b(the)e(w)o(ord)f (b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g -(b)q(oundary)l(.)23 b(The)16 b(killed)315 1703 y(text)f(is)g(sa)o(v)o -(ed)g(on)g(the)h(kill-ring.)75 1782 y Fn(delete-horizontal-space)c -(\(\))315 1836 y Fo(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q -(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 -1915 y Fn(kill-region)e(\(\))315 1970 y Fo(Kill)j(the)f(text)e(in)i -(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 2049 y Fn(copy-region-as-kill)d(\(\))315 -2104 y Fo(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h -(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o -(a)o(y)l(.)315 2159 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 2238 y Fn(copy-backward-word)d(\(\))315 2293 -y Fo(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i -(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 -2348 y(same)c(as)g Fn(backward-word)p Fo(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)75 2427 y Fn(copy-forward-word)d(\(\)) -315 2481 y Fo(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f +(b)q(oundary)l(.)23 b(The)16 b(killed)315 1670 y(text)f(is)g(sa)o(v)o +(ed)g(on)g(the)h(kill-ring.)75 1745 y Fn(unix-filename-rubout)c(\(\)) +315 1800 y Fo(Kill)20 b(the)f(w)o(ord)e(b)q(ehind)j(p)q(oin)o(t,)f +(using)g(white)g(space)f(and)h(the)f(slash)h(c)o(haracter)e(as)h(the) +315 1855 y(w)o(ord)d(b)q(oundaries.)21 b(The)15 b(killed)j(text)c(is)i +(sa)o(v)o(ed)f(on)g(the)g(kill-ring.)75 1930 y Fn +(delete-horizontal-space)d(\(\))315 1985 y Fo(Delete)k(all)g(spaces)f +(and)h(tabs)e(around)i(p)q(oin)o(t.)k(By)15 b(default,)h(this)f(is)h +(un)o(b)q(ound.)75 2060 y Fn(kill-region)e(\(\))315 2115 +y Fo(Kill)j(the)f(text)e(in)i(the)g(curren)o(t)f(region.)20 +b(By)15 b(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 +2190 y Fn(copy-region-as-kill)d(\(\))315 2245 y Fo(Cop)o(y)j(the)i +(text)e(in)i(the)f(region)g(to)g(the)g(kill)h(bu\013er,)f(so)g(it)g +(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o(a)o(y)l(.)315 +2300 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 +2375 y Fn(copy-backward-word)d(\(\))315 2430 y Fo(Cop)o(y)19 +b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i(kill)h +(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 +2485 y(same)c(as)g Fn(backward-word)p Fo(.)j(By)d(default,)g(this)h +(command)f(is)h(un)o(b)q(ound.)75 2560 y Fn(copy-forward-word)d(\(\)) +315 2615 y Fo(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f (to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e -(the)315 2536 y(same)g(as)g Fn(forward-word)p Fo(.)j(By)d(default,)h -(this)f(command)g(is)h(un)o(b)q(ound.)75 2615 y Fn(yank)f(\(C-y\))315 -2670 y Fo(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the) -h(bu\013er)f(at)f(p)q(oin)o(t.)p eop +(the)315 2670 y(same)g(as)g Fn(forward-word)p Fo(.)j(By)d(default,)h +(this)f(command)g(is)h(un)o(b)q(ound.)p eop %%Page: 17 21 17 20 bop 75 -58 a Fo(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 149 y Fn(yank-pop)14 b(\(M-y\))315 204 y Fo(Rotate)i(the)h -(kill-ring,)j(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 -b(can)h(only)g(do)f(this)h(if)f(the)h(prior)315 259 y(command)d(is)h -Fn(yank)e Fo(or)h Fn(yank-pop)p Fo(.)75 382 y Fc(1.4.5)30 -b(Sp)r(ecifying)20 b(Numeric)h(Argumen)n(ts)75 507 y -Fn(digit-argument)13 b(\()p Fg(M-0)p Fn(,)i Fg(M-1)p -Fn(,)f(...)h Fg(M--)p Fn(\))315 562 y Fo(Add)f(this)g(digit)g(to)f(the) -h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h -(argumen)o(t.)315 616 y Fg(M--)h Fo(starts)f(a)h(negativ)o(e)g(argumen) -o(t.)75 702 y Fn(universal-argument)e(\(\))315 756 y -Fo(This)g(is)h(another)e(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o -(t.)18 b(If)13 b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 -811 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us) -f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 866 +b(17)75 149 y Fn(yank)15 b(\(C-y\))315 204 y Fo(Y)l(ank)g(the)h(top)f +(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.) +75 276 y Fn(yank-pop)g(\(M-y\))315 331 y Fo(Rotate)i(the)h(kill-ring,)j +(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f +(this)h(if)f(the)h(prior)315 386 y(command)d(is)h Fn(yank)e +Fo(or)h Fn(yank-pop)p Fo(.)75 486 y Fc(1.4.5)30 b(Sp)r(ecifying)20 +b(Numeric)h(Argumen)n(ts)75 604 y Fn(digit-argument)13 +b(\()p Fg(M-0)p Fn(,)i Fg(M-1)p Fn(,)f(...)h Fg(M--)p +Fn(\))315 658 y Fo(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e +(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315 +713 y Fg(M--)h Fo(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75 +785 y Fn(universal-argument)e(\(\))315 840 y Fo(This)g(is)h(another)e +(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13 +b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 +895 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o(us) +f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 949 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g -(digits,)g(executing)g Fn(universal-argument)315 921 +(digits,)g(executing)g Fn(universal-argument)315 1004 y Fo(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h (otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315 -976 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)f -(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 -1030 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h +1059 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y) +f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 +1114 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h (the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 -1085 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f +1169 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f (executing)i(this)f(function)h(the)e(\014rst)h(time)315 -1140 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g +1223 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g (time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315 -1195 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f -(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1318 y Fc(1.4.6)30 +1278 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f +(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1378 y Fc(1.4.6)30 b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 1443 y Fn(complete)14 b(\()305 1441 y Ff(h)p -317 1414 74 2 v 317 1443 a Fe(T)m(AB)p 317 1450 V 389 -1441 a Ff(i)404 1443 y Fn(\))315 1497 y Fo(A)o(ttempt)c(to)h(p)q +b(ou)75 1496 y Fn(complete)14 b(\()305 1494 y Ff(h)p +317 1468 74 2 v 317 1496 a Fe(T)m(AB)p 317 1504 V 389 +1494 a Ff(i)404 1496 y Fn(\))315 1551 y Fo(A)o(ttempt)c(to)h(p)q (erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19 -b(The)11 b(actual)h(completion)315 1552 y(p)q(erformed)j(is)h +b(The)11 b(actual)h(completion)315 1606 y(p)q(erformed)j(is)h (application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename) -g(completion.)75 1637 y Fn(possible-completions)c(\(M-?\))315 -1692 y Fo(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(p)q(oin)o(t.)75 1777 y Fn(insert-completions)d(\(M-*\))315 -1832 y Fo(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) +g(completion.)75 1678 y Fn(possible-completions)c(\(M-?\))315 +1732 y Fo(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) +q(efore)h(p)q(oin)o(t.)75 1804 y Fn(insert-completions)d(\(M-*\))315 +1859 y Fo(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315 -1887 y(b)o(y)f Fn(possible-completions)p Fo(.)75 1972 -y Fn(menu-complete)e(\(\))315 2027 y Fo(Similar)g(to)f +1914 y(b)o(y)f Fn(possible-completions)p Fo(.)75 1985 +y Fn(menu-complete)e(\(\))315 2040 y Fo(Similar)g(to)f Fn(complete)p Fo(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i -(completed)f(with)h(a)e(single)j(matc)o(h)315 2082 y(from)k(the)h(list) +(completed)f(with)h(a)e(single)j(matc)o(h)315 2095 y(from)k(the)h(list) h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19 -b(execution)h(of)f Fn(menu-complete)315 2136 y Fo(steps)h(through)g +b(execution)h(of)f Fn(menu-complete)315 2150 y Fo(steps)h(through)g (the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f -(matc)o(h)f(in)i(turn.)315 2191 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g +(matc)o(h)f(in)i(turn.)315 2205 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g (of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f -(the)i(setting)315 2246 y(of)f Fn(bell-style)p Fo(\))e(and)i(the)g +(the)i(setting)315 2259 y(of)f Fn(bell-style)p Fo(\))e(and)i(the)g (original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g -Fd(n)i Fo(mo)o(v)o(es)e Fd(n)315 2301 y Fo(p)q(ositions)h(forw)o(ard)e +Fd(n)i Fo(mo)o(v)o(es)e Fd(n)315 2314 y Fo(p)q(ositions)h(forw)o(ard)e (in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g -(ma)o(y)g(b)q(e)h(used)g(to)315 2356 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h +(ma)o(y)g(b)q(e)h(used)g(to)315 2369 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h (through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)315 2408 y Ff(h)p 327 2382 V 327 -2410 a Fe(T)m(AB)p 327 2418 V 399 2408 a Ff(i)414 2410 +(b)q(e)h(b)q(ound)g(to)315 2422 y Ff(h)p 327 2396 V 327 +2424 a Fe(T)m(AB)p 327 2431 V 399 2422 a Ff(i)414 2424 y Fo(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)75 2496 y Fn(delete-char-or-list)e(\(\))315 2550 y Fo(Deletes)h(the)f(c)o (haracter)g(under)h(the)g(cursor)f(if)h(not)f(at)g(the)g(b)q(eginning)j diff --git a/lib/readline/posixdir.h b/lib/readline/posixdir.h index 91f6d961..8b163845 100644..120000 --- a/lib/readline/posixdir.h +++ b/lib/readline/posixdir.h @@ -1,61 +1 @@ -/* posixdir.h -- Posix directory reading includes and defines. */ - -/* Copyright (C) 1987,1991 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. - - Bash is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 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. */ - -/* This file should be included instead of <dirent.h> or <sys/dir.h>. */ - -#if !defined (_POSIXDIR_H_) -#define _POSIXDIR_H_ - -#if defined (HAVE_DIRENT_H) -# include <dirent.h> -# if defined (HAVE_STRUCT_DIRENT_D_NAMLEN) -# define D_NAMLEN(d) ((d)->d_namlen) -# else -# define D_NAMLEN(d) (strlen ((d)->d_name)) -# endif /* !HAVE_STRUCT_DIRENT_D_NAMLEN */ -#else -# if defined (HAVE_SYS_NDIR_H) -# include <sys/ndir.h> -# endif -# if defined (HAVE_SYS_DIR_H) -# include <sys/dir.h> -# endif -# if defined (HAVE_NDIR_H) -# include <ndir.h> -# endif -# if !defined (dirent) -# define dirent direct -# endif /* !dirent */ -# define D_NAMLEN(d) ((d)->d_namlen) -#endif /* !HAVE_DIRENT_H */ - -#if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (HAVE_STRUCT_DIRENT_D_FILENO) -# define d_fileno d_ino -#endif - -#if defined (_POSIX_SOURCE) && (!defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO)) -/* Posix does not require that the d_ino field be present, and some - systems do not provide it. */ -# define REAL_DIR_ENTRY(dp) 1 -#else -# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) -#endif /* _POSIX_SOURCE */ - -#endif /* !_POSIXDIR_H_ */ +../../include/posixdir.h
\ No newline at end of file diff --git a/lib/readline/posixjmp.h b/lib/readline/posixjmp.h index b52aa003..b4d3ee74 100644..120000 --- a/lib/readline/posixjmp.h +++ b/lib/readline/posixjmp.h @@ -1,40 +1 @@ -/* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */ - -/* Copyright (C) 1987,1991 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. - - Bash is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 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. */ - -#ifndef _POSIXJMP_H_ -#define _POSIXJMP_H_ - -#include <setjmp.h> - -/* This *must* be included *after* config.h */ - -#if defined (HAVE_POSIX_SIGSETJMP) -# define procenv_t sigjmp_buf -# if !defined (__OPENNT) -# undef setjmp -# define setjmp(x) sigsetjmp((x), 1) -# undef longjmp -# define longjmp(x, n) siglongjmp((x), (n)) -# endif /* !__OPENNT */ -#else -# define procenv_t jmp_buf -#endif - -#endif /* _POSIXJMP_H_ */ +../../include/posixjmp.h
\ No newline at end of file diff --git a/lib/readline/posixstat.h b/lib/readline/posixstat.h index c93b5288..c6164b79 100644..120000 --- a/lib/readline/posixstat.h +++ b/lib/readline/posixstat.h @@ -1,142 +1 @@ -/* posixstat.h -- Posix stat(2) definitions for systems that - don't have them. */ - -/* Copyright (C) 1987,1991 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. - - Bash is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 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. */ - -/* This file should be included instead of <sys/stat.h>. - It relies on the local sys/stat.h to work though. */ -#if !defined (_POSIXSTAT_H_) -#define _POSIXSTAT_H_ - -#include <sys/stat.h> - -#if defined (STAT_MACROS_BROKEN) -# undef S_ISBLK -# undef S_ISCHR -# undef S_ISDIR -# undef S_ISFIFO -# undef S_ISREG -# undef S_ISLNK -#endif /* STAT_MACROS_BROKEN */ - -/* These are guaranteed to work only on isc386 */ -#if !defined (S_IFDIR) && !defined (S_ISDIR) -# define S_IFDIR 0040000 -#endif /* !S_IFDIR && !S_ISDIR */ -#if !defined (S_IFMT) -# define S_IFMT 0170000 -#endif /* !S_IFMT */ - -/* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */ - -/* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but - do not provide the S_IS* macros that Posix requires. */ - -#if defined (_S_IFMT) && !defined (S_IFMT) -#define S_IFMT _S_IFMT -#endif -#if defined (_S_IFIFO) && !defined (S_IFIFO) -#define S_IFIFO _S_IFIFO -#endif -#if defined (_S_IFCHR) && !defined (S_IFCHR) -#define S_IFCHR _S_IFCHR -#endif -#if defined (_S_IFDIR) && !defined (S_IFDIR) -#define S_IFDIR _S_IFDIR -#endif -#if defined (_S_IFBLK) && !defined (S_IFBLK) -#define S_IFBLK _S_IFBLK -#endif -#if defined (_S_IFREG) && !defined (S_IFREG) -#define S_IFREG _S_IFREG -#endif -#if defined (_S_IFLNK) && !defined (S_IFLNK) -#define S_IFLNK _S_IFLNK -#endif -#if defined (_S_IFSOCK) && !defined (S_IFSOCK) -#define S_IFSOCK _S_IFSOCK -#endif - -/* Test for each symbol individually and define the ones necessary (some - systems claiming Posix compatibility define some but not all). */ - -#if defined (S_IFBLK) && !defined (S_ISBLK) -#define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */ -#endif - -#if defined (S_IFCHR) && !defined (S_ISCHR) -#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */ -#endif - -#if defined (S_IFDIR) && !defined (S_ISDIR) -#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */ -#endif - -#if defined (S_IFREG) && !defined (S_ISREG) -#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */ -#endif - -#if defined (S_IFIFO) && !defined (S_ISFIFO) -#define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */ -#endif - -#if defined (S_IFLNK) && !defined (S_ISLNK) -#define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */ -#endif - -#if defined (S_IFSOCK) && !defined (S_ISSOCK) -#define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */ -#endif - -/* - * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes - */ - -#if !defined (S_IRWXU) -# if !defined (S_IREAD) -# define S_IREAD 00400 -# define S_IWRITE 00200 -# define S_IEXEC 00100 -# endif /* S_IREAD */ - -# if !defined (S_IRUSR) -# define S_IRUSR S_IREAD /* read, owner */ -# define S_IWUSR S_IWRITE /* write, owner */ -# define S_IXUSR S_IEXEC /* execute, owner */ - -# define S_IRGRP (S_IREAD >> 3) /* read, group */ -# define S_IWGRP (S_IWRITE >> 3) /* write, group */ -# define S_IXGRP (S_IEXEC >> 3) /* execute, group */ - -# define S_IROTH (S_IREAD >> 6) /* read, other */ -# define S_IWOTH (S_IWRITE >> 6) /* write, other */ -# define S_IXOTH (S_IEXEC >> 6) /* execute, other */ -# endif /* !S_IRUSR */ - -# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) -# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) -# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) -#endif /* !S_IRWXU */ - -/* These are non-standard, but are used in builtins.c$symbolic_umask() */ -#define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH) -#define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH) -#define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) - -#endif /* _POSIXSTAT_H_ */ +../../include/posixstat.h
\ No newline at end of file diff --git a/lib/readline/tilde.c b/lib/readline/tilde.c index 154f7f81..439ceede 100644..120000 --- a/lib/readline/tilde.c +++ b/lib/readline/tilde.c @@ -1,458 +1 @@ -/* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */ - -/* Copyright (C) 1988,1989 Free Software Foundation, Inc. - - This file is part of GNU Readline, a library for reading lines - of text with interactive input and history editing. - - Readline is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - Readline is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Readline; see the file COPYING. If not, write to the Free - Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ - -#if defined (HAVE_CONFIG_H) -# include <config.h> -#endif - -#if defined (HAVE_UNISTD_H) -# ifdef _MINIX -# include <sys/types.h> -# endif -# include <unistd.h> -#endif - -#if defined (HAVE_STRING_H) -# include <string.h> -#else /* !HAVE_STRING_H */ -# include <strings.h> -#endif /* !HAVE_STRING_H */ - -#if defined (HAVE_STDLIB_H) -# include <stdlib.h> -#else -# include "ansi_stdlib.h" -#endif /* HAVE_STDLIB_H */ - -#include <sys/types.h> -#include <pwd.h> - -#include "tilde.h" - -#if defined (TEST) || defined (STATIC_MALLOC) -static void *xmalloc (), *xrealloc (); -#else -# include "xmalloc.h" -#endif /* TEST || STATIC_MALLOC */ - -#if !defined (HAVE_GETPW_DECLS) -extern struct passwd *getpwuid PARAMS((uid_t)); -extern struct passwd *getpwnam PARAMS((const char *)); -#endif /* !HAVE_GETPW_DECLS */ - -#if !defined (savestring) -#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) -#endif /* !savestring */ - -#if !defined (NULL) -# if defined (__STDC__) -# define NULL ((void *) 0) -# else -# define NULL 0x0 -# endif /* !__STDC__ */ -#endif /* !NULL */ - -/* If being compiled as part of bash, these will be satisfied from - variables.o. If being compiled as part of readline, they will - be satisfied from shell.o. */ -extern char *sh_get_home_dir PARAMS((void)); -extern char *sh_get_env_value PARAMS((const char *)); - -/* The default value of tilde_additional_prefixes. This is set to - whitespace preceding a tilde so that simple programs which do not - perform any word separation get desired behaviour. */ -static const char *default_prefixes[] = - { " ~", "\t~", (const char *)NULL }; - -/* The default value of tilde_additional_suffixes. This is set to - whitespace or newline so that simple programs which do not - perform any word separation get desired behaviour. */ -static const char *default_suffixes[] = - { " ", "\n", (const char *)NULL }; - -/* If non-null, this contains the address of a function that the application - wants called before trying the standard tilde expansions. The function - is called with the text sans tilde, and returns a malloc()'ed string - which is the expansion, or a NULL pointer if the expansion fails. */ -tilde_hook_func_t *tilde_expansion_preexpansion_hook = (tilde_hook_func_t *)NULL; - -/* If non-null, this contains the address of a function to call if the - standard meaning for expanding a tilde fails. The function is called - with the text (sans tilde, as in "foo"), and returns a malloc()'ed string - which is the expansion, or a NULL pointer if there is no expansion. */ -tilde_hook_func_t *tilde_expansion_failure_hook = (tilde_hook_func_t *)NULL; - -/* When non-null, this is a NULL terminated array of strings which - are duplicates for a tilde prefix. Bash uses this to expand - `=~' and `:~'. */ -char **tilde_additional_prefixes = (char **)default_prefixes; - -/* When non-null, this is a NULL terminated array of strings which match - the end of a username, instead of just "/". Bash sets this to - `:' and `=~'. */ -char **tilde_additional_suffixes = (char **)default_suffixes; - -static int tilde_find_prefix PARAMS((const char *, int *)); -static int tilde_find_suffix PARAMS((const char *)); -static char *isolate_tilde_prefix PARAMS((const char *, int *)); -static char *glue_prefix_and_suffix PARAMS((char *, const char *, int)); - -/* Find the start of a tilde expansion in STRING, and return the index of - the tilde which starts the expansion. Place the length of the text - which identified this tilde starter in LEN, excluding the tilde itself. */ -static int -tilde_find_prefix (string, len) - const char *string; - int *len; -{ - register int i, j, string_len; - register char **prefixes; - - prefixes = tilde_additional_prefixes; - - string_len = strlen (string); - *len = 0; - - if (*string == '\0' || *string == '~') - return (0); - - if (prefixes) - { - for (i = 0; i < string_len; i++) - { - for (j = 0; prefixes[j]; j++) - { - if (strncmp (string + i, prefixes[j], strlen (prefixes[j])) == 0) - { - *len = strlen (prefixes[j]) - 1; - return (i + *len); - } - } - } - } - return (string_len); -} - -/* Find the end of a tilde expansion in STRING, and return the index of - the character which ends the tilde definition. */ -static int -tilde_find_suffix (string) - const char *string; -{ - register int i, j, string_len; - register char **suffixes; - - suffixes = tilde_additional_suffixes; - string_len = strlen (string); - - for (i = 0; i < string_len; i++) - { -#if defined (__MSDOS__) - if (string[i] == '/' || string[i] == '\\' /* || !string[i] */) -#else - if (string[i] == '/' /* || !string[i] */) -#endif - break; - - for (j = 0; suffixes && suffixes[j]; j++) - { - if (strncmp (string + i, suffixes[j], strlen (suffixes[j])) == 0) - return (i); - } - } - return (i); -} - -/* Return a new string which is the result of tilde expanding STRING. */ -char * -tilde_expand (string) - const char *string; -{ - char *result; - int result_size, result_index; - - result_index = result_size = 0; - if (result = strchr (string, '~')) - result = (char *)xmalloc (result_size = (strlen (string) + 16)); - else - result = (char *)xmalloc (result_size = (strlen (string) + 1)); - - /* Scan through STRING expanding tildes as we come to them. */ - while (1) - { - register int start, end; - char *tilde_word, *expansion; - int len; - - /* Make START point to the tilde which starts the expansion. */ - start = tilde_find_prefix (string, &len); - - /* Copy the skipped text into the result. */ - if ((result_index + start + 1) > result_size) - result = (char *)xrealloc (result, 1 + (result_size += (start + 20))); - - strncpy (result + result_index, string, start); - result_index += start; - - /* Advance STRING to the starting tilde. */ - string += start; - - /* Make END be the index of one after the last character of the - username. */ - end = tilde_find_suffix (string); - - /* If both START and END are zero, we are all done. */ - if (!start && !end) - break; - - /* Expand the entire tilde word, and copy it into RESULT. */ - tilde_word = (char *)xmalloc (1 + end); - strncpy (tilde_word, string, end); - tilde_word[end] = '\0'; - string += end; - - expansion = tilde_expand_word (tilde_word); - free (tilde_word); - - len = strlen (expansion); -#ifdef __CYGWIN__ - /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when - $HOME for `user' is /. On cygwin, // denotes a network drive. */ - if (len > 1 || *expansion != '/' || *string != '/') -#endif - { - if ((result_index + len + 1) > result_size) - result = (char *)xrealloc (result, 1 + (result_size += (len + 20))); - - strcpy (result + result_index, expansion); - result_index += len; - } - free (expansion); - } - - result[result_index] = '\0'; - - return (result); -} - -/* Take FNAME and return the tilde prefix we want expanded. If LENP is - non-null, the index of the end of the prefix into FNAME is returned in - the location it points to. */ -static char * -isolate_tilde_prefix (fname, lenp) - const char *fname; - int *lenp; -{ - char *ret; - int i; - - ret = (char *)xmalloc (strlen (fname)); -#if defined (__MSDOS__) - for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++) -#else - for (i = 1; fname[i] && fname[i] != '/'; i++) -#endif - ret[i - 1] = fname[i]; - ret[i - 1] = '\0'; - if (lenp) - *lenp = i; - return ret; -} - -/* Return a string that is PREFIX concatenated with SUFFIX starting at - SUFFIND. */ -static char * -glue_prefix_and_suffix (prefix, suffix, suffind) - char *prefix; - const char *suffix; - int suffind; -{ - char *ret; - int plen, slen; - - plen = (prefix && *prefix) ? strlen (prefix) : 0; - slen = strlen (suffix + suffind); - ret = (char *)xmalloc (plen + slen + 1); - if (plen) - strcpy (ret, prefix); - strcpy (ret + plen, suffix + suffind); - return ret; -} - -/* Do the work of tilde expansion on FILENAME. FILENAME starts with a - tilde. If there is no expansion, call tilde_expansion_failure_hook. - This always returns a newly-allocated string, never static storage. */ -char * -tilde_expand_word (filename) - const char *filename; -{ - char *dirname, *expansion, *username; - int user_len; - struct passwd *user_entry; - - if (filename == 0) - return ((char *)NULL); - - if (*filename != '~') - return (savestring (filename)); - - /* A leading `~/' or a bare `~' is *always* translated to the value of - $HOME or the home directory of the current user, regardless of any - preexpansion hook. */ - if (filename[1] == '\0' || filename[1] == '/') - { - /* Prefix $HOME to the rest of the string. */ - expansion = sh_get_env_value ("HOME"); - - /* If there is no HOME variable, look up the directory in - the password database. */ - if (expansion == 0) - expansion = sh_get_home_dir (); - - return (glue_prefix_and_suffix (expansion, filename, 1)); - } - - username = isolate_tilde_prefix (filename, &user_len); - - if (tilde_expansion_preexpansion_hook) - { - expansion = (*tilde_expansion_preexpansion_hook) (username); - if (expansion) - { - dirname = glue_prefix_and_suffix (expansion, filename, user_len); - free (username); - free (expansion); - return (dirname); - } - } - - /* No preexpansion hook, or the preexpansion hook failed. Look in the - password database. */ - dirname = (char *)NULL; - user_entry = getpwnam (username); - if (user_entry == 0) - { - /* If the calling program has a special syntax for expanding tildes, - and we couldn't find a standard expansion, then let them try. */ - if (tilde_expansion_failure_hook) - { - expansion = (*tilde_expansion_failure_hook) (username); - if (expansion) - { - dirname = glue_prefix_and_suffix (expansion, filename, user_len); - free (expansion); - } - } - free (username); - /* If we don't have a failure hook, or if the failure hook did not - expand the tilde, return a copy of what we were passed. */ - if (dirname == 0) - dirname = savestring (filename); - } - else - { - free (username); - dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len); - } - - endpwent (); - return (dirname); -} - - -#if defined (TEST) -#undef NULL -#include <stdio.h> - -main (argc, argv) - int argc; - char **argv; -{ - char *result, line[512]; - int done = 0; - - while (!done) - { - printf ("~expand: "); - fflush (stdout); - - if (!gets (line)) - strcpy (line, "done"); - - if ((strcmp (line, "done") == 0) || - (strcmp (line, "quit") == 0) || - (strcmp (line, "exit") == 0)) - { - done = 1; - break; - } - - result = tilde_expand (line); - printf (" --> %s\n", result); - free (result); - } - exit (0); -} - -static void memory_error_and_abort (); - -static void * -xmalloc (bytes) - size_t bytes; -{ - void *temp = (char *)malloc (bytes); - - if (!temp) - memory_error_and_abort (); - return (temp); -} - -static void * -xrealloc (pointer, bytes) - void *pointer; - int bytes; -{ - void *temp; - - if (!pointer) - temp = malloc (bytes); - else - temp = realloc (pointer, bytes); - - if (!temp) - memory_error_and_abort (); - - return (temp); -} - -static void -memory_error_and_abort () -{ - fprintf (stderr, "readline: out of virtual memory\n"); - abort (); -} - -/* - * Local variables: - * compile-command: "gcc -g -DTEST -o tilde tilde.c" - * end: - */ -#endif /* TEST */ +../tilde/tilde.c
\ No newline at end of file diff --git a/lib/readline/tilde.h b/lib/readline/tilde.h index f8182c99..6fea2aea 100644..120000 --- a/lib/readline/tilde.h +++ b/lib/readline/tilde.h @@ -1,78 +1 @@ -/* tilde.h: Externally available variables and function in libtilde.a. */ - -/* Copyright (C) 1992 Free Software Foundation, Inc. - - This file contains the Readline Library (the Library), a set of - routines for providing Emacs style line input to programs that ask - for it. - - The Library 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. - - The Library 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. - - The GNU General Public License is often shipped with GNU software, and - is generally kept in a file called COPYING or LICENSE. If you do not - have a copy of the license, write to the Free Software Foundation, - 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ - -#if !defined (_TILDE_H_) -# define _TILDE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* A function can be defined using prototypes and compile on both ANSI C - and traditional C compilers with something like this: - extern char *func PARAMS((char *, char *, int)); */ - -#if !defined (PARAMS) -# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) -# define PARAMS(protos) protos -# else -# define PARAMS(protos) () -# endif -#endif - -typedef char *tilde_hook_func_t PARAMS((char *)); - -/* If non-null, this contains the address of a function that the application - wants called before trying the standard tilde expansions. The function - is called with the text sans tilde, and returns a malloc()'ed string - which is the expansion, or a NULL pointer if the expansion fails. */ -extern tilde_hook_func_t *tilde_expansion_preexpansion_hook; - -/* If non-null, this contains the address of a function to call if the - standard meaning for expanding a tilde fails. The function is called - with the text (sans tilde, as in "foo"), and returns a malloc()'ed string - which is the expansion, or a NULL pointer if there is no expansion. */ -extern tilde_hook_func_t *tilde_expansion_failure_hook; - -/* When non-null, this is a NULL terminated array of strings which - are duplicates for a tilde prefix. Bash uses this to expand - `=~' and `:~'. */ -extern char **tilde_additional_prefixes; - -/* When non-null, this is a NULL terminated array of strings which match - the end of a username, instead of just "/". Bash sets this to - `:' and `=~'. */ -extern char **tilde_additional_suffixes; - -/* Return a new string which is the result of tilde expanding STRING. */ -extern char *tilde_expand PARAMS((const char *)); - -/* Do the work of tilde expansion on FILENAME. FILENAME starts with a - tilde. If there is no expansion, call tilde_expansion_failure_hook. */ -extern char *tilde_expand_word PARAMS((const char *)); - -#ifdef __cplusplus -} -#endif - -#endif /* _TILDE_H_ */ +../tilde/tilde.h
\ No newline at end of file @@ -355,6 +355,7 @@ COMMAND * make_case_command (word, clauses, lineno) WORD_DESC *word; PATTERN_LIST *clauses; + int lineno; { CASE_COM *temp; diff --git a/pathnames.h b/pathnames.h deleted file mode 100644 index 27817afa..00000000 --- a/pathnames.h +++ /dev/null @@ -1,30 +0,0 @@ -/* pathnames.h -- absolute filenames that bash wants for various defaults. */ - -/* Copyright (C) 1987,1991 Free Software Foundation, Inc. - - This file is part of GNU Bash, the Bourne Again SHell. - - Bash is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 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 (_PATHNAMES_H_) -#define _PATHNAMES_H_ - -/* The default file for hostname completion. */ -#define DEFAULT_HOSTS_FILE "/etc/hosts" - -/* The default login shell startup file. */ -#define SYS_PROFILE "/etc/profile" - -#endif /* _PATHNAMES_H */ diff --git a/po/bash.po.orig b/po/bash.po.orig new file mode 100644 index 00000000..023388d9 --- /dev/null +++ b/po/bash.po.orig @@ -0,0 +1,5623 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#: array.c:695 array.c:755 array.c:879 bashhist.c:661 bashline.c:801 +#: bashline.c:1416 error.c:88 error.c:318 error.c:320 error.c:322 +#: execute_cmd.c:2005 execute_cmd.c:2007 execute_cmd.c:2195 execute_cmd.c:2441 +#: execute_cmd.c:2580 execute_cmd.c:3186 execute_cmd.c:3838 expr.c:1092 +#: expr.c:1093 general.c:132 jobs.c:1128 jobs.c:1143 jobs.c:2318 jobs.c:2319 +#: locale.c:64 locale.c:422 parse.y:1209 pcomplete.c:937 pcomplete.c:947 +#: pcomplete.c:1076 print_cmd.c:142 print_cmd.c:305 print_cmd.c:364 +#: print_cmd.c:368 print_cmd.c:374 print_cmd.c:378 print_cmd.c:548 +#: print_cmd.c:733 print_cmd.c:847 print_cmd.c:851 subst.c:1483 subst.c:1510 +#: subst.c:1734 subst.c:1754 subst.c:4238 subst.c:4274 subst.c:6391 +#: syntax.h:43 unwind_prot.c:173 variables.c:1631 variables.c:2381 +#: /usr/homes/chet/src/bash/src/parse.y:1209 builtins/common.c:144 +#: builtins/common.c:640 builtins/getopt.c:204 builtins/mkbuiltins.c:1067 +#: builtins/mkbuiltins.c:1070 builtins/mkbuiltins.c:1072 +#: builtins/mkbuiltins.c:1074 builtins/mkbuiltins.c:1079 +#: builtins/mkbuiltins.c:1084 builtins/mkbuiltins.c:1088 +#: builtins/mkbuiltins.c:1094 builtins/mkbuiltins.c:1100 +#: builtins/mkbuiltins.c:1108 builtins/mkbuiltins.c:1111 +#: builtins/mkbuiltins.c:1207 builtins/mkbuiltins.c:1208 +#: builtins/caller.def:127 builtins/caller.def:131 builtins/command.def:134 +#: builtins/complete.def:567 builtins/declare.def:238 builtins/declare.def:355 +#: builtins/declare.def:438 builtins/fc.def:338 builtins/getopts.def:310 +#: builtins/help.def:105 builtins/help.def:110 builtins/history.def:291 +#: builtins/printf.def:123 builtins/printf.def:726 builtins/pushd.def:330 +#: builtins/pushd.def:371 builtins/pushd.def:654 builtins/pushd.def:662 +#: builtins/pushd.def:665 builtins/pushd.def:675 builtins/pushd.def:679 +#: builtins/pushd.def:683 builtins/pushd.def:686 builtins/pushd.def:689 +#: builtins/pushd.def:698 builtins/pushd.def:702 builtins/pushd.def:706 +#: builtins/pushd.def:709 builtins/read.def:258 builtins/read.def:386 +#: builtins/read.def:595 builtins/setattr.def:353 builtins/setattr.def:396 +#: builtins/ulimit.def:111 builtins/umask.def:131 lib/sh/snprintf.c:394 +#: lib/sh/snprintf.c:1691 lib/sh/stringlist.c:235 lib/sh/stringvec.c:223 +#: lib/malloc/stats.c:99 +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2003-12-04 16:07-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: arrayfunc.c:43 +msgid "bad array subscript" +msgstr "" + +#: arrayfunc.c:304 +#, c-format +msgid "%s: cannot assign to non-numeric index" +msgstr "" + +#: bashhist.c:319 +#, c-format +msgid "%s: cannot create: %s" +msgstr "" + +#: bashline.c:2789 +msgid "bash_execute_unix_command: cannot find keymap for command" +msgstr "" + +#: bashline.c:2838 +#, c-format +msgid "%s: first non-whitespace character is not `\"'" +msgstr "" + +#: bashline.c:2867 braces.c:129 +#, c-format +msgid "no closing `%c' in %s" +msgstr "" + +#: bashline.c:2901 +#, c-format +msgid "%s: missing colon separator" +msgstr "" + +#: error.c:163 +#, c-format +msgid "last command: %s\n" +msgstr "" + +#: error.c:168 +#, c-format +msgid "Report this to %s\n" +msgstr "" + +#: error.c:171 +msgid "Stopping myself..." +msgstr "" + +#: error.c:258 +#, c-format +msgid "%s: warning: " +msgstr "" + +#: error.c:403 +msgid "unknown command error" +msgstr "" + +#: error.c:404 +msgid "bad command type" +msgstr "" + +#: error.c:405 +msgid "bad connector" +msgstr "" + +#: error.c:406 +msgid "bad jump" +msgstr "" + +#: error.c:444 +#, c-format +msgid "%s: unbound variable" +msgstr "" + +#: error.c:451 builtins/common.c:221 +#, c-format +msgid "%s: readonly variable" +msgstr "" + +#: eval.c:173 +msgid "timed out waiting for input: auto-logout\n" +msgstr "" + +#: execute_cmd.c:447 +msgid "close" +msgstr "" + +#: execute_cmd.c:447 +msgid "open" +msgstr "" + +#: execute_cmd.c:465 +#, c-format +msgid "cannot redirect standard input from /dev/null: %s" +msgstr "" + +#: execute_cmd.c:1035 +#, c-format +msgid "TIMEFORMAT: `%c': invalid format character" +msgstr "" + +#: execute_cmd.c:3520 +#, c-format +msgid "%s: restricted: cannot specify `/' in command names" +msgstr "" + +#: execute_cmd.c:3608 +#, c-format +msgid "%s: command not found" +msgstr "" + +#: execute_cmd.c:3820 shell.c:1393 builtins/evalfile.c:127 +#: builtins/hash.def:158 +#, c-format +msgid "%s: is a directory" +msgstr "" + +#: execute_cmd.c:3838 +#, c-format +msgid "%s: %s: bad interpreter" +msgstr "" + +#: execute_cmd.c:3875 shell.c:1403 builtins/evalfile.c:172 +#, c-format +msgid "%s: cannot execute binary file" +msgstr "" + +#: execute_cmd.c:3948 builtins/declare.def:306 +#, c-format +msgid "%s: readonly function" +msgstr "" + +#: execute_cmd.c:3987 +#, c-format +msgid "cannot duplicate fd %d to fd %d" +msgstr "" + +#: expr.c:238 +msgid "expression recursion level exceeded" +msgstr "" + +#: expr.c:262 +msgid "recursion stack underflow" +msgstr "" + +#: expr.c:373 +msgid "syntax error in expression" +msgstr "" + +#: expr.c:413 +msgid "attempted assignment to non-variable" +msgstr "" + +#: expr.c:434 expr.c:439 expr.c:749 +msgid "division by 0" +msgstr "" + +#: expr.c:465 +msgid "bug: bad expassign token" +msgstr "" + +#: expr.c:495 expr.c:510 builtins/let.def:92 builtins/let.def:117 +msgid "expression expected" +msgstr "" + +#: expr.c:507 +msgid "`:' expected for conditional expression" +msgstr "" + +#: expr.c:774 +msgid "exponent less than 0" +msgstr "" + +#: expr.c:818 +msgid "identifier expected after pre-increment or pre-decrement" +msgstr "" + +#: expr.c:846 +msgid "missing `)'" +msgstr "" + +#: expr.c:870 +msgid "syntax error: operand expected" +msgstr "" + +#: expr.c:1091 +#, c-format +msgid "%s%s%s: %s (error token is \"%s\")" +msgstr "" + +#: expr.c:1145 +msgid "bad number" +msgstr "" + +#: expr.c:1149 +msgid "invalid arithmetic base" +msgstr "" + +#: expr.c:1169 +msgid "value too great for base" +msgstr "" + +#: expr.c:1217 +#, c-format +msgid "%s: expression error\n" +msgstr "" + +#: general.c:58 +msgid "getcwd: cannot access parent directories" +msgstr "" + +#: general.c:227 general.c:232 builtins/common.c:193 +#, c-format +msgid "`%s': not a valid identifier" +msgstr "" + +#: input.c:229 +#, c-format +msgid "cannot allocate new file descriptor for bash input from fd %d" +msgstr "" + +#: input.c:237 +#, c-format +msgid "save_bash_input: buffer already exists for new fd %d" +msgstr "" + +#: jobs.c:692 +#, c-format +msgid "deleting stopped job %d with process group %ld" +msgstr "" + +#: jobs.c:1631 nojobs.c:646 +#, c-format +msgid "wait: pid %ld is not a child of this shell" +msgstr "" + +#: jobs.c:1814 +#, c-format +msgid "wait_for: No record of process %ld" +msgstr "" + +#: jobs.c:1957 +#, c-format +msgid "wait_for: job == NO_JOB, giving the terminal to shell_pgrp (%ld)" +msgstr "" + +#: jobs.c:2061 +#, c-format +msgid "wait_for_job: job %d is stopped" +msgstr "" + +#: jobs.c:2283 +#, c-format +msgid "%s: job has terminated" +msgstr "" + +#: jobs.c:2292 +#, c-format +msgid "%s: job %d already in background" +msgstr "" + +#: jobs.c:3036 +msgid "no job control in this shell" +msgstr "" + +#: jobs.c:3250 +#, c-format +msgid "tcsetpgrp(%d) failed: pid %ld to pgrp %ld" +msgstr "" + +#: mailcheck.c:381 +msgid "You have mail in $_" +msgstr "" + +#: mailcheck.c:406 +msgid "You have new mail in $_" +msgstr "" + +#: mailcheck.c:422 +#, c-format +msgid "The mail in %s has been read\n" +msgstr "" + +#: make_cmd.c:316 +msgid "syntax error: arithmetic expression required" +msgstr "" + +#: make_cmd.c:318 +msgid "syntax error: `;' unexpected" +msgstr "" + +#: make_cmd.c:558 +#, c-format +msgid "make_here_document: bad instruction type %d" +msgstr "" + +#: make_cmd.c:728 +#, c-format +msgid "make_redirection: redirection instruction `%d' out of range" +msgstr "" + +#: mksyntax.c:334 +#, c-format +msgid "%s: %s: cannot open: %s\n" +msgstr "" + +#: parse.y:1663 /usr/homes/chet/src/bash/src/parse.y:1663 +msgid "read_a_line: ignored null byte in input" +msgstr "" + +#: parse.y:1928 /usr/homes/chet/src/bash/src/parse.y:1928 +msgid "shell_getc: ignored null byte in input" +msgstr "" + +#: parse.y:2724 /usr/homes/chet/src/bash/src/parse.y:2724 +#, c-format +msgid "unexpected EOF while looking for matching `%c'" +msgstr "" + +#: parse.y:3009 /usr/homes/chet/src/bash/src/parse.y:3009 +msgid "unexpected EOF while looking for `]]'" +msgstr "" + +#: parse.y:3014 /usr/homes/chet/src/bash/src/parse.y:3014 +#, c-format +msgid "syntax error in conditional expression: unexpected token `%s'" +msgstr "" + +#: parse.y:3018 /usr/homes/chet/src/bash/src/parse.y:3018 +msgid "syntax error in conditional expression" +msgstr "" + +#: parse.y:3096 /usr/homes/chet/src/bash/src/parse.y:3096 +#, c-format +msgid "unexpected token `%s', expected `)'" +msgstr "" + +#: parse.y:3100 /usr/homes/chet/src/bash/src/parse.y:3100 +msgid "expected `)'" +msgstr "" + +#: parse.y:3128 /usr/homes/chet/src/bash/src/parse.y:3128 +#, c-format +msgid "unexpected argument `%s' to conditional unary operator" +msgstr "" + +#: parse.y:3132 /usr/homes/chet/src/bash/src/parse.y:3132 +msgid "unexpected argument to conditional unary operator" +msgstr "" + +#: parse.y:3160 /usr/homes/chet/src/bash/src/parse.y:3160 +msgid "-n" +msgstr "" + +#: parse.y:3169 /usr/homes/chet/src/bash/src/parse.y:3169 +#, c-format +msgid "unexpected token `%s', conditional binary operator expected" +msgstr "" + +#: parse.y:3173 /usr/homes/chet/src/bash/src/parse.y:3173 +msgid "conditional binary operator expected" +msgstr "" + +#: parse.y:3189 /usr/homes/chet/src/bash/src/parse.y:3189 +#, c-format +msgid "unexpected argument `%s' to conditional binary operator" +msgstr "" + +#: parse.y:3193 /usr/homes/chet/src/bash/src/parse.y:3193 +msgid "unexpected argument to conditional binary operator" +msgstr "" + +#: parse.y:3204 /usr/homes/chet/src/bash/src/parse.y:3204 +#, c-format +msgid "unexpected token `%c' in conditional command" +msgstr "" + +#: parse.y:3207 /usr/homes/chet/src/bash/src/parse.y:3207 +#, c-format +msgid "unexpected token `%s' in conditional command" +msgstr "" + +#: parse.y:3211 /usr/homes/chet/src/bash/src/parse.y:3211 +#, c-format +msgid "unexpected token %d in conditional command" +msgstr "" + +#: parse.y:4398 /usr/homes/chet/src/bash/src/parse.y:4398 +#, c-format +msgid "syntax error near unexpected token `%s'" +msgstr "" + +#: parse.y:4416 /usr/homes/chet/src/bash/src/parse.y:4416 +#, c-format +msgid "syntax error near `%s'" +msgstr "" + +#: parse.y:4426 /usr/homes/chet/src/bash/src/parse.y:4426 +msgid "syntax error: unexpected end of file" +msgstr "" + +#: parse.y:4426 /usr/homes/chet/src/bash/src/parse.y:4426 +msgid "syntax error" +msgstr "" + +#: parse.y:4488 /usr/homes/chet/src/bash/src/parse.y:4488 +#, c-format +msgid "Use \"%s\" to leave the shell.\n" +msgstr "" + +#: parse.y:4647 /usr/homes/chet/src/bash/src/parse.y:4647 +msgid "unexpected EOF while looking for matching `)'" +msgstr "" + +#: pcomplete.c:987 +#, c-format +msgid "completion: function `%s' not found" +msgstr "" + +#: pcomplete.c:1222 +msgid "ERROR: command_line_to_word_list returns NULL" +msgstr "" + +#: pcomplib.c:177 +#, c-format +msgid "progcomp_insert: %s: NULL COMPSPEC" +msgstr "" + +#: print_cmd.c:259 +#, c-format +msgid "print_command: bad connector `%d'" +msgstr "" + +#: print_cmd.c:1171 +#, c-format +msgid "cprintf: `%c': invalid format character" +msgstr "" + +#: redir.c:98 redir.c:133 +msgid "file descriptor out of range" +msgstr "" + +#: redir.c:140 +#, c-format +msgid "%s: ambiguous redirect" +msgstr "" + +#: redir.c:144 +#, c-format +msgid "%s: cannot overwrite existing file" +msgstr "" + +#: redir.c:149 +#, c-format +msgid "%s: restricted: cannot redirect output" +msgstr "" + +#: redir.c:154 +#, c-format +msgid "cannot create temp file for here document: %s" +msgstr "" + +#: redir.c:508 +msgid "/dev/(tcp|udp)/host/port not supported without networking" +msgstr "" + +#: redir.c:948 +msgid "redirection error: cannot duplicate fd" +msgstr "" + +#: shell.c:300 +msgid "could not find /tmp, please create!" +msgstr "" + +#: shell.c:304 +msgid "/tmp must be a valid directory name" +msgstr "" + +#: shell.c:463 shell.c:735 builtins/common.c:156 +#, c-format +msgid "%s: option requires an argument" +msgstr "" + +#: shell.c:748 builtins/common.c:179 +#, c-format +msgid "%s: invalid option" +msgstr "" + +#: shell.c:837 +#, c-format +msgid "%c%c: invalid option" +msgstr "" + +#: shell.c:1588 +msgid "I have no name!" +msgstr "" + +#: shell.c:1721 +#, c-format +msgid "GNU bash, version %s-(%s)\n" +msgstr "" + +#: shell.c:1722 +#, c-format +msgid "" +"Usage:\t%s [GNU long option] [option] ...\n" +"\t%s [GNU long option] [option] script-file ...\n" +msgstr "" + +#: shell.c:1724 +msgid "GNU long options:\n" +msgstr "" + +#: shell.c:1726 +#, c-format +msgid "\t--%s\n" +msgstr "" + +#: shell.c:1728 +msgid "Shell options:\n" +msgstr "" + +#: shell.c:1729 +msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n" +msgstr "" + +#: shell.c:1732 builtins/mkbuiltins.c:131 builtins/set.def:2 +msgid "set" +msgstr "" + +#: shell.c:1744 +#, c-format +msgid "\t-%s or -o option\n" +msgstr "" + +#: shell.c:1750 +#, c-format +msgid "Type `%s -c \"help set\"' for more information about shell options.\n" +msgstr "" + +#: shell.c:1751 +#, c-format +msgid "Type `%s -c help' for more information about shell builtin commands.\n" +msgstr "" + +#: shell.c:1752 +msgid "Use the `bashbug' command to report bugs.\n" +msgstr "" + +#: sig.c:483 +msgid "Bad code in sig.c: sigprocmask" +msgstr "" + +#: siglist.c:47 +msgid "Bogus signal" +msgstr "" + +#: siglist.c:50 +msgid "Hangup" +msgstr "" + +#: siglist.c:54 +msgid "Interrupt" +msgstr "" + +#: siglist.c:58 +msgid "Quit" +msgstr "" + +#: siglist.c:62 +msgid "Illegal instruction" +msgstr "" + +#: siglist.c:66 +msgid "BPT trace/trap" +msgstr "" + +#: siglist.c:74 +msgid "ABORT instruction" +msgstr "" + +#: siglist.c:78 +msgid "EMT instruction" +msgstr "" + +#: siglist.c:82 +msgid "Floating point exception" +msgstr "" + +#: siglist.c:86 +msgid "Killed" +msgstr "" + +#: siglist.c:90 +msgid "Bus error" +msgstr "" + +#: siglist.c:94 +msgid "Segmentation fault" +msgstr "" + +#: siglist.c:98 +msgid "Bad system call" +msgstr "" + +#: siglist.c:102 +msgid "Broken pipe" +msgstr "" + +#: siglist.c:106 +msgid "Alarm clock" +msgstr "" + +#: siglist.c:110 +msgid "Terminated" +msgstr "" + +#: siglist.c:114 +msgid "Urgent IO condition" +msgstr "" + +#: siglist.c:118 +msgid "Stopped (signal)" +msgstr "" + +#: siglist.c:126 +msgid "Continue" +msgstr "" + +#: siglist.c:134 +msgid "Child death or stop" +msgstr "" + +#: siglist.c:138 +msgid "Stopped (tty input)" +msgstr "" + +#: siglist.c:142 +msgid "Stopped (tty output)" +msgstr "" + +#: siglist.c:146 +msgid "I/O ready" +msgstr "" + +#: siglist.c:150 +msgid "CPU limit" +msgstr "" + +#: siglist.c:154 +msgid "File limit" +msgstr "" + +#: siglist.c:158 +msgid "Alarm (virtual)" +msgstr "" + +#: siglist.c:162 +msgid "Alarm (profile)" +msgstr "" + +#: siglist.c:166 +msgid "Window changed" +msgstr "" + +#: siglist.c:170 +msgid "Record lock" +msgstr "" + +#: siglist.c:174 +msgid "User signal 1" +msgstr "" + +#: siglist.c:178 +msgid "User signal 2" +msgstr "" + +#: siglist.c:182 +msgid "HFT input data pending" +msgstr "" + +#: siglist.c:186 +msgid "power failure imminent" +msgstr "" + +#: siglist.c:190 +msgid "system crash imminent" +msgstr "" + +#: siglist.c:194 +msgid "migrate process to another CPU" +msgstr "" + +#: siglist.c:198 +msgid "programming error" +msgstr "" + +#: siglist.c:202 +msgid "HFT monitor mode granted" +msgstr "" + +#: siglist.c:206 +msgid "HFT monitor mode retracted" +msgstr "" + +#: siglist.c:210 +msgid "HFT sound sequence has completed" +msgstr "" + +#: siglist.c:214 +msgid "Information request" +msgstr "" + +#: siglist.c:222 +msgid "Unknown Signal #" +msgstr "" + +#: siglist.c:224 +#, c-format +msgid "Unknown Signal #%d" +msgstr "" + +#: subst.c:666 subst.c:752 subst.c:865 subst.c:1107 subst.c:1370 +msgid "$(" +msgstr "" + +#: subst.c:876 +msgid "$[" +msgstr "" + +#: subst.c:876 +msgid "[" +msgstr "" + +#: subst.c:876 +msgid "]" +msgstr "" + +#: subst.c:1010 subst.c:1131 +#, c-format +msgid "bad substitution: no closing `%s' in %s" +msgstr "" + +#: subst.c:2006 +#, c-format +msgid "%s%s=(%s)\n" +msgstr "" + +#: subst.c:2009 variables.c:2123 +#, c-format +msgid "%s%s=%s\n" +msgstr "" + +#: subst.c:2019 +#, c-format +msgid "%s: cannot assign list to array member" +msgstr "" + +#: subst.c:3381 +msgid "sh-np" +msgstr "" + +#: subst.c:3449 +#, c-format +msgid "pid %ld: dev_fd_list:" +msgstr "" + +#: subst.c:3455 /usr/local/share/bison/bison.simple:719 +#: /usr/local/share/bison/bison.simple:864 +#, c-format +msgid " %d" +msgstr "" + +#: subst.c:3515 subst.c:3531 +msgid "cannot make pipe for process substitution" +msgstr "" + +#: subst.c:3562 +msgid "cannot make child for process substitution" +msgstr "" + +#: subst.c:3605 +#, c-format +msgid "cannot open named pipe %s for %s" +msgstr "" + +#: subst.c:3606 +msgid "reading" +msgstr "" + +#: subst.c:3606 +msgid "writing" +msgstr "" + +#: subst.c:3613 +#, c-format +msgid "cannout reset nodelay mode for fd %d" +msgstr "" + +#: subst.c:3623 +#, c-format +msgid "cannot duplicate named pipe %s as fd %d" +msgstr "" + +#: subst.c:3647 +msgid "process substitution" +msgstr "" + +#: subst.c:3697 +msgid "read_comsub: ignored null byte in input" +msgstr "" + +#: subst.c:3798 +msgid "cannot make pipe for command substitution" +msgstr "" + +#: subst.c:3827 +msgid "cannot make child for command substitution" +msgstr "" + +#: subst.c:3844 +msgid "command_substitute: cannot duplicate pipe as fd 1" +msgstr "" + +#: subst.c:3901 +msgid "command substitution" +msgstr "" + +#: subst.c:4279 +#, c-format +msgid "%s: parameter null or not set" +msgstr "" + +#: subst.c:4524 +#, c-format +msgid "%s: substring expression < 0" +msgstr "" + +#: subst.c:4966 subst.c:4983 +msgid "#%:-=?+/}" +msgstr "" + +#: subst.c:5033 +msgid "%:=+/" +msgstr "" + +#: subst.c:5204 +#, c-format +msgid "%s: bad substitution" +msgstr "" + +#: subst.c:5204 builtins/history.def:247 +msgid "??" +msgstr "" + +#: subst.c:5278 +#, c-format +msgid "$%s: cannot assign in this way" +msgstr "" + +#: subst.c:5792 +msgid "<(" +msgstr "" + +#: subst.c:5792 +msgid ">(" +msgstr "" + +#: subst.c:6647 +#, c-format +msgid "no match: %s" +msgstr "" + +#: syntax.h:26 +msgid "\\`$\"\n" +msgstr "" + +#: syntax.h:27 +msgid "\\`$" +msgstr "" + +#: syntax.h:29 +msgid "()<>;&|" +msgstr "" + +#: syntax.h:32 +msgid "\"`'" +msgstr "" + +#: syntax.h:35 +msgid "$<>" +msgstr "" + +#: syntax.h:41 +msgid "@*+?!" +msgstr "" + +#: syntax.h:45 +msgid "*?[]^" +msgstr "" + +#: test.c:152 +msgid "argument expected" +msgstr "" + +#: test.c:161 +#, c-format +msgid "%s: integer expression expected" +msgstr "" + +#: test.c:176 +msgid "/dev/fd/" +msgstr "" + +#: test.c:202 +msgid "/dev/std" +msgstr "" + +#: test.c:206 +msgid "out" +msgstr "" + +#: test.c:208 +msgid "err" +msgstr "" + +#: test.c:359 +msgid "`)' expected" +msgstr "" + +#: test.c:361 +#, c-format +msgid "`)' expected, found %s" +msgstr "" + +#: test.c:376 test.c:785 test.c:788 +#, c-format +msgid "%s: unary operator expected" +msgstr "" + +#: test.c:541 test.c:828 +#, c-format +msgid "%s: binary operator expected" +msgstr "" + +#: test.c:903 builtins/test.def:134 +msgid "missing `]'" +msgstr "" + +#: test.c:919 builtins/common.c:132 +msgid "too many arguments" +msgstr "" + +#: trap.c:171 +msgid "DEFAULT_SIG" +msgstr "" + +#: trap.c:173 +msgid "IGNORE_SIG" +msgstr "" + +#: trap.c:175 +msgid "IMPOSSIBLE_TRAP_HANDLER" +msgstr "" + +#: trap.c:179 builtins/caller.def:94 +msgid "NULL" +msgstr "" + +#: trap.c:192 +msgid "invalid signal number" +msgstr "" + +#: trap.c:222 builtins/common.c:638 builtins/trap.def:218 +msgid "SIG" +msgstr "" + +#: trap.c:307 +#, c-format +msgid "run_pending_traps: bad value in trap_list[%d]: %p" +msgstr "" + +#: trap.c:311 +#, c-format +msgid "" +"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself" +msgstr "" + +#: trap.c:347 +#, c-format +msgid "trap_handler: bad signal %d" +msgstr "" + +#: trap.c:673 +msgid "exit trap" +msgstr "" + +#: trap.c:781 +msgid "debug trap" +msgstr "" + +#: trap.c:800 +msgid "error trap" +msgstr "" + +#: trap.c:811 +msgid "return trap" +msgstr "" + +#: trap.c:821 +msgid "interrupt trap" +msgstr "" + +#: variables.c:287 +msgid "() {" +msgstr "" + +#: variables.c:309 +#, c-format +msgid "error importing function definition for `%s'" +msgstr "" + +#: variables.c:370 +msgid "NODE" +msgstr "" + +#: variables.c:383 +msgid "# " +msgstr "" + +#: variables.c:387 +msgid "+ " +msgstr "" + +#: variables.c:390 variables.c:2867 variables.c:3464 variables.c:3500 +#: variables.c:3632 variables.c:3735 +msgid "IFS" +msgstr "" + +#: variables.c:401 +msgid "600" +msgstr "" + +#: variables.c:401 +msgid "60" +msgstr "" + +#: variables.c:409 variables.c:3647 variables.c:3955 builtins/getopts.def:231 +msgid "OPTIND" +msgstr "" + +#: variables.c:411 variables.c:3646 variables.c:3976 +msgid "OPTERR" +msgstr "" + +#: variables.c:420 +msgid "BASH" +msgstr "" + +#: variables.c:430 +msgid "BASH_VERSION" +msgstr "" + +#: variables.c:436 +msgid "BASH_EXECUTION_STRING" +msgstr "" + +#: variables.c:452 +msgid "~/.sh_history" +msgstr "" + +#: variables.c:452 +msgid "~/.bash_history" +msgstr "" + +#: variables.c:457 +msgid "500" +msgstr "" + +#: variables.c:469 variables.c:3633 builtins/set.def:313 builtins/set.def:315 +#: builtins/set.def:316 +msgid "IGNOREEOF" +msgstr "" + +#: variables.c:471 variables.c:3669 builtins/set.def:191 builtins/set.def:311 +msgid "ignoreeof" +msgstr "" + +#: variables.c:527 +msgid "HOSTTYPE" +msgstr "" + +#: variables.c:528 +msgid "OSTYPE" +msgstr "" + +#: variables.c:529 +msgid "MACHTYPE" +msgstr "" + +#: variables.c:531 +msgid "HOSTNAME" +msgstr "" + +#: variables.c:660 variables.c:694 +msgid "SHLVL" +msgstr "" + +#: variables.c:669 +#, c-format +msgid "shell level (%d) too high, resetting to 1" +msgstr "" + +#: variables.c:734 +msgid "shell-init" +msgstr "" + +#: variables.c:758 variables.c:761 +msgid "PPID" +msgstr "" + +#: variables.c:772 variables.c:775 +msgid "UID" +msgstr "" + +#: variables.c:782 variables.c:785 +msgid "EUID" +msgstr "" + +#: variables.c:798 variables.c:800 +msgid "BASH_VERSINFO" +msgstr "" + +#: variables.c:893 +#, c-format +msgid "%s=" +msgstr "" + +#: variables.c:1087 variables.c:1093 +msgid "SECONDS" +msgstr "" + +#: variables.c:1395 +msgid "BASH_COMMAND" +msgstr "" + +#: variables.c:1396 +msgid "BASH_SUBSHELL" +msgstr "" + +#: variables.c:1398 +msgid "RANDOM" +msgstr "" + +#: variables.c:1399 +msgid "LINENO" +msgstr "" + +#: variables.c:1402 +msgid "HISTCMD" +msgstr "" + +#: variables.c:1406 +msgid "COMP_WORDBREAKS" +msgstr "" + +#: variables.c:1410 +msgid "DIRSTACK" +msgstr "" + +#: variables.c:1414 +msgid "GROUPS" +msgstr "" + +#: variables.c:1417 variables.c:3554 variables.c:3578 builtins/evalfile.c:101 +msgid "BASH_ARGC" +msgstr "" + +#: variables.c:1418 variables.c:3553 variables.c:3577 builtins/evalfile.c:100 +msgid "BASH_ARGV" +msgstr "" + +#: variables.c:1609 +msgid "make_local_variable: no function context at current scope" +msgstr "" + +#: variables.c:2708 +msgid "all_local_variables: no function context at current scope" +msgstr "" + +#: variables.c:2922 variables.c:2931 +#, c-format +msgid "invalid character %d in exportstr for %s" +msgstr "" + +#: variables.c:2937 +#, c-format +msgid "no `=' in exportstr for %s" +msgstr "" + +#: variables.c:3071 +msgid ") {" +msgstr "" + +#: variables.c:3222 +msgid "_=" +msgstr "" + +#: variables.c:3242 +msgid "_GNU_nonoption_argv_flags_" +msgstr "" + +#: variables.c:3362 +msgid "pop_var_context: head of shell_variables not a function context" +msgstr "" + +#: variables.c:3375 +msgid "pop_var_context: no global_variables context" +msgstr "" + +#: variables.c:3441 +msgid "pop_scope: head of shell_variables not a temporary environment scope" +msgstr "" + +#: variables.c:3625 builtins/history.def:282 +msgid "HISTTIMEFORMAT" +msgstr "" + +#: variables.c:3635 +msgid "LANG" +msgstr "" + +#: variables.c:3636 +msgid "LC_ALL" +msgstr "" + +#: variables.c:3654 +msgid "TERMCAP" +msgstr "" + +#: variables.c:3655 +msgid "TERMINFO" +msgstr "" + +#: variables.c:3662 lib/sh/strftime.c:185 lib/sh/strftime.c:187 +msgid "TZ" +msgstr "" + +#: variables.c:3867 +msgid "ignorespace" +msgstr "" + +#: variables.c:3869 +msgid "ignoredups" +msgstr "" + +#: variables.c:3871 +msgid "ignoreboth" +msgstr "" + +#: variables.c:3873 +msgid "erasedups" +msgstr "" + +#: version.c:60 version.c:62 +#, c-format +msgid "%s.%d(%d)-%s" +msgstr "" + +#: version.c:66 version.c:68 +#, c-format +msgid "%s.%d(%d)" +msgstr "" + +#: version.c:78 +#, c-format +msgid "GNU bash, version %s (%s)\n" +msgstr "" + +#: version.c:80 +msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n" +msgstr "" + +#: xmalloc.c:91 +#, c-format +msgid "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" +msgstr "" + +#: xmalloc.c:93 +#, c-format +msgid "xmalloc: cannot allocate %lu bytes" +msgstr "" + +#: xmalloc.c:113 +#, c-format +msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)" +msgstr "" + +#: xmalloc.c:115 +#, c-format +msgid "xrealloc: cannot allocate %lu bytes" +msgstr "" + +#: xmalloc.c:149 +#, c-format +msgid "xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)" +msgstr "" + +#: xmalloc.c:151 +#, c-format +msgid "xmalloc: %s:%d: cannot allocate %lu bytes" +msgstr "" + +#: xmalloc.c:173 +#, c-format +msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)" +msgstr "" + +#: xmalloc.c:175 +#, c-format +msgid "xrealloc: %s:%d: cannot allocate %lu bytes" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "error" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "$undefined." +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "IF" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "THEN" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "ELSE" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "ELIF" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "FI" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:469 +msgid "CASE" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 +msgid "ESAC" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 +msgid "FOR" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 +msgid "SELECT" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 +msgid "WHILE" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 +msgid "UNTIL" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 +msgid "DO" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 +msgid "DONE" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:470 builtins/mkbuiltins.c:425 +msgid "FUNCTION" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:471 +msgid "COND_START" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:471 +msgid "COND_END" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:471 +msgid "COND_ERROR" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:471 +msgid "IN" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:471 +msgid "BANG" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:471 +msgid "TIME" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:471 +msgid "TIMEOPT" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:472 +msgid "WORD" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:472 +msgid "ASSIGNMENT_WORD" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:472 +msgid "NUMBER" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:472 +msgid "ARITH_CMD" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:472 +msgid "ARITH_FOR_EXPRS" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:473 +msgid "COND_CMD" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:473 +msgid "AND_AND" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:473 +msgid "OR_OR" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:473 +msgid "GREATER_GREATER" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:473 +msgid "LESS_LESS" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:474 +msgid "LESS_AND" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:474 +msgid "LESS_LESS_LESS" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:474 +msgid "GREATER_AND" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:474 +msgid "SEMI_SEMI" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:475 +msgid "LESS_LESS_MINUS" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:475 +msgid "AND_GREATER" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:475 +msgid "LESS_GREATER" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:475 +msgid "GREATER_BAR" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:475 +msgid "'&'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "';'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "'\\n'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "yacc_EOF" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "'|'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "'>'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "'<'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "'-'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "'{'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:476 +msgid "'}'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:477 +msgid "'('" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:477 +msgid "')'" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:477 +msgid "inputunit" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:477 +msgid "word_list" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:477 +msgid "redirection" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:478 +msgid "simple_command_element" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:478 +msgid "redirection_list" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:478 +msgid "simple_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:479 builtins/command.def:2 +#: builtins/complete.def:82 +msgid "command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:479 +msgid "shell_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:479 +msgid "for_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:479 +msgid "arith_for_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:480 +msgid "select_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:480 +msgid "case_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:480 +msgid "function_def" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:480 +msgid "function_body" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:481 +msgid "subshell" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:481 +msgid "if_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:481 +msgid "group_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:481 +msgid "arith_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:482 +msgid "cond_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:482 +msgid "elif_clause" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:482 +msgid "case_clause" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:482 +msgid "pattern_list" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:483 +msgid "case_clause_sequence" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:483 +msgid "pattern" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:483 +msgid "list" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:483 +msgid "compound_list" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:483 +msgid "list0" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:484 +msgid "list1" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:484 +msgid "simple_list_terminator" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:484 +msgid "list_terminator" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:484 +msgid "newline_list" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:485 +msgid "simple_list" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:485 +msgid "simple_list1" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:485 +msgid "pipeline_command" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:485 +msgid "pipeline" +msgstr "" + +#: /usr/homes/chet/src/bash/src/parse.y:486 +msgid "timespec" +msgstr "" + +#: /usr/local/share/bison/bison.simple:156 +msgid "syntax error: cannot back up" +msgstr "" + +#: /usr/local/share/bison/bison.simple:442 +msgid "Starting parse\n" +msgstr "" + +#: /usr/local/share/bison/bison.simple:492 +#: /usr/local/share/bison/bison.simple:499 +#: /usr/local/share/bison/bison.simple:924 +msgid "parser stack overflow" +msgstr "" + +#: /usr/local/share/bison/bison.simple:538 +#, c-format +msgid "Stack size increased to %lu\n" +msgstr "" + +#: /usr/local/share/bison/bison.simple:545 +#, c-format +msgid "Entering state %d\n" +msgstr "" + +#: /usr/local/share/bison/bison.simple:572 +msgid "Reading a token: " +msgstr "" + +#: /usr/local/share/bison/bison.simple:583 +msgid "Now at end of input.\n" +msgstr "" + +#: /usr/local/share/bison/bison.simple:594 +#, c-format +msgid "Next token is %d (%s" +msgstr "" + +#: /usr/local/share/bison/bison.simple:633 +#, c-format +msgid "Shifting token %d (%s), " +msgstr "" + +#: /usr/local/share/bison/bison.simple:695 +#, c-format +msgid "Reducing via rule %d (line %d), " +msgstr "" + +#: /usr/local/share/bison/bison.simple:701 +#, c-format +msgid " -> %s\n" +msgstr "" + +#: /usr/local/share/bison/bison.simple:717 +msgid "state stack now" +msgstr "" + +#: /usr/local/share/bison/bison.simple:769 +#: /usr/local/share/bison/bison.simple:774 +msgid "parse error, unexpected " +msgstr "" + +#: /usr/local/share/bison/bison.simple:785 +msgid ", expecting " +msgstr "" + +#: /usr/local/share/bison/bison.simple:785 +msgid " or " +msgstr "" + +#: /usr/local/share/bison/bison.simple:795 +msgid "parse error; also virtual memory exhausted" +msgstr "" + +#: /usr/local/share/bison/bison.simple:799 +msgid "parse error" +msgstr "" + +#: /usr/local/share/bison/bison.simple:816 +#, c-format +msgid "Discarding token %d (%s).\n" +msgstr "" + +#: /usr/local/share/bison/bison.simple:862 +msgid "Error: state stack now" +msgstr "" + +#: /usr/local/share/bison/bison.simple:895 +msgid "Shifting error token, " +msgstr "" + +#: builtins/common.c:102 +#, c-format +msgid "line %d: " +msgstr "" + +#: builtins/common.c:119 +#, c-format +msgid "%s: usage: " +msgstr "" + +#: builtins/common.c:163 +#, c-format +msgid "%s: numeric argument required" +msgstr "" + +#: builtins/common.c:170 +#, c-format +msgid "%s: not found" +msgstr "" + +#: builtins/common.c:186 +#, c-format +msgid "%s: invalid option name" +msgstr "" + +#: builtins/common.c:200 +#, c-format +msgid "%s: invalid number" +msgstr "" + +#: builtins/common.c:207 +#, c-format +msgid "%s: invalid signal specification" +msgstr "" + +#: builtins/common.c:214 +#, c-format +msgid "`%s': not a pid or valid job spec" +msgstr "" + +#: builtins/common.c:229 +#, c-format +msgid "%s: %s out of range" +msgstr "" + +#: builtins/common.c:229 builtins/common.c:231 +msgid "argument" +msgstr "" + +#: builtins/common.c:231 +#, c-format +msgid "%s out of range" +msgstr "" + +#: builtins/common.c:239 +#, c-format +msgid "%s: no such job" +msgstr "" + +#: builtins/common.c:247 +#, c-format +msgid "%s: no job control" +msgstr "" + +#: builtins/common.c:249 +msgid "no job control" +msgstr "" + +#: builtins/common.c:259 +#, c-format +msgid "%s: restricted" +msgstr "" + +#: builtins/common.c:269 +#, c-format +msgid "%s: not a shell builtin" +msgstr "" + +#: builtins/common.c:417 +msgid "`'" +msgstr "" + +#: builtins/common.c:480 +#, c-format +msgid "%s: could not get current directory: %s: %s\n" +msgstr "" + +#: builtins/common.c:547 builtins/common.c:549 +#, c-format +msgid "%s: ambiguous job spec" +msgstr "" + +#: builtins/common.c:631 builtins/common.c:680 builtins/trap.def:214 +msgid "SIGJUNK" +msgstr "" + +#: builtins/common.c:631 builtins/common.c:680 +msgid "Unknown" +msgstr "" + +#: builtins/common.c:644 +#, c-format +msgid "%2d) %s" +msgstr "" + +#: builtins/evalfile.c:132 +#, c-format +msgid "%s: not a regular file" +msgstr "" + +#: builtins/evalfile.c:140 +#, c-format +msgid "%s: file is too large" +msgstr "" + +#: builtins/evalfile.c:178 builtins/evalfile.c:237 +msgid "_evalfile" +msgstr "" + +#: builtins/evalfile.c:204 builtins/mkbuiltins.c:130 builtins/source.def:2 +#: builtins/source.def:143 builtins/source.def:170 +msgid "source" +msgstr "" + +#: builtins/evalstring.c:76 builtins/evalstring.c:103 +#: builtins/evalstring.c:287 +msgid "parse_and_execute_top" +msgstr "" + +#: builtins/evalstring.c:181 builtins/evalstring.c:189 +#: builtins/evalstring.c:223 builtins/evalstring.c:272 +msgid "pe_dispose" +msgstr "" + +#: builtins/evalstring.c:205 +msgid "parse_and_execute" +msgstr "" + +#: builtins/getopt.c:108 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "" + +#: builtins/getopt.c:109 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "" + +#: builtins/getopt.c:231 +msgid "sh_getopt_debug_restore_state: resetting nextchar" +msgstr "" + +#: builtins/getopt.c:254 +msgid "abc:d:0123456789" +msgstr "" + +#: builtins/getopt.c:271 +msgid "digits occur in two different argv-elements.\n" +msgstr "" + +#: builtins/getopt.c:273 +#, c-format +msgid "option %c\n" +msgstr "" + +#: builtins/getopt.c:277 +msgid "option a\n" +msgstr "" + +#: builtins/getopt.c:281 +msgid "option b\n" +msgstr "" + +#: builtins/getopt.c:285 +#, c-format +msgid "option c with value `%s'\n" +msgstr "" + +#: builtins/getopt.c:292 +#, c-format +msgid "?? sh_getopt returned character code 0%o ??\n" +msgstr "" + +#: builtins/getopt.c:298 +msgid "non-option ARGV-elements: " +msgstr "" + +#: builtins/mkbuiltins.c:47 +msgid "builtins.texi" +msgstr "" + +#: builtins/mkbuiltins.c:130 builtins/break.def:2 +msgid "break" +msgstr "" + +#: builtins/mkbuiltins.c:130 builtins/break.def:2 +msgid "continue" +msgstr "" + +#: builtins/mkbuiltins.c:130 builtins/eval.def:2 builtins/eval.def:52 +msgid "eval" +msgstr "" + +#: builtins/mkbuiltins.c:130 builtins/exec.def:2 +msgid "exec" +msgstr "" + +#: builtins/mkbuiltins.c:131 builtins/mkbuiltins.c:138 +#: builtins/complete.def:86 builtins/setattr.def:2 +msgid "export" +msgstr "" + +#: builtins/mkbuiltins.c:131 builtins/mkbuiltins.c:138 builtins/setattr.def:2 +msgid "readonly" +msgstr "" + +#: builtins/mkbuiltins.c:131 builtins/return.def:2 +msgid "return" +msgstr "" + +#: builtins/mkbuiltins.c:131 builtins/shift.def:2 +msgid "shift" +msgstr "" + +#: builtins/mkbuiltins.c:131 builtins/set.def:2 +msgid "unset" +msgstr "" + +#: builtins/mkbuiltins.c:138 builtins/alias.def:2 builtins/complete.def:78 +#: builtins/type.def:228 +msgid "alias" +msgstr "" + +#: builtins/mkbuiltins.c:138 builtins/declare.def:2 +msgid "declare" +msgstr "" + +#: builtins/mkbuiltins.c:138 builtins/declare.def:2 +msgid "local" +msgstr "" + +#: builtins/mkbuiltins.c:138 +msgid "typeset" +msgstr "" + +#: builtins/mkbuiltins.c:194 +msgid "-externfile" +msgstr "" + +#: builtins/mkbuiltins.c:196 +msgid "-structfile" +msgstr "" + +#: builtins/mkbuiltins.c:198 +msgid "-noproduction" +msgstr "" + +#: builtins/mkbuiltins.c:200 +msgid "-document" +msgstr "" + +#: builtins/mkbuiltins.c:202 +msgid "-D" +msgstr "" + +#: builtins/mkbuiltins.c:218 +msgid "-documentonly" +msgstr "" + +#: builtins/mkbuiltins.c:223 +msgid "-H" +msgstr "" + +#: builtins/mkbuiltins.c:230 +#, c-format +msgid "%s: Unknown flag %s.\n" +msgstr "" + +#: builtins/mkbuiltins.c:245 +#, c-format +msgid "mk-%ld" +msgstr "" + +#: builtins/mkbuiltins.c:266 +#, c-format +msgid "@c Table of builtins created with %s.\n" +msgstr "" + +#: builtins/mkbuiltins.c:268 +msgid "@ftable @asis\n" +msgstr "" + +#: builtins/mkbuiltins.c:305 +msgid "@end ftable\n" +msgstr "" + +#: builtins/mkbuiltins.c:423 +msgid "BUILTIN" +msgstr "" + +#: builtins/mkbuiltins.c:424 +msgid "DOCNAME" +msgstr "" + +#: builtins/mkbuiltins.c:426 +msgid "SHORT_DOC" +msgstr "" + +#: builtins/mkbuiltins.c:428 +msgid "COMMENT" +msgstr "" + +#: builtins/mkbuiltins.c:429 +msgid "DEPENDS_ON" +msgstr "" + +#: builtins/mkbuiltins.c:430 +msgid "PRODUCES" +msgstr "" + +#: builtins/mkbuiltins.c:431 +msgid "END" +msgstr "" + +#: builtins/mkbuiltins.c:500 +#, c-format +msgid "mkbuiltins: %s: skipping zero-length file\n" +msgstr "" + +#: builtins/mkbuiltins.c:551 +#, c-format +msgid "Unknown directive `%s'" +msgstr "" + +#: builtins/mkbuiltins.c:577 +#, c-format +msgid "#line %d \"%s\"\n" +msgstr "" + +#: builtins/mkbuiltins.c:580 +#, c-format +msgid "#line %d \"%s%s\"\n" +msgstr "" + +#: builtins/mkbuiltins.c:582 builtins/mkbuiltins.c:954 +msgid "./" +msgstr "" + +#: builtins/mkbuiltins.c:703 +#, c-format +msgid "%s requires an argument" +msgstr "" + +#: builtins/mkbuiltins.c:715 +#, c-format +msgid "%s must be inside of a $BUILTIN block" +msgstr "" + +#: builtins/mkbuiltins.c:740 +msgid "(implied LONGDOC)" +msgstr "" + +#: builtins/mkbuiltins.c:766 +#, c-format +msgid "%s found before $END" +msgstr "" + +#: builtins/mkbuiltins.c:812 +msgid "syntax error: no current builtin for $FUNCTION directive" +msgstr "" + +#: builtins/mkbuiltins.c:816 +#, c-format +msgid "%s already has a function (%s)" +msgstr "" + +#: builtins/mkbuiltins.c:836 +#, c-format +msgid "%s already had a docname (%s)" +msgstr "" + +#: builtins/mkbuiltins.c:856 +#, c-format +msgid "%s already has short documentation (%s)" +msgstr "" + +#: builtins/mkbuiltins.c:910 +#, c-format +msgid "%s already has a %s definition" +msgstr "" + +#: builtins/mkbuiltins.c:923 +#, c-format +msgid "/* %s, created from %s. */\n" +msgstr "" + +#: builtins/mkbuiltins.c:955 +#, c-format +msgid "%s:%d:" +msgstr "" + +#: builtins/mkbuiltins.c:1010 +msgid "mkbuiltins: out of virtual memory\n" +msgstr "" + +#: builtins/mkbuiltins.c:1066 +msgid "/* builtins.c -- the built in shell commands. */" +msgstr "" + +#: builtins/mkbuiltins.c:1068 +msgid "/* This file is manufactured by ./mkbuiltins, and should not be" +msgstr "" + +#: builtins/mkbuiltins.c:1069 +msgid " edited by hand. See the source to mkbuiltins for details. */" +msgstr "" + +#: builtins/mkbuiltins.c:1071 +msgid "/* Copyright (C) 1987-2002 Free Software Foundation, Inc." +msgstr "" + +#: builtins/mkbuiltins.c:1073 +msgid " This file is part of GNU Bash, the Bourne Again SHell." +msgstr "" + +#: builtins/mkbuiltins.c:1075 +msgid " Bash is free software; you can redistribute it and/or modify it" +msgstr "" + +#: builtins/mkbuiltins.c:1076 +msgid " under the terms of the GNU General Public License as published by" +msgstr "" + +#: builtins/mkbuiltins.c:1077 +msgid " the Free Software Foundation; either version 2, or (at your option)" +msgstr "" + +#: builtins/mkbuiltins.c:1078 +msgid " any later version." +msgstr "" + +#: builtins/mkbuiltins.c:1080 +msgid " Bash is distributed in the hope that it will be useful, but WITHOUT" +msgstr "" + +#: builtins/mkbuiltins.c:1081 +msgid " ANY WARRANTY; without even the implied warranty of MERCHANTABILITY" +msgstr "" + +#: builtins/mkbuiltins.c:1082 +msgid " or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public" +msgstr "" + +#: builtins/mkbuiltins.c:1083 +msgid " License for more details." +msgstr "" + +#: builtins/mkbuiltins.c:1085 +msgid " You should have received a copy of the GNU General Public License" +msgstr "" + +#: builtins/mkbuiltins.c:1086 +msgid " along with Bash; see the file COPYING. If not, write to the Free" +msgstr "" + +#: builtins/mkbuiltins.c:1087 +msgid "" +" Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */" +msgstr "" + +#: builtins/mkbuiltins.c:1089 +msgid "/* The list of shell builtins. Each element is name, function, flags," +msgstr "" + +#: builtins/mkbuiltins.c:1090 +msgid "" +" long-doc, short-doc. The long-doc field contains a pointer to an array" +msgstr "" + +#: builtins/mkbuiltins.c:1091 +msgid "" +" of help lines. The function takes a WORD_LIST *; the first word in the" +msgstr "" + +#: builtins/mkbuiltins.c:1092 +msgid " list is the first arg to the command. The list has already had word" +msgstr "" + +#: builtins/mkbuiltins.c:1093 +msgid " expansion performed." +msgstr "" + +#: builtins/mkbuiltins.c:1095 +msgid " Functions which need to look at only the simple commands (e.g." +msgstr "" + +#: builtins/mkbuiltins.c:1096 +msgid " the enable_builtin ()), should ignore entries where" +msgstr "" + +#: builtins/mkbuiltins.c:1097 +msgid "" +" (array[i].function == (sh_builtin_func_t *)NULL). Such entries are for" +msgstr "" + +#: builtins/mkbuiltins.c:1098 +msgid "" +" the list of shell reserved control structures, like `if' and `while'." +msgstr "" + +#: builtins/mkbuiltins.c:1099 +msgid " The end of the list is denoted with a NULL name field. */" +msgstr "" + +#: builtins/mkbuiltins.c:1101 +msgid "#include \"../builtins.h\"" +msgstr "" + +#: builtins/mkbuiltins.c:1106 +msgid "" +" { (char *)0x0, (sh_builtin_func_t *)0x0, 0, (char **)0x0, (char *)0x0 }" +msgstr "" + +#: builtins/mkbuiltins.c:1107 +msgid "};" +msgstr "" + +#: builtins/mkbuiltins.c:1109 +msgid "struct builtin *shell_builtins = static_shell_builtins;" +msgstr "" + +#: builtins/mkbuiltins.c:1110 +msgid "struct builtin *current_builtin;" +msgstr "" + +#: builtins/mkbuiltins.c:1112 +msgid "int num_shell_builtins =" +msgstr "" + +#: builtins/mkbuiltins.c:1113 +msgid "\tsizeof (static_shell_builtins) / sizeof (struct builtin) - 1;" +msgstr "" + +#: builtins/mkbuiltins.c:1130 +#, c-format +msgid "#include \"%s\"\n" +msgstr "" + +#: builtins/mkbuiltins.c:1131 builtins/mkbuiltins.c:1138 +msgid "builtext.h" +msgstr "" + +#: builtins/mkbuiltins.c:1132 +msgid "" +"\n" +"struct builtin static_shell_builtins[] = {\n" +msgstr "" + +#: builtins/mkbuiltins.c:1137 +#, c-format +msgid "/* %s - The list of builtins found in libbuiltins.a. */\n" +msgstr "" + +#: builtins/mkbuiltins.c:1188 +#, c-format +msgid "extern int %s __P((WORD_LIST *));\n" +msgstr "" + +#: builtins/mkbuiltins.c:1191 +#, c-format +msgid "extern char * const %s_doc[];\n" +msgstr "" + +#: builtins/mkbuiltins.c:1198 +#, c-format +msgid " { \"%s\", " +msgstr "" + +#: builtins/mkbuiltins.c:1201 +#, c-format +msgid "%s, " +msgstr "" + +#: builtins/mkbuiltins.c:1203 +msgid "(sh_builtin_func_t *)0x0, " +msgstr "" + +#: builtins/mkbuiltins.c:1205 +#, c-format +msgid "%s%s%s, %s_doc,\n" +msgstr "" + +#: builtins/mkbuiltins.c:1206 +msgid "BUILTIN_ENABLED | STATIC_BUILTIN" +msgstr "" + +#: builtins/mkbuiltins.c:1207 +msgid " | SPECIAL_BUILTIN" +msgstr "" + +#: builtins/mkbuiltins.c:1208 +msgid " | ASSIGNMENT_BUILTIN" +msgstr "" + +#: builtins/mkbuiltins.c:1212 +#, c-format +msgid " \"%s\", (char *)NULL },\n" +msgstr "" + +#: builtins/mkbuiltins.c:1235 +#, c-format +msgid "@item %s\n" +msgstr "" + +#: builtins/mkbuiltins.c:1263 +#, c-format +msgid "char * const %s_doc[] =" +msgstr "" + +#: builtins/mkbuiltins.c:1269 lib/sh/mailstat.c:126 +#, c-format +msgid "%s/%s" +msgstr "" + +#: builtins/mkbuiltins.c:1299 +msgid "#if " +msgstr "" + +#: builtins/mkbuiltins.c:1306 +#, c-format +msgid "!defined (%s)" +msgstr "" + +#: builtins/mkbuiltins.c:1308 +#, c-format +msgid "defined (%s)" +msgstr "" + +#: builtins/mkbuiltins.c:1330 +msgid "#endif /* " +msgstr "" + +#: builtins/mkbuiltins.c:1340 +msgid " */\n" +msgstr "" + +#: builtins/mkbuiltins.c:1360 +msgid "" +" {\n" +"#if defined (HELP_BUILTIN)\n" +msgstr "" + +#: builtins/mkbuiltins.c:1373 +msgid " \"" +msgstr "" + +#: builtins/mkbuiltins.c:1387 +#, c-format +msgid "\\%c" +msgstr "" + +#: builtins/mkbuiltins.c:1391 builtins/mkbuiltins.c:1410 +#, c-format +msgid "%c" +msgstr "" + +#: builtins/mkbuiltins.c:1395 +msgid "\",\n" +msgstr "" + +#: builtins/mkbuiltins.c:1406 +#, c-format +msgid "@%c" +msgstr "" + +#: builtins/mkbuiltins.c:1420 +msgid "" +"#endif /* HELP_BUILTIN */\n" +" (char *)NULL\n" +"};\n" +msgstr "" + +#: builtins/mkbuiltins.c:1432 +msgid "helpfiles" +msgstr "" + +#: builtins/mkbuiltins.c:1435 +msgid "write_helpfiles: helpfiles: cannot create directory\n" +msgstr "" + +#: builtins/mkbuiltins.c:1439 +msgid "helpfiles/" +msgstr "" + +#: builtins/mkbuiltins.c:1446 +#, c-format +msgid "helpfiles/%s" +msgstr "" + +#: builtins/mkbuiltins.c:1451 +#, c-format +msgid "write_helpfiles: cannot open %s\n" +msgstr "" + +#: builtins/alias.def:2 +msgid "unalias" +msgstr "" + +#: builtins/alias.def:73 +msgid "p" +msgstr "" + +#: builtins/alias.def:160 +msgid "a" +msgstr "" + +#: builtins/alias.def:210 +msgid "alias " +msgstr "" + +#: builtins/bind.def:2 +msgid "bind" +msgstr "" + +#: builtins/bind.def:121 builtins/bind.def:265 +msgid "bind_builtin" +msgstr "" + +#: builtins/bind.def:127 +msgid "lvpVPsSf:q:u:m:r:x:" +msgstr "" + +#: builtins/bind.def:192 +#, c-format +msgid "`%s': invalid keymap name" +msgstr "" + +#: builtins/bind.def:231 +#, c-format +msgid "%s: cannot read: %s" +msgstr "" + +#: builtins/bind.def:246 +#, c-format +msgid "`%s': cannot unbind" +msgstr "" + +#: builtins/bind.def:281 builtins/bind.def:311 +#, c-format +msgid "`%s': unknown function name" +msgstr "" + +#: builtins/bind.def:289 +#, c-format +msgid "%s is not bound to any keys.\n" +msgstr "" + +#: builtins/bind.def:293 +#, c-format +msgid "%s can be invoked via " +msgstr "" + +#: builtins/bind.def:295 +#, c-format +msgid "\"%s\"%s" +msgstr "" + +#: builtins/bind.def:295 builtins/help.def:106 +msgid ", " +msgstr "" + +#: builtins/bind.def:295 +msgid ".\n" +msgstr "" + +#: builtins/bind.def:297 +msgid "...\n" +msgstr "" + +#: builtins/break.def:71 builtins/break.def:106 +msgid "loop count" +msgstr "" + +#: builtins/break.def:126 +msgid "only meaningful in a `for', `while', or `until' loop" +msgstr "" + +#: builtins/builtin.def:2 builtins/complete.def:81 builtins/type.def:294 +msgid "builtin" +msgstr "" + +#: builtins/caller.def:2 builtins/caller.def:138 +msgid "caller" +msgstr "" + +#: builtins/caller.def:31 +msgid "$line $filename" +msgstr "" + +#: builtins/caller.def:32 +msgid "$line $subroutine $filename" +msgstr "" + +#: builtins/caller.def:70 +msgid "1 NULL\n" +msgstr "" + +#: builtins/caller.def:94 +#, c-format +msgid "%s %s\n" +msgstr "" + +#: builtins/caller.def:110 +#, c-format +msgid "%s %s %s\n" +msgstr "" + +#: builtins/caller.def:126 +msgid "Returns the context of the current subroutine call." +msgstr "" + +#: builtins/caller.def:128 +msgid "Without EXPR, returns returns \"$line $filename\". With EXPR," +msgstr "" + +#: builtins/caller.def:129 +msgid "returns \"$line $subroutine $filename\"; this extra information" +msgstr "" + +#: builtins/caller.def:130 +msgid "can be used used to provide a stack trace." +msgstr "" + +#: builtins/caller.def:132 +msgid "The value of EXPR indicates how many call frames to go back before the" +msgstr "" + +#: builtins/caller.def:133 +msgid "current one; the top frame is frame 0." +msgstr "" + +#: builtins/caller.def:142 +msgid "caller [EXPR]" +msgstr "" + +#: builtins/cd.def:2 builtins/cd.def:96 builtins/cd.def:130 +msgid "cd" +msgstr "" + +#: builtins/cd.def:2 builtins/cd.def:338 +msgid "pwd" +msgstr "" + +#: builtins/cd.def:105 +msgid "OLDPWD=" +msgstr "" + +#: builtins/cd.def:112 +msgid "PWD=" +msgstr "" + +#: builtins/cd.def:160 builtins/cd.def:318 +msgid "LP" +msgstr "" + +#: builtins/cd.def:187 +msgid "HOME not set" +msgstr "" + +#: builtins/cd.def:199 +msgid "OLDPWD not set" +msgstr "" + +#: builtins/cd.def:210 +msgid "CDPATH" +msgstr "" + +#: builtins/cd.def:349 +#, c-format +msgid "write error: %s" +msgstr "" + +#: builtins/cd.def:378 +msgid "chdir" +msgstr "" + +#: builtins/command.def:29 +msgid "command ls" +msgstr "" + +#: builtins/command.def:73 +msgid "pvV" +msgstr "" + +#: builtins/command.def:120 builtins/command.def:160 +msgid "command_builtin" +msgstr "" + +#: builtins/complete.def:2 +msgid "complete" +msgstr "" + +#: builtins/complete.def:2 builtins/complete.def:589 +msgid "compgen" +msgstr "" + +#: builtins/complete.def:79 builtins/complete.def:458 +msgid "arrayvar" +msgstr "" + +#: builtins/complete.def:80 builtins/complete.def:459 +msgid "binding" +msgstr "" + +#: builtins/complete.def:83 +msgid "directory" +msgstr "" + +#: builtins/complete.def:84 builtins/complete.def:460 +msgid "disabled" +msgstr "" + +#: builtins/complete.def:85 builtins/complete.def:461 +msgid "enabled" +msgstr "" + +#: builtins/complete.def:87 builtins/type.def:315 builtins/type.def:335 +#: builtins/type.def:380 +msgid "file" +msgstr "" + +#: builtins/complete.def:89 builtins/complete.def:463 +msgid "helptopic" +msgstr "" + +#: builtins/complete.def:90 builtins/complete.def:464 +msgid "hostname" +msgstr "" + +#: builtins/complete.def:91 +msgid "group" +msgstr "" + +#: builtins/complete.def:92 +msgid "job" +msgstr "" + +#: builtins/complete.def:93 builtins/set.def:193 builtins/type.def:249 +msgid "keyword" +msgstr "" + +#: builtins/complete.def:94 builtins/complete.def:465 +msgid "running" +msgstr "" + +#: builtins/complete.def:95 +msgid "service" +msgstr "" + +#: builtins/complete.def:96 builtins/complete.def:466 +msgid "setopt" +msgstr "" + +#: builtins/complete.def:97 builtins/complete.def:467 +msgid "shopt" +msgstr "" + +#: builtins/complete.def:98 builtins/complete.def:468 +msgid "signal" +msgstr "" + +#: builtins/complete.def:99 builtins/complete.def:469 +msgid "stopped" +msgstr "" + +#: builtins/complete.def:100 +msgid "user" +msgstr "" + +#: builtins/complete.def:101 builtins/set.def:787 +msgid "variable" +msgstr "" + +#: builtins/complete.def:110 builtins/complete.def:434 +msgid "bashdefault" +msgstr "" + +#: builtins/complete.def:111 builtins/complete.def:435 +msgid "default" +msgstr "" + +#: builtins/complete.def:112 builtins/complete.def:436 +msgid "dirnames" +msgstr "" + +#: builtins/complete.def:113 builtins/complete.def:437 +msgid "filenames" +msgstr "" + +#: builtins/complete.def:114 builtins/complete.def:438 +msgid "nospace" +msgstr "" + +#: builtins/complete.def:115 builtins/complete.def:439 +msgid "plusdirs" +msgstr "" + +#: builtins/complete.def:170 +msgid "abcdefgjko:prsuvA:G:W:P:S:X:F:C:" +msgstr "" + +#: builtins/complete.def:183 +msgid "-r" +msgstr "" + +#: builtins/complete.def:250 +#, c-format +msgid "%s: invalid action name" +msgstr "" + +#: builtins/complete.def:380 builtins/complete.def:523 +#, c-format +msgid "%s: no completion specification" +msgstr "" + +#: builtins/complete.def:392 builtins/complete.def:400 +#, c-format +msgid "%s %s " +msgstr "" + +#: builtins/complete.def:412 +#, c-format +msgid "-A %s " +msgstr "" + +#: builtins/complete.def:418 +#, c-format +msgid "-o %s " +msgstr "" + +#: builtins/complete.def:429 +msgid "complete " +msgstr "" + +#: builtins/complete.def:444 +msgid "-a" +msgstr "" + +#: builtins/complete.def:445 +msgid "-b" +msgstr "" + +#: builtins/complete.def:447 +msgid "-d" +msgstr "" + +#: builtins/complete.def:448 +msgid "-e" +msgstr "" + +#: builtins/complete.def:449 +msgid "-f" +msgstr "" + +#: builtins/complete.def:450 +msgid "-g" +msgstr "" + +#: builtins/complete.def:451 +msgid "-j" +msgstr "" + +#: builtins/complete.def:452 +msgid "-k" +msgstr "" + +#: builtins/complete.def:453 builtins/shopt.def:325 +msgid "-s" +msgstr "" + +#: builtins/complete.def:454 builtins/shopt.def:325 +msgid "-u" +msgstr "" + +#: builtins/complete.def:455 +msgid "-v" +msgstr "" + +#: builtins/complete.def:474 +msgid "-G" +msgstr "" + +#: builtins/complete.def:475 +msgid "-W" +msgstr "" + +#: builtins/complete.def:476 +msgid "-P" +msgstr "" + +#: builtins/complete.def:477 +msgid "-S" +msgstr "" + +#: builtins/complete.def:478 +msgid "-X" +msgstr "" + +#: builtins/complete.def:481 +msgid "-F" +msgstr "" + +#: builtins/complete.def:482 +msgid "-C" +msgstr "" + +#: builtins/complete.def:570 +msgid "warning: -F option may not work as you expect" +msgstr "" + +#: builtins/complete.def:572 +msgid "warning: -C option may not work as you expect" +msgstr "" + +#: builtins/declare.def:104 +msgid "can only be used in a function" +msgstr "" + +#: builtins/declare.def:110 +msgid "+afiprtxF" +msgstr "" + +#: builtins/declare.def:112 +msgid "+fiprtxF" +msgstr "" + +#: builtins/declare.def:294 +msgid "cannot use `-f' to make functions" +msgstr "" + +#: builtins/declare.def:319 +#, c-format +msgid "%s %d %s\n" +msgstr "" + +#: builtins/declare.def:388 +#, c-format +msgid "%s: cannot destroy array variables in this way" +msgstr "" + +#: builtins/echo.def:2 +msgid "echo" +msgstr "" + +#: builtins/echo.def:65 +msgid "neE" +msgstr "" + +#: builtins/echo.def:67 +msgid "n" +msgstr "" + +#: builtins/enable.def:2 +msgid "enable" +msgstr "" + +#: builtins/enable.def:104 +msgid "adnpsf:" +msgstr "" + +#: builtins/enable.def:126 builtins/enable.def:134 +msgid "dynamic loading not available" +msgstr "" + +#: builtins/enable.def:227 +#, c-format +msgid "enable %s\n" +msgstr "" + +#: builtins/enable.def:230 +#, c-format +msgid "enable -n %s\n" +msgstr "" + +#: builtins/enable.def:301 +#, c-format +msgid "cannot open shared object %s: %s" +msgstr "" + +#: builtins/enable.def:319 +msgid "_struct" +msgstr "" + +#: builtins/enable.def:324 +#, c-format +msgid "cannot find %s in shared object %s: %s" +msgstr "" + +#: builtins/enable.def:448 +#, c-format +msgid "%s: not dynamically loaded" +msgstr "" + +#: builtins/enable.def:463 +#, c-format +msgid "%s: cannot delete: %s" +msgstr "" + +#: builtins/exec.def:100 +msgid "cla:" +msgstr "" + +#: builtins/exec.def:204 +#, c-format +msgid "%s: cannot execute: %s" +msgstr "" + +#: builtins/exit.def:61 +msgid "logout\n" +msgstr "" + +#: builtins/exit.def:61 +msgid "exit\n" +msgstr "" + +#: builtins/exit.def:81 +msgid "not login shell: use `exit'" +msgstr "" + +#: builtins/exit.def:109 +msgid "There are stopped jobs.\n" +msgstr "" + +#: builtins/exit.def:145 +msgid "~/.bash_logout" +msgstr "" + +#: builtins/fc.def:2 builtins/fc.def:269 builtins/fc.def:370 +msgid "fc" +msgstr "" + +#: builtins/fc.def:157 +msgid "${FCEDIT:-${EDITOR:-vi}}" +msgstr "" + +#: builtins/fc.def:181 +msgid ":e:lnrs" +msgstr "" + +#: builtins/fc.def:252 +msgid "no command found" +msgstr "" + +#: builtins/fc.def:317 +msgid "history specification" +msgstr "" + +#: builtins/fc.def:335 +msgid "bash-fc" +msgstr "" + +#: builtins/fc.def:338 +#, c-format +msgid "cannot open temp file %s" +msgstr "" + +#: builtins/fc.def:350 +#, c-format +msgid "\t%c" +msgstr "" + +#: builtins/fc.def:363 builtins/fc.def:368 +#, c-format +msgid "%s %s" +msgstr "" + +#: builtins/fc.def:386 builtins/fc.def:394 +msgid "fc builtin" +msgstr "" + +#: builtins/fg_bg.def:123 builtins/jobs.def:264 +msgid "current" +msgstr "" + +#: builtins/fg_bg.def:131 +#, c-format +msgid "job %%%d started without job control" +msgstr "" + +#: builtins/getopts.def:2 +msgid "getopts" +msgstr "" + +#: builtins/getopts.def:248 builtins/getopts.def:255 builtins/getopts.def:282 +#: lib/sh/strftime.c:235 lib/sh/strftime.c:242 lib/sh/strftime.c:250 +#: lib/sh/strftime.c:257 +msgid "?" +msgstr "" + +#: builtins/getopts.def:261 builtins/getopts.def:264 builtins/getopts.def:278 +#: builtins/getopts.def:283 builtins/getopts.def:288 +msgid "OPTARG" +msgstr "" + +#: builtins/hash.def:2 +msgid "hash" +msgstr "" + +#: builtins/hash.def:82 +msgid "hashing disabled" +msgstr "" + +#: builtins/hash.def:89 +msgid "dlp:rt" +msgstr "" + +#: builtins/hash.def:118 +msgid "-t" +msgstr "" + +#: builtins/hash.def:127 +#, c-format +msgid "%s: hash table empty\n" +msgstr "" + +#: builtins/hash.def:210 +#, c-format +msgid "%4d\t%s\n" +msgstr "" + +#: builtins/hash.def:218 builtins/hash.def:257 +#, c-format +msgid "builtin hash -p %s %s\n" +msgstr "" + +#: builtins/hash.def:230 +msgid "hits\tcommand\n" +msgstr "" + +#: builtins/hash.def:261 +#, c-format +msgid "%s\t" +msgstr "" + +#: builtins/help.def:80 builtins/help.def:105 +msgid "s" +msgstr "" + +#: builtins/help.def:105 +#, c-format +msgid "Shell commands matching keyword%s `" +msgstr "" + +#: builtins/help.def:107 +msgid "" +"'\n" +"\n" +msgstr "" + +#: builtins/help.def:121 +#, c-format +msgid "%s: %s\n" +msgstr "" + +#: builtins/help.def:133 +#, c-format +msgid "" +"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +msgstr "" + +#: builtins/help.def:159 +#, c-format +msgid "%s: cannot open: %s" +msgstr "" + +#: builtins/help.def:167 +#, c-format +msgid " %s\n" +msgstr "" + +#: builtins/help.def:177 +msgid "" +"These shell commands are defined internally. Type `help' to see this list.\n" +"Type `help name' to find out more about the function `name'.\n" +"Use `info bash' to find out more about the shell in general.\n" +"Use `man -k' or `info' to find out more about commands not in this list.\n" +"\n" +"A star (*) next to a name means that the command is disabled.\n" +"\n" +msgstr "" + +#: builtins/history.def:2 builtins/set.def:189 +msgid "history" +msgstr "" + +#: builtins/history.def:106 +msgid "acd:npsrw" +msgstr "" + +#: builtins/history.def:147 +msgid "cannot use more than one of -anrw" +msgstr "" + +#: builtins/history.def:179 +msgid "history position" +msgstr "" + +#: builtins/history.def:289 +#, c-format +msgid "%5d%c %s%s\n" +msgstr "" + +#: builtins/history.def:389 +#, c-format +msgid "%s: history expansion failed" +msgstr "" + +#: builtins/inlib.def:2 +msgid "inlib" +msgstr "" + +#: builtins/inlib.def:67 +#, c-format +msgid "%s: inlib failed" +msgstr "" + +#: builtins/jobs.def:2 +msgid "jobs" +msgstr "" + +#: builtins/jobs.def:2 +msgid "disown" +msgstr "" + +#: builtins/jobs.def:85 +msgid "lpnxrs" +msgstr "" + +#: builtins/jobs.def:101 +msgid "no other options allowed with `-x'" +msgstr "" + +#: builtins/jobs.def:185 builtins/jobs.def:197 +msgid "jobs_builtin" +msgstr "" + +#: builtins/jobs.def:224 +msgid "ahr" +msgstr "" + +#: builtins/kill.def:2 +msgid "kill" +msgstr "" + +#: builtins/kill.def:186 +#, c-format +msgid "%s: arguments must be process or job IDs" +msgstr "" + +#: builtins/kill.def:247 +msgid "Unknown error" +msgstr "" + +#: builtins/kill.def:248 +#, c-format +msgid "(%ld) - %s" +msgstr "" + +#: builtins/let.def:2 +msgid "let" +msgstr "" + +#: builtins/printf.def:2 +msgid "printf" +msgstr "" + +#: builtins/printf.def:66 +msgid "<PRIdMAX>lld" +msgstr "" + +#: builtins/printf.def:68 +msgid "<PRIdMAX>ld" +msgstr "" + +#: builtins/printf.def:103 +msgid "#'-+ 0" +msgstr "" + +#: builtins/printf.def:104 +msgid "hjlLtz" +msgstr "" + +#: builtins/printf.def:119 +msgid "L" +msgstr "" + +#: builtins/printf.def:248 +#, c-format +msgid "`%s': missing format character" +msgstr "" + +#: builtins/printf.def:346 builtins/printf.def:373 +msgid "<PRIdMAX>" +msgstr "" + +#: builtins/printf.def:355 builtins/printf.def:378 +msgid "l" +msgstr "" + +#: builtins/printf.def:407 +#, c-format +msgid "`%c': invalid format character" +msgstr "" + +#: builtins/printf.def:427 +#, c-format +msgid "warning: %s: %s" +msgstr "" + +#: builtins/printf.def:504 +#, c-format +msgid "format parsing problem: %s" +msgstr "" + +#: builtins/printf.def:600 +msgid "missing hex digit for \\x" +msgstr "" + +#: builtins/pushd.def:2 builtins/pushd.def:171 builtins/pushd.def:230 +#: builtins/pushd.def:263 builtins/pushd.def:715 +msgid "pushd" +msgstr "" + +#: builtins/pushd.def:2 builtins/pushd.def:724 +msgid "popd" +msgstr "" + +#: builtins/pushd.def:2 builtins/pushd.def:432 builtins/pushd.def:733 +msgid "dirs" +msgstr "" + +#: builtins/pushd.def:167 +msgid "no other directory" +msgstr "" + +#: builtins/pushd.def:434 +msgid "<no current directory>" +msgstr "" + +#: builtins/pushd.def:436 builtins/pushd.def:455 +#, c-format +msgid "%2d %s" +msgstr "" + +#: builtins/pushd.def:463 +#, c-format +msgid "" +"\n" +"%2d %s" +msgstr "" + +#: builtins/pushd.def:478 +msgid "directory stack empty" +msgstr "" + +#: builtins/pushd.def:480 +msgid "directory stack index" +msgstr "" + +#: builtins/pushd.def:625 +msgid "dirstack" +msgstr "" + +#: builtins/pushd.def:651 +msgid "Display the list of currently remembered directories. Directories" +msgstr "" + +#: builtins/pushd.def:652 +msgid "find their way onto the list with the `pushd' command; you can get" +msgstr "" + +#: builtins/pushd.def:653 +msgid "back up through the list with the `popd' command." +msgstr "" + +#: builtins/pushd.def:655 +msgid "The -l flag specifies that `dirs' should not print shorthand versions" +msgstr "" + +#: builtins/pushd.def:656 +msgid "of directories which are relative to your home directory. This means" +msgstr "" + +#: builtins/pushd.def:657 +msgid "that `~/bin' might be displayed as `/homes/bfox/bin'. The -v flag" +msgstr "" + +#: builtins/pushd.def:658 +msgid "causes `dirs' to print the directory stack with one entry per line," +msgstr "" + +#: builtins/pushd.def:659 +msgid "prepending the directory name with its position in the stack. The -p" +msgstr "" + +#: builtins/pushd.def:660 +msgid "flag does the same thing, but the stack position is not prepended." +msgstr "" + +#: builtins/pushd.def:661 +msgid "The -c flag clears the directory stack by deleting all of the elements." +msgstr "" + +#: builtins/pushd.def:663 +msgid "+N displays the Nth entry counting from the left of the list shown by" +msgstr "" + +#: builtins/pushd.def:664 builtins/pushd.def:667 +msgid " dirs when invoked without options, starting with zero." +msgstr "" + +#: builtins/pushd.def:666 +msgid "" +"-N displays the Nth entry counting from the right of the list shown by" +msgstr "" + +#: builtins/pushd.def:672 +msgid "Adds a directory to the top of the directory stack, or rotates" +msgstr "" + +#: builtins/pushd.def:673 +msgid "the stack, making the new top of the stack the current working" +msgstr "" + +#: builtins/pushd.def:674 +msgid "directory. With no arguments, exchanges the top two directories." +msgstr "" + +#: builtins/pushd.def:676 +msgid "+N Rotates the stack so that the Nth directory (counting" +msgstr "" + +#: builtins/pushd.def:677 +msgid " from the left of the list shown by `dirs', starting with" +msgstr "" + +#: builtins/pushd.def:678 builtins/pushd.def:682 +msgid " zero) is at the top." +msgstr "" + +#: builtins/pushd.def:680 +msgid "-N Rotates the stack so that the Nth directory (counting" +msgstr "" + +#: builtins/pushd.def:681 +msgid " from the right of the list shown by `dirs', starting with" +msgstr "" + +#: builtins/pushd.def:684 +msgid "-n suppress the normal change of directory when adding directories" +msgstr "" + +#: builtins/pushd.def:685 +msgid " to the stack, so only the stack is manipulated." +msgstr "" + +#: builtins/pushd.def:687 +msgid "dir adds DIR to the directory stack at the top, making it the" +msgstr "" + +#: builtins/pushd.def:688 +msgid " new current working directory." +msgstr "" + +#: builtins/pushd.def:690 builtins/pushd.def:710 +msgid "You can see the directory stack with the `dirs' command." +msgstr "" + +#: builtins/pushd.def:695 +msgid "Removes entries from the directory stack. With no arguments," +msgstr "" + +#: builtins/pushd.def:696 +msgid "removes the top directory from the stack, and cd's to the new" +msgstr "" + +#: builtins/pushd.def:697 +msgid "top directory." +msgstr "" + +#: builtins/pushd.def:699 +msgid "+N removes the Nth entry counting from the left of the list" +msgstr "" + +#: builtins/pushd.def:700 +msgid " shown by `dirs', starting with zero. For example: `popd +0'" +msgstr "" + +#: builtins/pushd.def:701 +msgid " removes the first directory, `popd +1' the second." +msgstr "" + +#: builtins/pushd.def:703 +msgid "-N removes the Nth entry counting from the right of the list" +msgstr "" + +#: builtins/pushd.def:704 +msgid " shown by `dirs', starting with zero. For example: `popd -0'" +msgstr "" + +#: builtins/pushd.def:705 +msgid " removes the last directory, `popd -1' the next to last." +msgstr "" + +#: builtins/pushd.def:707 +msgid "-n suppress the normal change of directory when removing directories" +msgstr "" + +#: builtins/pushd.def:708 +msgid " from the stack, so only the stack is manipulated." +msgstr "" + +#: builtins/pushd.def:719 +msgid "pushd [+N | -N] [-n] [dir]" +msgstr "" + +#: builtins/pushd.def:728 +msgid "popd [+N | -N] [-n]" +msgstr "" + +#: builtins/pushd.def:737 +msgid "dirs [-clpv] [+N] [-N]" +msgstr "" + +#: builtins/read.def:2 +msgid "read" +msgstr "" + +#: builtins/read.def:178 +msgid "ersa:d:n:p:t:u:" +msgstr "" + +#: builtins/read.def:205 +#, c-format +msgid "%s: invalid timeout specification" +msgstr "" + +#: builtins/read.def:228 +#, c-format +msgid "%s: invalid file descriptor specification" +msgstr "" + +#: builtins/read.def:235 +#, c-format +msgid "%d: invalid file descriptor: %s" +msgstr "" + +#: builtins/read.def:272 builtins/read.def:317 builtins/read.def:491 +msgid "read_builtin" +msgstr "" + +#: builtins/read.def:461 +#, c-format +msgid "read error: %d: %s" +msgstr "" + +#: builtins/reserved.def:123 +msgid "let EXPRESSION" +msgstr "" + +#: builtins/return.def:61 +msgid "can only `return' from a function or sourced script" +msgstr "" + +#: builtins/set.def:161 builtins/shopt.def:170 +msgid "on" +msgstr "" + +#: builtins/set.def:162 builtins/shopt.def:171 +msgid "off" +msgstr "" + +#: builtins/set.def:174 +msgid "allexport" +msgstr "" + +#: builtins/set.def:176 +msgid "braceexpand" +msgstr "" + +#: builtins/set.def:181 +msgid "errexit" +msgstr "" + +#: builtins/set.def:182 +msgid "errtrace" +msgstr "" + +#: builtins/set.def:183 +msgid "functrace" +msgstr "" + +#: builtins/set.def:184 +msgid "hashall" +msgstr "" + +#: builtins/set.def:186 +msgid "histexpand" +msgstr "" + +#: builtins/set.def:192 +msgid "interactive-comments" +msgstr "" + +#: builtins/set.def:194 +msgid "monitor" +msgstr "" + +#: builtins/set.def:195 +msgid "noclobber" +msgstr "" + +#: builtins/set.def:196 +msgid "noexec" +msgstr "" + +#: builtins/set.def:197 +msgid "noglob" +msgstr "" + +#: builtins/set.def:199 +msgid "nolog" +msgstr "" + +#: builtins/set.def:202 +msgid "notify" +msgstr "" + +#: builtins/set.def:204 +msgid "nounset" +msgstr "" + +#: builtins/set.def:205 +msgid "onecmd" +msgstr "" + +#: builtins/set.def:206 +msgid "physical" +msgstr "" + +#: builtins/set.def:207 +msgid "pipefail" +msgstr "" + +#: builtins/set.def:209 +msgid "privileged" +msgstr "" + +#: builtins/set.def:212 +msgid "vi" +msgstr "" + +#: builtins/set.def:214 +msgid "xtrace" +msgstr "" + +#: builtins/set.def:252 builtins/shopt.def:56 +#, c-format +msgid "%-15s\t%s\n" +msgstr "" + +#: builtins/set.def:262 builtins/shopt.def:414 +#, c-format +msgid "set %co %s\n" +msgstr "" + +#: builtins/set.def:313 +msgid "10" +msgstr "" + +#: builtins/set.def:345 +msgid "editing-mode" +msgstr "" + +#: builtins/set.def:493 builtins/set.def:505 builtins/set.def:541 +msgid "SHELLOPTS" +msgstr "" + +#: builtins/set.def:722 +msgid "fv" +msgstr "" + +#: builtins/set.def:742 +msgid "cannot simultaneously unset a function and a variable" +msgstr "" + +#: builtins/set.def:779 +#, c-format +msgid "%s: cannot unset" +msgstr "" + +#: builtins/set.def:786 +#, c-format +msgid "%s: cannot unset: readonly %s" +msgstr "" + +#: builtins/set.def:797 +#, c-format +msgid "%s: not an array variable" +msgstr "" + +#: builtins/setattr.def:98 +msgid "afnp" +msgstr "" + +#: builtins/setattr.def:100 +msgid "fnp" +msgstr "" + +#: builtins/setattr.def:164 +#, c-format +msgid "%s: not a function" +msgstr "" + +#: builtins/setattr.def:201 +msgid "-ra" +msgstr "" + +#: builtins/setattr.def:332 +#, c-format +msgid "declare -%s " +msgstr "" + +#: builtins/setattr.def:334 +#, c-format +msgid "%s -%s " +msgstr "" + +#: builtins/shift.def:65 builtins/shift.def:71 +msgid "shift count" +msgstr "" + +#: builtins/shopt.def:115 +msgid "cdable_vars" +msgstr "" + +#: builtins/shopt.def:116 +msgid "cdspell" +msgstr "" + +#: builtins/shopt.def:117 +msgid "checkhash" +msgstr "" + +#: builtins/shopt.def:118 +msgid "checkwinsize" +msgstr "" + +#: builtins/shopt.def:120 +msgid "cmdhist" +msgstr "" + +#: builtins/shopt.def:122 +msgid "dotglob" +msgstr "" + +#: builtins/shopt.def:123 +msgid "execfail" +msgstr "" + +#: builtins/shopt.def:124 +msgid "expand_aliases" +msgstr "" + +#: builtins/shopt.def:126 +msgid "extdebug" +msgstr "" + +#: builtins/shopt.def:129 +msgid "extglob" +msgstr "" + +#: builtins/shopt.def:131 +msgid "extquote" +msgstr "" + +#: builtins/shopt.def:132 +msgid "failglob" +msgstr "" + +#: builtins/shopt.def:134 +msgid "force_fignore" +msgstr "" + +#: builtins/shopt.def:135 +msgid "gnu_errfmt" +msgstr "" + +#: builtins/shopt.def:136 +msgid "histreedit" +msgstr "" + +#: builtins/shopt.def:139 +msgid "histappend" +msgstr "" + +#: builtins/shopt.def:142 +msgid "histverify" +msgstr "" + +#: builtins/shopt.def:143 +msgid "hostcomplete" +msgstr "" + +#: builtins/shopt.def:145 +msgid "huponexit" +msgstr "" + +#: builtins/shopt.def:146 +msgid "interactive_comments" +msgstr "" + +#: builtins/shopt.def:148 +msgid "lithist" +msgstr "" + +#: builtins/shopt.def:150 +msgid "login_shell" +msgstr "" + +#: builtins/shopt.def:151 +msgid "mailwarn" +msgstr "" + +#: builtins/shopt.def:153 +msgid "no_empty_cmd_completion" +msgstr "" + +#: builtins/shopt.def:155 +msgid "nocaseglob" +msgstr "" + +#: builtins/shopt.def:156 +msgid "nullglob" +msgstr "" + +#: builtins/shopt.def:158 +msgid "progcomp" +msgstr "" + +#: builtins/shopt.def:160 +msgid "promptvars" +msgstr "" + +#: builtins/shopt.def:162 +msgid "restricted_shell" +msgstr "" + +#: builtins/shopt.def:164 +msgid "shift_verbose" +msgstr "" + +#: builtins/shopt.def:165 +msgid "sourcepath" +msgstr "" + +#: builtins/shopt.def:166 +msgid "xpg_echo" +msgstr "" + +#: builtins/shopt.def:196 +msgid "psuoq" +msgstr "" + +#: builtins/shopt.def:224 +msgid "cannot set and unset shell options simultaneously" +msgstr "" + +#: builtins/shopt.def:289 +#, c-format +msgid "%s: invalid shell option name" +msgstr "" + +#: builtins/shopt.def:325 +#, c-format +msgid "shopt %s %s\n" +msgstr "" + +#: builtins/source.def:116 +msgid "filename argument required" +msgstr "" + +#: builtins/source.def:136 +#, c-format +msgid "%s: file not found" +msgstr "" + +#: builtins/suspend.def:2 +msgid "suspend" +msgstr "" + +#: builtins/suspend.def:77 +msgid "f" +msgstr "" + +#: builtins/suspend.def:92 +msgid "cannot suspend" +msgstr "" + +#: builtins/suspend.def:102 +msgid "cannot suspend a login shell" +msgstr "" + +#: builtins/test.def:2 builtins/test.def:98 +msgid "test" +msgstr "" + +#: builtins/times.def:2 +msgid "times" +msgstr "" + +#: builtins/times.def:109 +msgid "" +"0.00 0.00\n" +"0.00 0.00\n" +msgstr "" + +#: builtins/trap.def:39 +msgid "kill -signal $$" +msgstr "" + +#: builtins/trap.def:94 +msgid "lp" +msgstr "" + +#: builtins/trap.def:215 +#, c-format +msgid "trap -- %s %d\n" +msgstr "" + +#: builtins/trap.def:219 builtins/trap.def:221 builtins/trap.def:224 +#, c-format +msgid "trap -- %s %s\n" +msgstr "" + +#: builtins/type.def:2 builtins/type.def:127 +msgid "type" +msgstr "" + +#: builtins/type.def:127 +msgid "-type" +msgstr "" + +#: builtins/type.def:132 +msgid "path" +msgstr "" + +#: builtins/type.def:132 +msgid "-path" +msgstr "" + +#: builtins/type.def:137 +msgid "all" +msgstr "" + +#: builtins/type.def:137 +msgid "-all" +msgstr "" + +#: builtins/type.def:145 +msgid "afptP" +msgstr "" + +#: builtins/type.def:230 +#, c-format +msgid "%s is aliased to `%s'\n" +msgstr "" + +#: builtins/type.def:234 +#, c-format +msgid "alias %s=%s\n" +msgstr "" + +#: builtins/type.def:251 +#, c-format +msgid "%s is a shell keyword\n" +msgstr "" + +#: builtins/type.def:271 +#, c-format +msgid "%s is a function\n" +msgstr "" + +#: builtins/type.def:296 +#, c-format +msgid "%s is a shell builtin\n" +msgstr "" + +#: builtins/type.def:317 builtins/type.def:382 +#, c-format +msgid "%s is %s\n" +msgstr "" + +#: builtins/type.def:337 +#, c-format +msgid "%s is hashed (%s)\n" +msgstr "" + +#: builtins/ulimit.def:2 +msgid "ulimit" +msgstr "" + +#: builtins/ulimit.def:111 +#, c-format +msgid "%ld%s" +msgstr "" + +#: builtins/ulimit.def:195 +msgid "core file size" +msgstr "" + +#: builtins/ulimit.def:195 builtins/ulimit.def:200 +msgid "blocks" +msgstr "" + +#: builtins/ulimit.def:198 +msgid "data seg size" +msgstr "" + +#: builtins/ulimit.def:198 builtins/ulimit.def:202 builtins/ulimit.def:205 +#: builtins/ulimit.def:210 builtins/ulimit.def:217 builtins/ulimit.def:220 +msgid "kbytes" +msgstr "" + +#: builtins/ulimit.def:200 +msgid "file size" +msgstr "" + +#: builtins/ulimit.def:202 +msgid "max locked memory" +msgstr "" + +#: builtins/ulimit.def:205 +msgid "max memory size" +msgstr "" + +#: builtins/ulimit.def:207 +msgid "open files" +msgstr "" + +#: builtins/ulimit.def:208 +msgid "pipe size" +msgstr "" + +#: builtins/ulimit.def:208 +msgid "512 bytes" +msgstr "" + +#: builtins/ulimit.def:210 +msgid "stack size" +msgstr "" + +#: builtins/ulimit.def:213 +msgid "cpu time" +msgstr "" + +#: builtins/ulimit.def:213 +msgid "seconds" +msgstr "" + +#: builtins/ulimit.def:215 +msgid "max user processes" +msgstr "" + +#: builtins/ulimit.def:217 +msgid "virtual memory" +msgstr "" + +#: builtins/ulimit.def:220 +msgid "swap size" +msgstr "" + +#: builtins/ulimit.def:328 builtins/ulimit.def:401 builtins/ulimit.def:674 +msgid "unlimited" +msgstr "" + +#: builtins/ulimit.def:330 +#, c-format +msgid "%s: invalid limit argument" +msgstr "" + +#: builtins/ulimit.def:356 +#, c-format +msgid "`%c': bad command" +msgstr "" + +#: builtins/ulimit.def:385 builtins/ulimit.def:649 +#, c-format +msgid "%s: cannot get limit: %s" +msgstr "" + +#: builtins/ulimit.def:397 builtins/ulimit.def:676 +msgid "hard" +msgstr "" + +#: builtins/ulimit.def:399 builtins/ulimit.def:678 +msgid "soft" +msgstr "" + +#: builtins/ulimit.def:411 +msgid "limit" +msgstr "" + +#: builtins/ulimit.def:423 builtins/ulimit.def:716 +#, c-format +msgid "%s: cannot modify limit: %s" +msgstr "" + +#: builtins/ulimit.def:667 +#, c-format +msgid "(%s, -%c) " +msgstr "" + +#: builtins/ulimit.def:669 +#, c-format +msgid "(-%c) " +msgstr "" + +#: builtins/ulimit.def:671 +#, c-format +msgid "%-18s %16s" +msgstr "" + +#: builtins/umask.def:2 +msgid "umask" +msgstr "" + +#: builtins/umask.def:80 +msgid "Sp" +msgstr "" + +#: builtins/umask.def:110 +msgid "octal number" +msgstr "" + +#: builtins/umask.def:131 +#, c-format +msgid "umask%s " +msgstr "" + +#: builtins/umask.def:131 +msgid " -S" +msgstr "" + +#: builtins/umask.def:135 +#, c-format +msgid "%04lo\n" +msgstr "" + +#: builtins/umask.def:178 +#, c-format +msgid "u=%s,g=%s,o=%s\n" +msgstr "" + +#: builtins/umask.def:194 +msgid "agou" +msgstr "" + +#: builtins/umask.def:224 +#, c-format +msgid "`%c': invalid symbolic mode operator" +msgstr "" + +#: builtins/umask.def:229 +msgid "rwx" +msgstr "" + +#: builtins/umask.def:277 +#, c-format +msgid "`%c': invalid symbolic mode character" +msgstr "" + +#: lib/sh/clock.c:79 lib/sh/timeval.c:143 +#, c-format +msgid "%ldm%d.%03ds" +msgstr "" + +#: lib/sh/fmtulong.c:55 lib/sh/snprintf.c:167 +msgid "0123456789abcdef" +msgstr "" + +#: lib/sh/fmtulong.c:56 lib/sh/snprintf.c:168 +msgid "0123456789ABCDEF" +msgstr "" + +#: lib/sh/fmtulong.c:99 +msgid "invalid base" +msgstr "" + +#: lib/sh/getcwd.c:75 +msgid "../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../.." +msgstr "" + +#: lib/sh/getcwd.c:304 +msgid "cwd: getcwd" +msgstr "" + +#: lib/sh/inet_aton.c:59 +msgid "@(#)inet_addr.c\t8.1 (Berkeley) 6/17/93" +msgstr "" + +#: lib/sh/inet_aton.c:60 +msgid "$Id: inet_addr.c,v 1.5 1996/08/14 03:48:37 drepper Exp $" +msgstr "" + +#: lib/sh/mailstat.c:95 +#, c-format +msgid "%s/cur" +msgstr "" + +#: lib/sh/mailstat.c:101 +#, c-format +msgid "%s/tmp" +msgstr "" + +#: lib/sh/mailstat.c:107 +#, c-format +msgid "%s/new" +msgstr "" + +#: lib/sh/mailstat.c:126 +msgid "cur" +msgstr "" + +#: lib/sh/mailstat.c:126 +msgid "new" +msgstr "" + +#: lib/sh/mailstat.c:127 +#, c-format +msgid "%s/" +msgstr "" + +#: lib/sh/makepath.c:77 +msgid "sh_makepath" +msgstr "" + +#: lib/sh/mktime.c:330 +#, c-format +msgid "%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d" +msgstr "" + +#: lib/sh/mktime.c:345 +msgid "mktime (" +msgstr "" + +#: lib/sh/mktime.c:347 +msgid "" +")\n" +"yields (" +msgstr "" + +#: lib/sh/mktime.c:349 +#, c-format +msgid ") == %ld, should be %ld\n" +msgstr "" + +#: lib/sh/mktime.c:367 +#, c-format +msgid "%d-%d-%d%c" +msgstr "" + +#: lib/sh/mktime.c:370 +#, c-format +msgid "%d:%d:%d%c" +msgstr "" + +#: lib/sh/mktime.c:380 +#, c-format +msgid "mktime returns %ld == " +msgstr "" + +#: lib/sh/mktime.c:410 +#, c-format +msgid "" +"Usage:\t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n" +"\t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n" +"\t%s FROM BY TO - # Do not test those values (for benchmark).\n" +msgstr "" + +#: lib/sh/netopen.c:128 +msgid "tcp" +msgstr "" + +#: lib/sh/netopen.c:128 +msgid "udp" +msgstr "" + +#: lib/sh/netopen.c:156 +#, c-format +msgid "%s: host unknown" +msgstr "" + +#: lib/sh/netopen.c:163 +#, c-format +msgid "%s: invalid service" +msgstr "" + +#: lib/sh/netopen.c:176 lib/sh/netopen.c:234 +msgid "socket" +msgstr "" + +#: lib/sh/netopen.c:183 lib/sh/netopen.c:246 +msgid "connect" +msgstr "" + +#: lib/sh/netopen.c:294 +#, c-format +msgid "%s: bad network path specification" +msgstr "" + +#: lib/sh/netopen.c:334 +msgid "network operations not supported" +msgstr "" + +#: lib/sh/pathphys.c:269 +msgid "sh_realpath" +msgstr "" + +#: lib/sh/shmatch.c:95 lib/sh/shmatch.c:96 +msgid "BASH_REMATCH" +msgstr "" + +#: lib/sh/snprintf.c:402 +msgid "" +msgstr "" + +#: lib/sh/snprintf.c:892 +msgid "INF" +msgstr "" + +#: lib/sh/snprintf.c:892 +msgid "NAN" +msgstr "" + +#: lib/sh/snprintf.c:893 +msgid "inf" +msgstr "" + +#: lib/sh/snprintf.c:893 +msgid "nan" +msgstr "" + +#: lib/sh/snprintf.c:1646 +msgid "out of virtual memory\n" +msgstr "" + +#: lib/sh/snprintf.c:1695 lib/sh/snprintf.c:1697 lib/sh/snprintf.c:1699 +msgid "abcde\n" +msgstr "" + +#: lib/sh/snprintf.c:1696 +#, c-format +msgid "snprintf returns %d with NULL first argument and size of 0\n" +msgstr "" + +#: lib/sh/snprintf.c:1698 +#, c-format +msgid "snprintf returns %d with non-NULL first argument and size of 0\n" +msgstr "" + +#: lib/sh/snprintf.c:1700 +#, c-format +msgid "snprintf returns %d with NULL first argument and non-zero size\n" +msgstr "" + +#: lib/sh/snprintf.c:1710 +#, c-format +msgid "/%%ld %%ld/, 336, 336\n" +msgstr "" + +#: lib/sh/snprintf.c:1711 lib/sh/snprintf.c:1712 lib/sh/snprintf.c:1713 +#, c-format +msgid "/%ld %ld/\n" +msgstr "" + +#: lib/sh/snprintf.c:1717 +#, c-format +msgid "/%%d/, 336\n" +msgstr "" + +#: lib/sh/snprintf.c:1718 lib/sh/snprintf.c:1719 lib/sh/snprintf.c:1720 +#, c-format +msgid "/%d/\n" +msgstr "" + +#: lib/sh/snprintf.c:1724 +#, c-format +msgid "/%%2d/, 336\n" +msgstr "" + +#: lib/sh/snprintf.c:1725 lib/sh/snprintf.c:1726 lib/sh/snprintf.c:1727 +#, c-format +msgid "/%2d/\n" +msgstr "" + +#: lib/sh/snprintf.c:1731 +#, c-format +msgid "/%%10d/, 336\n" +msgstr "" + +#: lib/sh/snprintf.c:1732 lib/sh/snprintf.c:1733 lib/sh/snprintf.c:1734 +#, c-format +msgid "/%10d/\n" +msgstr "" + +#: lib/sh/snprintf.c:1738 +#, c-format +msgid "/%%-10d/, 336\n" +msgstr "" + +#: lib/sh/snprintf.c:1739 lib/sh/snprintf.c:1740 lib/sh/snprintf.c:1741 +#, c-format +msgid "/%-10d/\n" +msgstr "" + +#: lib/sh/snprintf.c:1748 +#, c-format +msgid "/%%f/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1749 lib/sh/snprintf.c:1750 lib/sh/snprintf.c:1751 +#, c-format +msgid "/%f/\n" +msgstr "" + +#: lib/sh/snprintf.c:1755 +#, c-format +msgid "/%%e/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1756 lib/sh/snprintf.c:1757 lib/sh/snprintf.c:1758 +#, c-format +msgid "/%e/\n" +msgstr "" + +#: lib/sh/snprintf.c:1762 +#, c-format +msgid "/%%4.2f/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1763 lib/sh/snprintf.c:1764 lib/sh/snprintf.c:1765 +#, c-format +msgid "/%4.2f/\n" +msgstr "" + +#: lib/sh/snprintf.c:1769 +#, c-format +msgid "/%%3.1f/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1770 lib/sh/snprintf.c:1771 lib/sh/snprintf.c:1772 +#, c-format +msgid "/%3.1f/\n" +msgstr "" + +#: lib/sh/snprintf.c:1776 +#, c-format +msgid "/%%10.3f/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1777 lib/sh/snprintf.c:1778 lib/sh/snprintf.c:1779 +#, c-format +msgid "/%10.3f/\n" +msgstr "" + +#: lib/sh/snprintf.c:1783 +#, c-format +msgid "/%%10.3e/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1784 lib/sh/snprintf.c:1785 lib/sh/snprintf.c:1786 +#, c-format +msgid "/%10.3e/\n" +msgstr "" + +#: lib/sh/snprintf.c:1790 +#, c-format +msgid "/%%+4.2f/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1791 lib/sh/snprintf.c:1792 lib/sh/snprintf.c:1793 +#, c-format +msgid "/%+4.2f/\n" +msgstr "" + +#: lib/sh/snprintf.c:1797 +#, c-format +msgid "/%%010.2f/, 1234.56\n" +msgstr "" + +#: lib/sh/snprintf.c:1798 lib/sh/snprintf.c:1799 lib/sh/snprintf.c:1800 +#, c-format +msgid "/%010.2f/\n" +msgstr "" + +#: lib/sh/snprintf.c:1804 +msgid "Outstanding acting !" +msgstr "" + +#: lib/sh/snprintf.c:1807 +#, c-format +msgid "/%%2s/, \"%s\"\n" +msgstr "" + +#: lib/sh/snprintf.c:1808 lib/sh/snprintf.c:1809 lib/sh/snprintf.c:1810 +#, c-format +msgid "/%2s/\n" +msgstr "" + +#: lib/sh/snprintf.c:1814 +#, c-format +msgid "/%%22s/ %s\n" +msgstr "" + +#: lib/sh/snprintf.c:1815 lib/sh/snprintf.c:1816 lib/sh/snprintf.c:1817 +#, c-format +msgid "/%22s/\n" +msgstr "" + +#: lib/sh/snprintf.c:1821 +#, c-format +msgid "/%%22.5s/ %s\n" +msgstr "" + +#: lib/sh/snprintf.c:1822 lib/sh/snprintf.c:1823 lib/sh/snprintf.c:1824 +#, c-format +msgid "/%22.5s/\n" +msgstr "" + +#: lib/sh/snprintf.c:1828 +#, c-format +msgid "/%%-22.5s/ %s\n" +msgstr "" + +#: lib/sh/snprintf.c:1829 lib/sh/snprintf.c:1830 lib/sh/snprintf.c:1831 +#, c-format +msgid "/%-22.5s/\n" +msgstr "" + +#: lib/sh/snprintf.c:1837 +#, c-format +msgid "%%x %%X %%#x, 31, 31, 31\n" +msgstr "" + +#: lib/sh/snprintf.c:1838 lib/sh/snprintf.c:1839 lib/sh/snprintf.c:1840 +#, c-format +msgid "%x %X %#x\n" +msgstr "" + +#: lib/sh/snprintf.c:1844 +#, c-format +msgid "**%%d**%% d**%% d**, 42, 42, -42\n" +msgstr "" + +#: lib/sh/snprintf.c:1845 lib/sh/snprintf.c:1846 lib/sh/snprintf.c:1847 +#, c-format +msgid "**%d**% d**% d**\n" +msgstr "" + +#: lib/sh/snprintf.c:1853 +#, c-format +msgid "/%%g/, 31.4\n" +msgstr "" + +#: lib/sh/snprintf.c:1854 lib/sh/snprintf.c:1855 lib/sh/snprintf.c:1856 +#: lib/sh/snprintf.c:1975 lib/sh/snprintf.c:1976 lib/sh/snprintf.c:1977 +#: lib/sh/snprintf.c:1982 lib/sh/snprintf.c:1983 lib/sh/snprintf.c:1984 +#, c-format +msgid "/%g/\n" +msgstr "" + +#: lib/sh/snprintf.c:1860 +#, c-format +msgid "/%%.6g/, 31.4\n" +msgstr "" + +#: lib/sh/snprintf.c:1861 lib/sh/snprintf.c:1862 lib/sh/snprintf.c:1863 +#, c-format +msgid "/%.6g/\n" +msgstr "" + +#: lib/sh/snprintf.c:1867 +#, c-format +msgid "/%%.1G/, 31.4\n" +msgstr "" + +#: lib/sh/snprintf.c:1868 lib/sh/snprintf.c:1869 lib/sh/snprintf.c:1870 +#: lib/sh/snprintf.c:1875 lib/sh/snprintf.c:1876 lib/sh/snprintf.c:1877 +#, c-format +msgid "/%.1G/\n" +msgstr "" + +#: lib/sh/snprintf.c:1874 +#, c-format +msgid "/%%.1G/, 3100000000.4\n" +msgstr "" + +#: lib/sh/snprintf.c:1881 +#, c-format +msgid "abc%%n\n" +msgstr "" + +#: lib/sh/snprintf.c:1882 lib/sh/snprintf.c:1883 lib/sh/snprintf.c:1885 +#, c-format +msgid "abc%n" +msgstr "" + +#: lib/sh/snprintf.c:1884 lib/sh/snprintf.c:1886 +#, c-format +msgid "" +"%d\n" +"\n" +msgstr "" + +#: lib/sh/snprintf.c:1888 +#, c-format +msgid "%%*.*s --> 10.10\n" +msgstr "" + +#: lib/sh/snprintf.c:1889 lib/sh/snprintf.c:1890 lib/sh/snprintf.c:1891 +#, c-format +msgid "%*.*s\n" +msgstr "" + +#: lib/sh/snprintf.c:1895 +#, c-format +msgid "%%%%%%%%\n" +msgstr "" + +#: lib/sh/snprintf.c:1896 lib/sh/snprintf.c:1897 lib/sh/snprintf.c:1898 +#, c-format +msgid "%%%%\n" +msgstr "" + +#: lib/sh/snprintf.c:1902 +msgid "Hello this is a too big string for the buffer" +msgstr "" + +#: lib/sh/snprintf.c:1904 +#, c-format +msgid "<%%>, %s\n" +msgstr "" + +#: lib/sh/snprintf.c:1907 lib/sh/snprintf.c:1908 lib/sh/snprintf.c:1915 +#: lib/sh/snprintf.c:1922 lib/sh/snprintf.c:1930 lib/sh/snprintf.c:1939 +#: lib/sh/snprintf.c:1948 lib/sh/snprintf.c:1955 +#, c-format +msgid "<%s>\n" +msgstr "" + +#: lib/sh/snprintf.c:1909 lib/sh/snprintf.c:1916 lib/sh/snprintf.c:1923 +#: lib/sh/snprintf.c:1931 lib/sh/snprintf.c:1940 lib/sh/snprintf.c:1949 +#: lib/sh/snprintf.c:1956 +#, c-format +msgid "" +"<%s>\n" +"\n" +msgstr "" + +#: lib/sh/snprintf.c:1911 +#, c-format +msgid "<%%p> vsnprintf\n" +msgstr "" + +#: lib/sh/snprintf.c:1912 lib/sh/snprintf.c:1913 +#, c-format +msgid "%p" +msgstr "" + +#: lib/sh/snprintf.c:1914 +#, c-format +msgid "<%p>\n" +msgstr "" + +#: lib/sh/snprintf.c:1918 +#, c-format +msgid "<%%lu> LONG_MAX+1\n" +msgstr "" + +#: lib/sh/snprintf.c:1919 lib/sh/snprintf.c:1920 +#, c-format +msgid "%lu" +msgstr "" + +#: lib/sh/snprintf.c:1921 +#, c-format +msgid "<%lu>\n" +msgstr "" + +#: lib/sh/snprintf.c:1926 +#, c-format +msgid "<%%llu> LLONG_MAX+1\n" +msgstr "" + +#: lib/sh/snprintf.c:1927 lib/sh/snprintf.c:1928 +#, c-format +msgid "%llu" +msgstr "" + +#: lib/sh/snprintf.c:1929 +#, c-format +msgid "<%llu>\n" +msgstr "" + +#: lib/sh/snprintf.c:1935 +#, c-format +msgid "<%%6.2LE> 42.42\n" +msgstr "" + +#: lib/sh/snprintf.c:1936 lib/sh/snprintf.c:1937 +#, c-format +msgid "%6.2LE" +msgstr "" + +#: lib/sh/snprintf.c:1938 +#, c-format +msgid "<%6.2LE>\n" +msgstr "" + +#: lib/sh/snprintf.c:1944 +#, c-format +msgid "<%%6.2A> 42.42\n" +msgstr "" + +#: lib/sh/snprintf.c:1945 lib/sh/snprintf.c:1946 +#, c-format +msgid "%6.2A" +msgstr "" + +#: lib/sh/snprintf.c:1947 +#, c-format +msgid "<%6.2A>\n" +msgstr "" + +#: lib/sh/snprintf.c:1951 +#, c-format +msgid "<%%6.2LA> 42.42\n" +msgstr "" + +#: lib/sh/snprintf.c:1952 lib/sh/snprintf.c:1953 +#, c-format +msgid "%6.2LA" +msgstr "" + +#: lib/sh/snprintf.c:1954 +#, c-format +msgid "<%6.2LA>\n" +msgstr "" + +#: lib/sh/snprintf.c:1959 +#, c-format +msgid "<%%.10240f> DBL_MAX\n" +msgstr "" + +#: lib/sh/snprintf.c:1960 lib/sh/snprintf.c:1961 +#, c-format +msgid "%.10240f" +msgstr "" + +#: lib/sh/snprintf.c:1962 +#, c-format +msgid "<%.10240f>\n" +msgstr "" + +#: lib/sh/snprintf.c:1963 lib/sh/snprintf.c:1970 +#, c-format +msgid "<%d> <%s>\n" +msgstr "" + +#: lib/sh/snprintf.c:1964 lib/sh/snprintf.c:1971 +#, c-format +msgid "" +"<%d> <%s>\n" +"\n" +msgstr "" + +#: lib/sh/snprintf.c:1966 +#, c-format +msgid "<%%.10240Lf> LDBL_MAX\n" +msgstr "" + +#: lib/sh/snprintf.c:1967 lib/sh/snprintf.c:1968 +#, c-format +msgid "%.10240Lf" +msgstr "" + +#: lib/sh/snprintf.c:1969 +#, c-format +msgid "<%.10240Lf>\n" +msgstr "" + +#: lib/sh/snprintf.c:1974 +#, c-format +msgid "/%%g/, 421.2345\n" +msgstr "" + +#: lib/sh/snprintf.c:1981 +#, c-format +msgid "/%%g/, 4214.2345\n" +msgstr "" + +#: lib/sh/snprintf.c:1988 +#, c-format +msgid "/%%.5g/, 4214.2345\n" +msgstr "" + +#: lib/sh/snprintf.c:1989 lib/sh/snprintf.c:1990 lib/sh/snprintf.c:1991 +#, c-format +msgid "/%.5g/\n" +msgstr "" + +#: lib/sh/snprintf.c:1995 +#, c-format +msgid "/%%.4g/, 4214.2345\n" +msgstr "" + +#: lib/sh/snprintf.c:1996 lib/sh/snprintf.c:1997 lib/sh/snprintf.c:1998 +#, c-format +msgid "/%.4g/\n" +msgstr "" + +#: lib/sh/snprintf.c:2002 +#, c-format +msgid "/%%'ld %%'ld/, 12345, 1234567\n" +msgstr "" + +#: lib/sh/snprintf.c:2003 lib/sh/snprintf.c:2004 lib/sh/snprintf.c:2005 +#: lib/sh/snprintf.c:2010 lib/sh/snprintf.c:2011 lib/sh/snprintf.c:2012 +#: lib/sh/snprintf.c:2017 lib/sh/snprintf.c:2018 lib/sh/snprintf.c:2019 +#, c-format +msgid "/%'ld %'ld/\n" +msgstr "" + +#: lib/sh/snprintf.c:2009 +#, c-format +msgid "/%%'ld %%'ld/, 336, 3336\n" +msgstr "" + +#: lib/sh/snprintf.c:2016 +#, c-format +msgid "/%%'ld %%'ld/, -42786, -142786\n" +msgstr "" + +#: lib/sh/snprintf.c:2023 +#, c-format +msgid "/%%'f %%'f/, 421.2345, 421234.56789\n" +msgstr "" + +#: lib/sh/snprintf.c:2024 lib/sh/snprintf.c:2025 lib/sh/snprintf.c:2026 +#: lib/sh/snprintf.c:2031 lib/sh/snprintf.c:2032 lib/sh/snprintf.c:2033 +#, c-format +msgid "/%'f %'f/\n" +msgstr "" + +#: lib/sh/snprintf.c:2030 +#, c-format +msgid "/%%'f %%'f/, -421.2345, -421234.56789\n" +msgstr "" + +#: lib/sh/snprintf.c:2037 +#, c-format +msgid "/%%'g %%'g/, 421.2345, 421234.56789\n" +msgstr "" + +#: lib/sh/snprintf.c:2038 lib/sh/snprintf.c:2039 lib/sh/snprintf.c:2040 +#: lib/sh/snprintf.c:2045 lib/sh/snprintf.c:2046 lib/sh/snprintf.c:2047 +#, c-format +msgid "/%'g %'g/\n" +msgstr "" + +#: lib/sh/snprintf.c:2044 +#, c-format +msgid "/%%'g %%'g/, -421.2345, -421234.56789\n" +msgstr "" + +#: lib/sh/snprintf.c:2052 +#, c-format +msgid "/%%'g/, 4213455.8392\n" +msgstr "" + +#: lib/sh/snprintf.c:2053 lib/sh/snprintf.c:2054 lib/sh/snprintf.c:2055 +#, c-format +msgid "/%'g/\n" +msgstr "" + +#: lib/sh/strerror.c:49 +msgid "Unknown system error " +msgstr "" + +#: lib/sh/strftime.c:153 +msgid "Sun" +msgstr "" + +#: lib/sh/strftime.c:153 +msgid "Mon" +msgstr "" + +#: lib/sh/strftime.c:153 +msgid "Tue" +msgstr "" + +#: lib/sh/strftime.c:153 +msgid "Wed" +msgstr "" + +#: lib/sh/strftime.c:154 +msgid "Thu" +msgstr "" + +#: lib/sh/strftime.c:154 +msgid "Fri" +msgstr "" + +#: lib/sh/strftime.c:154 +msgid "Sat" +msgstr "" + +#: lib/sh/strftime.c:157 +msgid "Sunday" +msgstr "" + +#: lib/sh/strftime.c:157 +msgid "Monday" +msgstr "" + +#: lib/sh/strftime.c:157 +msgid "Tuesday" +msgstr "" + +#: lib/sh/strftime.c:157 +msgid "Wednesday" +msgstr "" + +#: lib/sh/strftime.c:158 +msgid "Thursday" +msgstr "" + +#: lib/sh/strftime.c:158 +msgid "Friday" +msgstr "" + +#: lib/sh/strftime.c:158 +msgid "Saturday" +msgstr "" + +#: lib/sh/strftime.c:161 +msgid "Jan" +msgstr "" + +#: lib/sh/strftime.c:161 +msgid "Feb" +msgstr "" + +#: lib/sh/strftime.c:161 +msgid "Mar" +msgstr "" + +#: lib/sh/strftime.c:161 +msgid "Apr" +msgstr "" + +#: lib/sh/strftime.c:161 lib/sh/strftime.c:166 +msgid "May" +msgstr "" + +#: lib/sh/strftime.c:161 +msgid "Jun" +msgstr "" + +#: lib/sh/strftime.c:162 +msgid "Jul" +msgstr "" + +#: lib/sh/strftime.c:162 +msgid "Aug" +msgstr "" + +#: lib/sh/strftime.c:162 +msgid "Sep" +msgstr "" + +#: lib/sh/strftime.c:162 +msgid "Oct" +msgstr "" + +#: lib/sh/strftime.c:162 +msgid "Nov" +msgstr "" + +#: lib/sh/strftime.c:162 +msgid "Dec" +msgstr "" + +#: lib/sh/strftime.c:165 +msgid "January" +msgstr "" + +#: lib/sh/strftime.c:165 +msgid "February" +msgstr "" + +#: lib/sh/strftime.c:165 +msgid "March" +msgstr "" + +#: lib/sh/strftime.c:165 +msgid "April" +msgstr "" + +#: lib/sh/strftime.c:166 +msgid "June" +msgstr "" + +#: lib/sh/strftime.c:166 +msgid "July" +msgstr "" + +#: lib/sh/strftime.c:166 +msgid "August" +msgstr "" + +#: lib/sh/strftime.c:166 +msgid "September" +msgstr "" + +#: lib/sh/strftime.c:167 +msgid "October" +msgstr "" + +#: lib/sh/strftime.c:167 +msgid "November" +msgstr "" + +#: lib/sh/strftime.c:167 +msgid "December" +msgstr "" + +#: lib/sh/strftime.c:169 +msgid "AM" +msgstr "" + +#: lib/sh/strftime.c:169 +msgid "PM" +msgstr "" + +#: lib/sh/strftime.c:270 +msgid "%A %B %d %T %Y" +msgstr "" + +#: lib/sh/strftime.c:275 lib/sh/strftime.c:280 lib/sh/strftime.c:321 +#: lib/sh/strftime.c:329 lib/sh/strftime.c:338 lib/sh/strftime.c:347 +#: lib/sh/strftime.c:352 lib/sh/strftime.c:393 lib/sh/strftime.c:413 +#: lib/sh/strftime.c:417 lib/sh/strftime.c:426 lib/sh/strftime.c:440 +#, c-format +msgid "%02d" +msgstr "" + +#: lib/sh/strftime.c:284 +msgid "%m/%d/%y" +msgstr "" + +#: lib/sh/strftime.c:288 lib/sh/strftime.c:519 lib/sh/strftime.c:528 +#, c-format +msgid "%2d" +msgstr "" + +#: lib/sh/strftime.c:296 +msgid "%Y-%m-%d" +msgstr "" + +#: lib/sh/strftime.c:342 +#, c-format +msgid "%03d" +msgstr "" + +#: lib/sh/strftime.c:373 +msgid "%I:%M:%S %p" +msgstr "" + +#: lib/sh/strftime.c:386 lib/malloc/stats.c:181 +#, c-format +msgid "%ld" +msgstr "" + +#: lib/sh/strftime.c:430 +msgid "%A %B %d %Y" +msgstr "" + +#: lib/sh/strftime.c:495 +#, c-format +msgid "%02d%02d" +msgstr "" + +#: lib/sh/strftime.c:544 +#, c-format +msgid "%2d-%3.3s-%4d" +msgstr "" + +#: lib/sh/strftime.c:786 +#, c-format +msgid "(%%A) full weekday name, var length (Sunday..Saturday) %A" +msgstr "" + +#: lib/sh/strftime.c:787 +msgid "(%%B) full month name, var length (January..December) %B" +msgstr "" + +#: lib/sh/strftime.c:788 +#, c-format +msgid "(%%C) Century %C" +msgstr "" + +#: lib/sh/strftime.c:789 +msgid "(%%D) date (%%m/%%d/%%y) %D" +msgstr "" + +#: lib/sh/strftime.c:790 +#, c-format +msgid "(%%E) Locale extensions (ignored) %E" +msgstr "" + +#: lib/sh/strftime.c:791 +#, c-format +msgid "(%%F) full month name, var length (January..December) %F" +msgstr "" + +#: lib/sh/strftime.c:792 +msgid "(%%H) hour (24-hour clock, 00..23) %H" +msgstr "" + +#: lib/sh/strftime.c:793 +msgid "(%%I) hour (12-hour clock, 01..12) %I" +msgstr "" + +#: lib/sh/strftime.c:794 +msgid "(%%M) minute (00..59) %M" +msgstr "" + +#: lib/sh/strftime.c:795 +msgid "(%%N) Emporer/Era Name %N" +msgstr "" + +#: lib/sh/strftime.c:796 +msgid "(%%O) Locale extensions (ignored) %O" +msgstr "" + +#: lib/sh/strftime.c:797 +msgid "(%%R) time, 24-hour (%%H:%%M) %R" +msgstr "" + +#: lib/sh/strftime.c:798 +#, c-format +msgid "(%%S) second (00..60) %S" +msgstr "" + +#: lib/sh/strftime.c:799 +msgid "(%%T) time, 24-hour (%%H:%%M:%%S) %T" +msgstr "" + +#: lib/sh/strftime.c:800 +msgid "(%%U) week of year, Sunday as first day of week (00..53) %U" +msgstr "" + +#: lib/sh/strftime.c:801 +msgid "(%%V) week of year according to ISO 8601 %V" +msgstr "" + +#: lib/sh/strftime.c:802 +msgid "(%%W) week of year, Monday as first day of week (00..53) %W" +msgstr "" + +#: lib/sh/strftime.c:803 +msgid "(%%X) appropriate locale time representation (%H:%M:%S) %X" +msgstr "" + +#: lib/sh/strftime.c:804 +msgid "(%%Y) year with century (1970...) %Y" +msgstr "" + +#: lib/sh/strftime.c:805 +msgid "(%%Z) timezone (EDT), or blank if timezone not determinable %Z" +msgstr "" + +#: lib/sh/strftime.c:806 +#, c-format +msgid "(%%a) locale's abbreviated weekday name (Sun..Sat) %a" +msgstr "" + +#: lib/sh/strftime.c:807 +msgid "(%%b) locale's abbreviated month name (Jan..Dec) %b" +msgstr "" + +#: lib/sh/strftime.c:808 +msgid "(%%c) full date (Sat Nov 4 12:02:33 1989)%n%t%t%t %c" +msgstr "" + +#: lib/sh/strftime.c:809 +#, c-format +msgid "(%%d) day of the month (01..31) %d" +msgstr "" + +#: lib/sh/strftime.c:810 +#, c-format +msgid "(%%e) day of the month, blank-padded ( 1..31) %e" +msgstr "" + +#: lib/sh/strftime.c:811 +msgid "(%%h) should be same as (%%b) %h" +msgstr "" + +#: lib/sh/strftime.c:812 +msgid "(%%j) day of the year (001..366) %j" +msgstr "" + +#: lib/sh/strftime.c:813 +msgid "(%%k) hour, 24-hour clock, blank pad ( 0..23) %k" +msgstr "" + +#: lib/sh/strftime.c:814 +msgid "(%%l) hour, 12-hour clock, blank pad ( 0..12) %l" +msgstr "" + +#: lib/sh/strftime.c:815 +#, c-format +msgid "(%%m) month (01..12) %m" +msgstr "" + +#: lib/sh/strftime.c:816 +#, c-format +msgid "(%%o) Emporer/Era Year %o" +msgstr "" + +#: lib/sh/strftime.c:817 +#, c-format +msgid "(%%p) locale's AM or PM based on 12-hour clock %p" +msgstr "" + +#: lib/sh/strftime.c:818 +msgid "(%%r) time, 12-hour (same as %%I:%%M:%%S %%p) %r" +msgstr "" + +#: lib/sh/strftime.c:819 +#, c-format +msgid "(%%u) ISO 8601: Weekday as decimal number [1 (Monday) - 7] %u" +msgstr "" + +#: lib/sh/strftime.c:820 +msgid "(%%v) VMS date (dd-bbb-YYYY) %v" +msgstr "" + +#: lib/sh/strftime.c:821 +msgid "(%%w) day of week (0..6, Sunday == 0) %w" +msgstr "" + +#: lib/sh/strftime.c:822 +#, c-format +msgid "(%%x) appropriate locale date representation %x" +msgstr "" + +#: lib/sh/strftime.c:823 +msgid "(%%y) last two digits of year (00..99) %y" +msgstr "" + +#: lib/sh/strftime.c:824 +msgid "(%%z) timezone offset east of GMT as HHMM (e.g. -0500) %z" +msgstr "" + +#: lib/sh/stringlist.c:235 +#, c-format +msgid "%s%s\n" +msgstr "" + +#: lib/sh/strtoimax.c:38 lib/sh/strtoimax.c:45 lib/sh/strtoumax.c:38 +#: lib/sh/strtoumax.c:45 +msgid "this configure-time declaration test was not run" +msgstr "" + +#: lib/sh/strtoimax.c:83 +#, c-format +msgid "sizeof intmax_t: %d\n" +msgstr "" + +#: lib/sh/strtoimax.c:86 +#, c-format +msgid "sizeof long long: %d\n" +msgstr "" + +#: lib/sh/strtoimax.c:88 +#, c-format +msgid "sizeof long: %d\n" +msgstr "" + +#: lib/sh/strtoimax.c:98 +#, c-format +msgid "%lld %lld %ld\n" +msgstr "" + +#: lib/sh/strtoumax.c:83 +#, c-format +msgid "sizeof uintmax_t: %d\n" +msgstr "" + +#: lib/sh/strtoumax.c:86 +#, c-format +msgid "sizeof unsigned long long: %d\n" +msgstr "" + +#: lib/sh/strtoumax.c:88 +#, c-format +msgid "sizeof unsigned long: %d\n" +msgstr "" + +#: lib/sh/strtoumax.c:98 +#, c-format +msgid "%llu %llu %lu\n" +msgstr "" + +#: lib/sh/tmpfile.c:46 +msgid "shtmp" +msgstr "" + +#: lib/sh/tmpfile.c:73 +msgid "/var/tmp" +msgstr "" + +#: lib/sh/tmpfile.c:77 +msgid "/usr/tmp" +msgstr "" + +#: lib/sh/tmpfile.c:92 +msgid "TMPDIR" +msgstr "" + +#: lib/sh/tmpfile.c:122 lib/sh/tmpfile.c:167 +#, c-format +msgid "%s/%s.XXXXXX" +msgstr "" + +#: lib/sh/tmpfile.c:135 lib/sh/tmpfile.c:184 +#, c-format +msgid "%s/%s-%lu" +msgstr "" + +#: lib/sh/tmpfile.c:212 +msgid "w+" +msgstr "" + +#: lib/malloc/alloca.c:446 +#, c-format +msgid "%011o %011o %011o\n" +msgstr "" + +#: lib/malloc/alloca.c:467 +#, c-format +msgid "%011o %011o\n" +msgstr "" + +#: lib/malloc/i386-alloca.s:1 +msgid "alloca.s" +msgstr "" + +#: lib/malloc/imalloc.h:52 +msgid "x" +msgstr "" + +#: lib/malloc/malloc.c:298 +#, c-format +msgid "malloc: failed assertion: %s\n" +msgstr "" + +#: lib/malloc/malloc.c:314 +#, c-format +msgid "" +"\r\n" +"malloc: %s:%d: assertion botched\r\n" +msgstr "" + +#: lib/malloc/malloc.c:355 +msgid "bcoalesce: CHAIN(mp2) != mp1" +msgstr "" + +#: lib/malloc/malloc.c:604 +msgid "malloc_debug_dummy\n" +msgstr "" + +#: lib/malloc/malloc.c:740 +msgid "malloc: block on free list clobbered" +msgstr "" + +#: lib/malloc/malloc.c:766 lib/malloc/malloc.c:768 lib/malloc/malloc.c:773 +msgid "malloc" +msgstr "" + +#: lib/malloc/malloc.c:817 +msgid "free: called with already freed block argument" +msgstr "" + +#: lib/malloc/malloc.c:820 +msgid "free: called with unallocated block argument" +msgstr "" + +#: lib/malloc/malloc.c:839 +msgid "free: underflow detected; mh_nbytes out of range" +msgstr "" + +#: lib/malloc/malloc.c:845 +msgid "free: start and end chunk sizes differ" +msgstr "" + +#: lib/malloc/malloc.c:942 +msgid "realloc: called with unallocated block argument" +msgstr "" + +#: lib/malloc/malloc.c:957 +msgid "realloc: underflow detected; mh_nbytes out of range" +msgstr "" + +#: lib/malloc/malloc.c:963 +msgid "realloc: start and end chunk sizes differ" +msgstr "" + +#: lib/malloc/malloc.c:1009 lib/malloc/malloc.c:1011 lib/malloc/malloc.c:1016 +msgid "realloc" +msgstr "" + +#: lib/malloc/memtest.c:125 lib/malloc/memtest.c:138 +msgid "malloc-test: " +msgstr "" + +#: lib/malloc/stats.c:99 +#, c-format +msgid "" +"Memory allocation statistics: %s\n" +" size\tfree\tin use\ttotal\tmorecore lesscore split\tcoalesce\n" +msgstr "" + +#: lib/malloc/stats.c:104 +#, c-format +msgid "%8lu\t%4d\t%6d\t%5d\t%8d\t%d %5d %8d\n" +msgstr "" + +#: lib/malloc/stats.c:108 +#, c-format +msgid "" +"\n" +"Total bytes in use: %lu, total bytes free: %lu\n" +msgstr "" + +#: lib/malloc/stats.c:110 +#, c-format +msgid "" +"\n" +"Total bytes requested by application: %lu\n" +msgstr "" + +#: lib/malloc/stats.c:111 +#, c-format +msgid "Total mallocs: %d, total frees: %d, total reallocs: %d (%d copies)\n" +msgstr "" + +#: lib/malloc/stats.c:113 +#, c-format +msgid "Total sbrks: %d, total bytes via sbrk: %d\n" +msgstr "" + +#: lib/malloc/stats.c:115 +#, c-format +msgid "Total blocks split: %d, total block coalesces: %d\n" +msgstr "" + +#: lib/malloc/stats.c:134 +msgid "/var/tmp/maltrace/stats." +msgstr "" + +#: lib/malloc/stats.c:172 +#, c-format +msgid "%s%ld" +msgstr "" + +#: lib/malloc/table.c:152 +#, c-format +msgid "malloc: %p: %s: last %s from %s:%d\n" +msgstr "" + +#: lib/malloc/table.c:154 lib/malloc/table.c:155 lib/malloc/table.c:239 +#: lib/malloc/watch.c:46 +msgid "allocated" +msgstr "" + +#: lib/malloc/table.c:154 lib/malloc/table.c:222 lib/malloc/table.c:237 +msgid "free" +msgstr "" + +#: lib/malloc/table.c:155 lib/malloc/watch.c:48 +msgid "freed" +msgstr "" + +#: lib/malloc/table.c:175 +msgid "register_alloc: alloc table is full with FIND_ALLOC?\n" +msgstr "" + +#: lib/malloc/table.c:182 +#, c-format +msgid "register_alloc: %p already in table as allocated?\n" +msgstr "" + +#: lib/malloc/table.c:211 +#, c-format +msgid "register_free: %p not in allocation table?\n" +msgstr "" + +#: lib/malloc/table.c:218 +#, c-format +msgid "register_free: %p already in table as free?\n" +msgstr "" + +#: lib/malloc/table.c:241 +msgid "undetermined?" +msgstr "" + +#: lib/malloc/table.c:255 +#, c-format +msgid "[%d] %p:%d:%s:%s:%s:%d:%d:%d\n" +msgstr "" + +#: lib/malloc/trace.c:51 +#, c-format +msgid "alloc: %s: %p (%d bytes) from '%s:%d'\n" +msgstr "" + +#: lib/malloc/trace.c:54 +#, c-format +msgid "alloc:%p:%d:%s:%d\n" +msgstr "" + +#: lib/malloc/trace.c:69 +#, c-format +msgid "free: %p (%d bytes) from '%s:%d'\n" +msgstr "" + +#: lib/malloc/trace.c:72 +#, c-format +msgid "free:%p:%d:%s:%d\n" +msgstr "" + +#: lib/malloc/trace.c:107 +msgid "/var/tmp/maltrace/trace." +msgstr "" + +#: lib/malloc/watch.c:50 +msgid "requesting resize" +msgstr "" + +#: lib/malloc/watch.c:52 +msgid "just resized" +msgstr "" + +#: lib/malloc/watch.c:54 +msgid "bug: unknown operation" +msgstr "" + +#: lib/malloc/watch.c:56 +#, c-format +msgid "malloc: watch alert: %p %s " +msgstr "" + +#: lib/malloc/watch.c:58 +#, c-format +msgid "(size %lu) " +msgstr "" + +#: lib/malloc/watch.c:59 +#, c-format +msgid "from '%s:%d'\n" +msgstr "" + +#: lib/malloc/x386-alloca.s:10 +msgid "masm" +msgstr "" + +#: lib/malloc/xmalloc.c:55 +#, c-format +msgid "%s: out of virtual memory\n" +msgstr "" + +#: lib/malloc/xmalloc.c:70 +msgid "xmalloc" +msgstr "" + +#: lib/malloc/xmalloc.c:84 +msgid "xrealloc" +msgstr "" diff --git a/subst.c.orig b/subst.c.orig new file mode 100644 index 00000000..011930b3 --- /dev/null +++ b/subst.c.orig @@ -0,0 +1,7376 @@ +/* subst.c -- The part of the shell that does parameter, command, and + globbing substitutions. */ + +/* ``Have a little faith, there's magic in the night. You ain't a + beauty, but, hey, you're alright.'' */ + +/* Copyright (C) 1987-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. */ + +#include "config.h" + +#include "bashtypes.h" +#include <stdio.h> +#include "chartypes.h" +#include <pwd.h> +#include <signal.h> +#include <errno.h> + +#if defined (HAVE_UNISTD_H) +# include <unistd.h> +#endif + +#include "bashansi.h" +#include "posixstat.h" +#include "bashintl.h" + +#include "shell.h" +#include "flags.h" +#include "jobs.h" +#include "execute_cmd.h" +#include "filecntl.h" +#include "trap.h" +#include "pathexp.h" +#include "mailcheck.h" + +#include "shmbutil.h" + +#include "builtins/getopt.h" +#include "builtins/common.h" + +#include <tilde/tilde.h> +#include <glob/strmatch.h> + +#if !defined (errno) +extern int errno; +#endif /* !errno */ + +/* The size that strings change by. */ +#define DEFAULT_INITIAL_ARRAY_SIZE 112 +#define DEFAULT_ARRAY_SIZE 128 + +/* Variable types. */ +#define VT_VARIABLE 0 +#define VT_POSPARMS 1 +#define VT_ARRAYVAR 2 +#define VT_ARRAYMEMBER 3 + +#define VT_STARSUB 128 /* $* or ${array[*]} -- used to split */ + +/* Flags for quoted_strchr */ +#define ST_BACKSL 0x01 +#define ST_CTLESC 0x02 +#define ST_SQUOTE 0x04 /* unused yet */ +#define ST_DQUOTE 0x08 /* unused yet */ + +/* Flags for the string extraction functions. */ +#define EX_NOALLOC 0x01 /* just skip; don't return substring */ +#define EX_VARNAME 0x02 /* variable name; for string_extract () */ + +/* Flags for the `pflags' argument to param_expand() */ +#define PF_NOCOMSUB 0x01 /* Do not perform command substitution */ + +/* These defs make it easier to use the editor. */ +#define LBRACE '{' +#define RBRACE '}' +#define LPAREN '(' +#define RPAREN ')' + +/* Evaluates to 1 if C is one of the shell's special parameters whose length + can be taken, but is also one of the special expansion characters. */ +#define VALID_SPECIAL_LENGTH_PARAM(c) \ + ((c) == '-' || (c) == '?' || (c) == '#') + +/* Evaluates to 1 if C is one of the shell's special parameters for which an + indirect variable reference may be made. */ +#define VALID_INDIR_PARAM(c) \ + ((c) == '#' || (c) == '?' || (c) == '@' || (c) == '*') + +/* Evaluates to 1 if C is one of the OP characters that follows the parameter + in ${parameter[:]OPword}. */ +#define VALID_PARAM_EXPAND_CHAR(c) (sh_syntaxtab[(unsigned char)c] & CSUBSTOP) + +/* Evaluates to 1 if this is one of the shell's special variables. */ +#define SPECIAL_VAR(name, wi) \ + ((DIGIT (*name) && all_digits (name)) || \ + (name[1] == '\0' && (sh_syntaxtab[(unsigned char)*name] & CSPECVAR)) || \ + (wi && name[2] == '\0' && VALID_INDIR_PARAM (name[1]))) + +/* An expansion function that takes a string and a quoted flag and returns + a WORD_LIST *. Used as the type of the third argument to + expand_string_if_necessary(). */ +typedef WORD_LIST *EXPFUNC __P((char *, int)); + +/* Process ID of the last command executed within command substitution. */ +pid_t last_command_subst_pid = NO_PID; +pid_t current_command_subst_pid = NO_PID; + +/* Variables used to keep track of the characters in IFS. */ +SHELL_VAR *ifs_var; +char *ifs_value; +unsigned char ifs_cmap[UCHAR_MAX + 1]; +unsigned char ifs_firstc; + +/* Extern functions and variables from different files. */ +extern int last_command_exit_value, last_command_exit_signal; +extern int subshell_environment; +extern int subshell_level; +extern int eof_encountered; +extern int return_catch_flag, return_catch_value; +extern pid_t dollar_dollar_pid; +extern int posixly_correct; +extern char *this_command_name; +extern struct fd_bitmap *current_fds_to_close; +extern int wordexp_only; +extern int expanding_redir; + +/* Non-zero means to allow unmatched globbed filenames to expand to + a null file. */ +int allow_null_glob_expansion; + +/* Non-zero means to throw an error when globbing fails to match anything. */ +int fail_glob_expansion; + +#if 0 +/* Variables to keep track of which words in an expanded word list (the + output of expand_word_list_internal) are the result of globbing + expansions. GLOB_ARGV_FLAGS is used by execute_cmd.c. + (CURRENTLY UNUSED). */ +char *glob_argv_flags; +static int glob_argv_flags_size; +#endif + +static WORD_LIST expand_word_error, expand_word_fatal; +static char expand_param_error, expand_param_fatal; + +/* Tell the expansion functions to not longjmp back to top_level on fatal + errors. Enabled when doing completion and prompt string expansion. */ +static int no_longjmp_on_fatal_error = 0; + +/* Set by expand_word_unsplit; used to inhibit splitting and re-joining + $* on $IFS, primarily when doing assignment statements. */ +static int expand_no_split_dollar_star = 0; + +/* Used to hold a list of variable assignments preceding a command. Global + so the SIGCHLD handler in jobs.c can unwind-protect it when it runs a + SIGCHLD trap. */ +WORD_LIST *subst_assign_varlist = (WORD_LIST *)NULL; + +/* A WORD_LIST of words to be expanded by expand_word_list_internal, + without any leading variable assignments. */ +static WORD_LIST *garglist = (WORD_LIST *)NULL; + +static char *quoted_substring __P((char *, int, int)); +static int quoted_strlen __P((char *)); +static char *quoted_strchr __P((char *, int, int)); + +static char *expand_string_if_necessary __P((char *, int, EXPFUNC *)); +static inline char *expand_string_to_string_internal __P((char *, int, EXPFUNC *)); +static WORD_LIST *call_expand_word_internal __P((WORD_DESC *, int, int, int *, int *)); +static WORD_LIST *expand_string_internal __P((char *, int)); +static WORD_LIST *expand_string_leave_quoted __P((char *, int)); +static WORD_LIST *expand_string_for_rhs __P((char *, int, int *, int *)); + +static WORD_LIST *list_quote_escapes __P((WORD_LIST *)); +static char *dequote_escapes __P((char *)); +static char *make_quoted_char __P((int)); +static WORD_LIST *quote_list __P((WORD_LIST *)); +static WORD_LIST *dequote_list __P((WORD_LIST *)); +static char *remove_quoted_escapes __P((char *)); +static char *remove_quoted_nulls __P((char *)); + +static int unquoted_substring __P((char *, char *)); +static int unquoted_member __P((int, char *)); + +static int do_assignment_internal __P((const char *, int)); + +static char *string_extract_verbatim __P((char *, int *, char *)); +static char *string_extract __P((char *, int *, char *, int)); +static char *string_extract_double_quoted __P((char *, int *, int)); +static inline char *string_extract_single_quoted __P((char *, int *)); +static inline int skip_single_quoted __P((char *, size_t, int)); +static int skip_double_quoted __P((char *, size_t, int)); +static char *extract_delimited_string __P((char *, int *, char *, char *, char *, int)); +static char *extract_dollar_brace_string __P((char *, int *, int, int)); + +static char *pos_params __P((char *, int, int, int)); + +static unsigned char *mb_getcharlens __P((char *, int)); + +static char *remove_upattern __P((char *, char *, int)); +#if defined (HANDLE_MULTIBYTE) +# if !defined (HAVE_WCSDUP) +static wchar_t *wcsdup __P((wchar_t *)); +# endif +static wchar_t *remove_wpattern __P((wchar_t *, size_t, wchar_t *, int)); +#endif +static char *remove_pattern __P((char *, char *, int)); + +static int match_pattern_char __P((char *, char *)); +static int match_upattern __P((char *, char *, int, char **, char **)); +#if defined (HANDLE_MULTIBYTE) +static int match_pattern_wchar __P((wchar_t *, wchar_t *)); +static int match_wpattern __P((wchar_t *, char **, size_t, wchar_t *, int, char **, char **)); +#endif +static int match_pattern __P((char *, char *, int, char **, char **)); +static int getpatspec __P((int, char *)); +static char *getpattern __P((char *, int, int)); +static char *variable_remove_pattern __P((char *, char *, int, int)); +static char *list_remove_pattern __P((WORD_LIST *, char *, int, int, int)); +static char *parameter_list_remove_pattern __P((int, char *, int, int)); +#ifdef ARRAY_VARS +static char *array_remove_pattern __P((ARRAY *, char *, int, char *, int)); +#endif +static char *parameter_brace_remove_pattern __P((char *, char *, char *, int, int)); + +static char *process_substitute __P((char *, int)); + +static char *read_comsub __P((int, int)); + +#ifdef ARRAY_VARS +static arrayind_t array_length_reference __P((char *)); +#endif + +static int valid_brace_expansion_word __P((char *, int)); +static int chk_atstar __P((char *, int, int *, int *)); + +static char *parameter_brace_expand_word __P((char *, int, int)); +static char *parameter_brace_expand_indir __P((char *, int, int, int *, int *)); +static char *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *)); +static void parameter_brace_expand_error __P((char *, char *)); + +static int valid_length_expression __P((char *)); +static intmax_t parameter_brace_expand_length __P((char *)); + +static char *skiparith __P((char *, int)); +static int verify_substring_values __P((char *, char *, int, intmax_t *, intmax_t *)); +static int get_var_and_type __P((char *, char *, int, SHELL_VAR **, char **)); +static char *mb_substring __P((char *, int, int)); +static char *parameter_brace_substring __P((char *, char *, char *, int)); + +static char *pos_params_pat_subst __P((char *, char *, char *, int)); + +static char *parameter_brace_patsub __P((char *, char *, char *, int)); + +static char *parameter_brace_expand __P((char *, int *, int, int *, int *)); +static char *param_expand __P((char *, int *, int, int *, int *, int *, int *, int)); + +static WORD_LIST *expand_word_internal __P((WORD_DESC *, int, int, int *, int *)); + +static WORD_LIST *word_list_split __P((WORD_LIST *)); + +static void exp_jump_to_top_level __P((int)); + +static WORD_LIST *separate_out_assignments __P((WORD_LIST *)); +static WORD_LIST *glob_expand_word_list __P((WORD_LIST *, int)); +#ifdef BRACE_EXPANSION +static WORD_LIST *brace_expand_word_list __P((WORD_LIST *, int)); +#endif +static WORD_LIST *shell_expand_word_list __P((WORD_LIST *, int)); +static WORD_LIST *expand_word_list_internal __P((WORD_LIST *, int)); + +/* **************************************************************** */ +/* */ +/* Utility Functions */ +/* */ +/* **************************************************************** */ + +#ifdef INCLUDE_UNUSED +static char * +quoted_substring (string, start, end) + char *string; + int start, end; +{ + register int len, l; + register char *result, *s, *r; + + len = end - start; + + /* Move to string[start], skipping quoted characters. */ + for (s = string, l = 0; *s && l < start; ) + { + if (*s == CTLESC) + { + s++; + continue; + } + l++; + if (*s == 0) + break; + } + + r = result = (char *)xmalloc (2*len + 1); /* save room for quotes */ + + /* Copy LEN characters, including quote characters. */ + s = string + l; + for (l = 0; l < len; s++) + { + if (*s == CTLESC) + *r++ = *s++; + *r++ = *s; + l++; + if (*s == 0) + break; + } + *r = '\0'; + return result; +} +#endif + +#ifdef INCLUDE_UNUSED +/* Return the length of S, skipping over quoted characters */ +static int +quoted_strlen (s) + char *s; +{ + register char *p; + int i; + + i = 0; + for (p = s; *p; p++) + { + if (*p == CTLESC) + { + p++; + if (*p == 0) + return (i + 1); + } + i++; + } + + return i; +} +#endif + +/* Find the first occurrence of character C in string S, obeying shell + quoting rules. If (FLAGS & ST_BACKSL) is non-zero, backslash-escaped + characters are skipped. If (FLAGS & ST_CTLESC) is non-zero, characters + escaped with CTLESC are skipped. */ +static char * +quoted_strchr (s, c, flags) + char *s; + int c, flags; +{ + register char *p; + + for (p = s; *p; p++) + { + if (((flags & ST_BACKSL) && *p == '\\') + || ((flags & ST_CTLESC) && *p == CTLESC)) + { + p++; + if (*p == '\0') + return ((char *)NULL); + continue; + } + else if (*p == c) + return p; + } + return ((char *)NULL); +} + +/* Return 1 if CHARACTER appears in an unquoted portion of + STRING. Return 0 otherwise. CHARACTER must be a single-byte character. */ +static int +unquoted_member (character, string) + int character; + char *string; +{ + size_t slen; + int sindex, c; + DECLARE_MBSTATE; + + slen = strlen (string); + sindex = 0; + while (c = string[sindex]) + { + if (c == character) + return (1); + + switch (c) + { + default: + ADVANCE_CHAR (string, slen, sindex); + break; + + case '\\': + sindex++; + if (string[sindex]) + ADVANCE_CHAR (string, slen, sindex); + break; + + case '\'': + sindex = skip_single_quoted (string, slen, ++sindex); + break; + + case '"': + sindex = skip_double_quoted (string, slen, ++sindex); + break; + } + } + return (0); +} + +/* Return 1 if SUBSTR appears in an unquoted portion of STRING. */ +static int +unquoted_substring (substr, string) + char *substr, *string; +{ + size_t slen; + int sindex, c, sublen; + DECLARE_MBSTATE; + + if (substr == 0 || *substr == '\0') + return (0); + + slen = strlen (string); + sublen = strlen (substr); + for (sindex = 0; c = string[sindex]; ) + { + if (STREQN (string + sindex, substr, sublen)) + return (1); + + switch (c) + { + case '\\': + sindex++; + + if (string[sindex]) + ADVANCE_CHAR (string, slen, sindex); + break; + + case '\'': + sindex = skip_single_quoted (string, slen, ++sindex); + break; + + case '"': + sindex = skip_double_quoted (string, slen, ++sindex); + break; + + default: + ADVANCE_CHAR (string, slen, sindex); + break; + } + } + return (0); +} + +/* Most of the substitutions must be done in parallel. In order + to avoid using tons of unclear goto's, I have some functions + for manipulating malloc'ed strings. They all take INDX, a + pointer to an integer which is the offset into the string + where manipulation is taking place. They also take SIZE, a + pointer to an integer which is the current length of the + character array for this string. */ + +/* Append SOURCE to TARGET at INDEX. SIZE is the current amount + of space allocated to TARGET. SOURCE can be NULL, in which + case nothing happens. Gets rid of SOURCE by freeing it. + Returns TARGET in case the location has changed. */ +INLINE char * +sub_append_string (source, target, indx, size) + char *source, *target; + int *indx, *size; +{ + if (source) + { + int srclen, n; + + srclen = STRLEN (source); + if (srclen >= (int)(*size - *indx)) + { + n = srclen + *indx; + n = (n + DEFAULT_ARRAY_SIZE) - (n % DEFAULT_ARRAY_SIZE); + target = (char *)xrealloc (target, (*size = n)); + } + + FASTCOPY (source, target + *indx, srclen); + *indx += srclen; + target[*indx] = '\0'; + + free (source); + } + return (target); +} + +#if 0 +/* UNUSED */ +/* Append the textual representation of NUMBER to TARGET. + INDX and SIZE are as in SUB_APPEND_STRING. */ +char * +sub_append_number (number, target, indx, size) + intmax_t number; + int *indx, *size; + char *target; +{ + char *temp; + + temp = itos (number); + return (sub_append_string (temp, target, indx, size)); +} +#endif + +/* Extract a substring from STRING, starting at SINDEX and ending with + one of the characters in CHARLIST. Don't make the ending character + part of the string. Leave SINDEX pointing at the ending character. + Understand about backslashes in the string. If (flags & EX_VARNAME) + is non-zero, and array variables have been compiled into the shell, + everything between a `[' and a corresponding `]' is skipped over. + If (flags & EX_NOALLOC) is non-zero, don't return the substring, just + update SINDEX. */ +static char * +string_extract (string, sindex, charlist, flags) + char *string; + int *sindex; + char *charlist; + int flags; +{ + register int c, i; + size_t slen; + char *temp; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + i = *sindex; + while (c = string[i]) + { + if (c == '\\') + { + if (string[i + 1]) + i++; + else + break; + } +#if defined (ARRAY_VARS) + else if ((flags & EX_VARNAME) && c == '[') + { + int ni; + /* If this is an array subscript, skip over it and continue. */ + ni = skipsubscript (string, i); + if (string[ni] == ']') + i = ni; + } +#endif + else if (MEMBER (c, charlist)) + break; + + ADVANCE_CHAR (string, slen, i); + } + + temp = (flags & EX_NOALLOC) ? (char *)NULL : substring (string, *sindex, i); + *sindex = i; + return (temp); +} + +/* Extract the contents of STRING as if it is enclosed in double quotes. + SINDEX, when passed in, is the offset of the character immediately + following the opening double quote; on exit, SINDEX is left pointing after + the closing double quote. If STRIPDQ is non-zero, unquoted double + quotes are stripped and the string is terminated by a null byte. + Backslashes between the embedded double quotes are processed. If STRIPDQ + is zero, an unquoted `"' terminates the string. */ +static char * +string_extract_double_quoted (string, sindex, stripdq) + char *string; + int *sindex, stripdq; +{ + size_t slen; + char *send; + int j, i, t; + unsigned char c; + char *temp, *ret; /* The new string we return. */ + int pass_next, backquote, si; /* State variables for the machine. */ + int dquote; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + send = string + slen; + + pass_next = backquote = dquote = 0; + temp = (char *)xmalloc (1 + slen - *sindex); + + j = 0; + i = *sindex; + while (c = string[i]) + { + /* Process a character that was quoted by a backslash. */ + if (pass_next) + { + /* Posix.2 sez: + + ``The backslash shall retain its special meaning as an escape + character only when followed by one of the characters: + $ ` " \ <newline>''. + + If STRIPDQ is zero, we handle the double quotes here and let + expand_word_internal handle the rest. If STRIPDQ is non-zero, + we have already been through one round of backslash stripping, + and want to strip these backslashes only if DQUOTE is non-zero, + indicating that we are inside an embedded double-quoted string. */ + + /* If we are in an embedded quoted string, then don't strip + backslashes before characters for which the backslash + retains its special meaning, but remove backslashes in + front of other characters. If we are not in an + embedded quoted string, don't strip backslashes at all. + This mess is necessary because the string was already + surrounded by double quotes (and sh has some really weird + quoting rules). + The returned string will be run through expansion as if + it were double-quoted. */ + if ((stripdq == 0 && c != '"') || + (stripdq && ((dquote && (sh_syntaxtab[c] & CBSDQUOTE)) || dquote == 0))) + temp[j++] = '\\'; + pass_next = 0; + +add_one_character: + COPY_CHAR_I (temp, j, string, send, i); + continue; + } + + /* A backslash protects the next character. The code just above + handles preserving the backslash in front of any character but + a double quote. */ + if (c == '\\') + { + pass_next++; + i++; + continue; + } + + /* Inside backquotes, ``the portion of the quoted string from the + initial backquote and the characters up to the next backquote + that is not preceded by a backslash, having escape characters + removed, defines that command''. */ + if (backquote) + { + if (c == '`') + backquote = 0; + temp[j++] = c; + i++; + continue; + } + + if (c == '`') + { + temp[j++] = c; + backquote++; + i++; + continue; + } + + /* Pass everything between `$(' and the matching `)' or a quoted + ${ ... } pair through according to the Posix.2 specification. */ + if (c == '$' && ((string[i + 1] == LPAREN) || (string[i + 1] == LBRACE))) + { + int free_ret = 1; + + si = i + 2; + if (string[i + 1] == LPAREN) + ret = extract_delimited_string (string, &si, "$(", "(", ")", 0); /*)*/ + else + ret = extract_dollar_brace_string (string, &si, 1, 0); + + temp[j++] = '$'; + temp[j++] = string[i + 1]; + + /* Just paranoia; ret will not be 0 unless no_longjmp_on_fatal_error + is set. */ + if (ret == 0 && no_longjmp_on_fatal_error) + { + free_ret = 0; + ret = string + i + 2; + } + + for (t = 0; ret[t]; t++, j++) + temp[j] = ret[t]; + temp[j++] = string[si]; + + i = si + 1; + if (free_ret) + free (ret); + continue; + } + + /* Add any character but a double quote to the quoted string we're + accumulating. */ + if (c != '"') + goto add_one_character; + + /* c == '"' */ + if (stripdq) + { + dquote ^= 1; + i++; + continue; + } + + break; + } + temp[j] = '\0'; + + /* Point to after the closing quote. */ + if (c) + i++; + *sindex = i; + + return (temp); +} + +/* This should really be another option to string_extract_double_quoted. */ +static int +skip_double_quoted (string, slen, sind) + char *string; + size_t slen; + int sind; +{ + int c, i; + char *ret; + int pass_next, backquote, si; + DECLARE_MBSTATE; + + pass_next = backquote = 0; + i = sind; + while (c = string[i]) + { + if (pass_next) + { + pass_next = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '\\') + { + pass_next++; + i++; + continue; + } + else if (backquote) + { + if (c == '`') + backquote = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '`') + { + backquote++; + i++; + continue; + } + else if (c == '$' && ((string[i + 1] == LPAREN) || (string[i + 1] == LBRACE))) + { + si = i + 2; + if (string[i + 1] == LPAREN) + ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); + else + ret = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC); + + i = si + 1; + continue; + } + else if (c != '"') + { + ADVANCE_CHAR (string, slen, i); + continue; + } + else + break; + } + + if (c) + i++; + + return (i); +} + +/* Extract the contents of STRING as if it is enclosed in single quotes. + SINDEX, when passed in, is the offset of the character immediately + following the opening single quote; on exit, SINDEX is left pointing after + the closing single quote. */ +static inline char * +string_extract_single_quoted (string, sindex) + char *string; + int *sindex; +{ + register int i; + size_t slen; + char *t; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + i = *sindex; + while (string[i] && string[i] != '\'') + ADVANCE_CHAR (string, slen, i); + + t = substring (string, *sindex, i); + + if (string[i]) + i++; + *sindex = i; + + return (t); +} + +static inline int +skip_single_quoted (string, slen, sind) + char *string; + size_t slen; + int sind; +{ + register int c; + DECLARE_MBSTATE; + + c = sind; + while (string[c] && string[c] != '\'') + ADVANCE_CHAR (string, slen, c); + + if (string[c]) + c++; + return c; +} + +/* Just like string_extract, but doesn't hack backslashes or any of + that other stuff. Obeys CTLESC quoting. Used to do splitting on $IFS. */ +static char * +string_extract_verbatim (string, sindex, charlist) + char *string; + int *sindex; + char *charlist; +{ + register int i = *sindex; + int c; + char *temp; + + if (charlist[0] == '\'' && charlist[1] == '\0') + { + temp = string_extract_single_quoted (string, sindex); + --*sindex; /* leave *sindex at separator character */ + return temp; + } + + for (i = *sindex; c = string[i]; i++) + { + if (c == CTLESC) + { + i++; + continue; + } + + if (MEMBER (c, charlist)) + break; + } + + temp = substring (string, *sindex, i); + *sindex = i; + + return (temp); +} + +/* Extract the $( construct in STRING, and return a new string. + Start extracting at (SINDEX) as if we had just seen "$(". + Make (SINDEX) get the position of the matching ")". */ +char * +extract_command_subst (string, sindex) + char *string; + int *sindex; +{ + return (extract_delimited_string (string, sindex, "$(", "(", ")", 0)); +} + +/* Extract the $[ construct in STRING, and return a new string. (]) + Start extracting at (SINDEX) as if we had just seen "$[". + Make (SINDEX) get the position of the matching "]". */ +char * +extract_arithmetic_subst (string, sindex) + char *string; + int *sindex; +{ + return (extract_delimited_string (string, sindex, "$[", "[", "]", 0)); /*]*/ +} + +#if defined (PROCESS_SUBSTITUTION) +/* Extract the <( or >( construct in STRING, and return a new string. + Start extracting at (SINDEX) as if we had just seen "<(". + Make (SINDEX) get the position of the matching ")". */ /*))*/ +char * +extract_process_subst (string, starter, sindex) + char *string; + char *starter; + int *sindex; +{ + return (extract_delimited_string (string, sindex, starter, "(", ")", 0)); +} +#endif /* PROCESS_SUBSTITUTION */ + +#if defined (ARRAY_VARS) +char * +extract_array_assignment_list (string, sindex) + char *string; + int *sindex; +{ + return (extract_delimited_string (string, sindex, "(", (char *)NULL, ")", 0)); +} +#endif + +/* Extract and create a new string from the contents of STRING, a + character string delimited with OPENER and CLOSER. SINDEX is + the address of an int describing the current offset in STRING; + it should point to just after the first OPENER found. On exit, + SINDEX gets the position of the last character of the matching CLOSER. + If OPENER is more than a single character, ALT_OPENER, if non-null, + contains a character string that can also match CLOSER and thus + needs to be skipped. */ +static char * +extract_delimited_string (string, sindex, opener, alt_opener, closer, flags) + char *string; + int *sindex; + char *opener, *alt_opener, *closer; + int flags; +{ + int i, c, si; + size_t slen; + char *t, *result; + int pass_character, nesting_level; + int len_closer, len_opener, len_alt_opener; + DECLARE_MBSTATE; + + slen = strlen (string + *sindex) + *sindex; + len_opener = STRLEN (opener); + len_alt_opener = STRLEN (alt_opener); + len_closer = STRLEN (closer); + + pass_character = 0; + + nesting_level = 1; + i = *sindex; + + while (nesting_level) + { + c = string[i]; + + if (c == 0) + break; + + if (pass_character) /* previous char was backslash */ + { + pass_character = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + + if (c == CTLESC || c == '\\') + { + pass_character++; + i++; + continue; + } + + /* Process a nested OPENER. */ + if (STREQN (string + i, opener, len_opener)) + { + si = i + len_opener; + t = extract_delimited_string (string, &si, opener, alt_opener, closer, flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* Process a nested ALT_OPENER */ + if (len_alt_opener && STREQN (string + i, alt_opener, len_alt_opener)) + { + si = i + len_alt_opener; + t = extract_delimited_string (string, &si, alt_opener, alt_opener, closer, flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* If the current substring terminates the delimited string, decrement + the nesting level. */ + if (STREQN (string + i, closer, len_closer)) + { + i += len_closer - 1; /* move to last byte of the closer */ + nesting_level--; + if (nesting_level == 0) + break; + } + + /* Pass old-style command substitution through verbatim. */ + if (c == '`') + { + si = i + 1; + t = string_extract (string, &si, "`", flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* Pass single-quoted and double-quoted strings through verbatim. */ + if (c == '\'' || c == '"') + { + si = i + 1; + i = (c == '\'') ? skip_single_quoted (string, slen, si) + : skip_double_quoted (string, slen, si); + continue; + } + + /* move past this character, which was not special. */ + ADVANCE_CHAR (string, slen, i); + } + + if (c == 0 && nesting_level) + { + if (no_longjmp_on_fatal_error == 0) + { + report_error (_("bad substitution: no closing `%s' in %s"), closer, string); + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level (DISCARD); + } + else + { + *sindex = i; + return (char *)NULL; + } + } + + si = i - *sindex - len_closer + 1; + if (flags & EX_NOALLOC) + result = (char *)NULL; + else + { + result = (char *)xmalloc (1 + si); + strncpy (result, string + *sindex, si); + result[si] = '\0'; + } + *sindex = i; + + return (result); +} + +/* Extract a parameter expansion expression within ${ and } from STRING. + Obey the Posix.2 rules for finding the ending `}': count braces while + skipping over enclosed quoted strings and command substitutions. + SINDEX is the address of an int describing the current offset in STRING; + it should point to just after the first `{' found. On exit, SINDEX + gets the position of the matching `}'. QUOTED is non-zero if this + occurs inside double quotes. */ +/* XXX -- this is very similar to extract_delimited_string -- XXX */ +static char * +extract_dollar_brace_string (string, sindex, quoted, flags) + char *string; + int *sindex, quoted, flags; +{ + register int i, c; + size_t slen; + int pass_character, nesting_level, si; + char *result, *t; + DECLARE_MBSTATE; + + pass_character = 0; + nesting_level = 1; + slen = strlen (string + *sindex) + *sindex; + + i = *sindex; + while (c = string[i]) + { + if (pass_character) + { + pass_character = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + + /* CTLESCs and backslashes quote the next character. */ + if (c == CTLESC || c == '\\') + { + pass_character++; + i++; + continue; + } + + if (string[i] == '$' && string[i+1] == LBRACE) + { + nesting_level++; + i += 2; + continue; + } + + if (c == RBRACE) + { + nesting_level--; + if (nesting_level == 0) + break; + i++; + continue; + } + + /* Pass the contents of old-style command substitutions through + verbatim. */ + if (c == '`') + { + si = i + 1; + t = string_extract (string, &si, "`", flags|EX_NOALLOC); + i = si + 1; + continue; + } + + /* Pass the contents of new-style command substitutions and + arithmetic substitutions through verbatim. */ + if (string[i] == '$' && string[i+1] == LPAREN) + { + si = i + 2; + t = extract_delimited_string (string, &si, "$(", "(", ")", flags|EX_NOALLOC); /*)*/ + i = si + 1; + continue; + } + + /* Pass the contents of single-quoted and double-quoted strings + through verbatim. */ + if (c == '\'' || c == '"') + { + si = i + 1; + i = (c == '\'') ? skip_single_quoted (string, slen, si) + : skip_double_quoted (string, slen, si); + /* skip_XXX_quoted leaves index one past close quote */ + continue; + } + + /* move past this character, which was not special. */ + ADVANCE_CHAR (string, slen, i); + } + + if (c == 0 && nesting_level) + { + if (no_longjmp_on_fatal_error == 0) + { /* { */ + report_error ("bad substitution: no closing `%s' in %s", "}", string); + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level (DISCARD); + } + else + { + *sindex = i; + return ((char *)NULL); + } + } + + result = (flags & EX_NOALLOC) ? (char *)NULL : substring (string, *sindex, i); + *sindex = i; + + return (result); +} + +/* Remove backslashes which are quoting backquotes from STRING. Modifies + STRING, and returns a pointer to it. */ +char * +de_backslash (string) + char *string; +{ + register size_t slen; + register int i, j, prev_i; + DECLARE_MBSTATE; + + slen = strlen (string); + i = j = 0; + + /* Loop copying string[i] to string[j], i >= j. */ + while (i < slen) + { + if (string[i] == '\\' && (string[i + 1] == '`' || string[i + 1] == '\\' || + string[i + 1] == '$')) + i++; + prev_i = i; + ADVANCE_CHAR (string, slen, i); + if (j < prev_i) + do string[j++] = string[prev_i++]; while (prev_i < i); + else + j = i; + } + string[j] = '\0'; + + return (string); +} + +#if 0 +/*UNUSED*/ +/* Replace instances of \! in a string with !. */ +void +unquote_bang (string) + char *string; +{ + register int i, j; + register char *temp; + + temp = (char *)xmalloc (1 + strlen (string)); + + for (i = 0, j = 0; (temp[j] = string[i]); i++, j++) + { + if (string[i] == '\\' && string[i + 1] == '!') + { + temp[j] = '!'; + i++; + } + } + strcpy (string, temp); + free (temp); +} +#endif + +#if defined (READLINE) +/* Return 1 if the portion of STRING ending at EINDEX is quoted (there is + an unclosed quoted string), or if the character at EINDEX is quoted + by a backslash. NO_LONGJMP_ON_FATAL_ERROR is used to flag that the various + single and double-quoted string parsing functions should not return an + error if there are unclosed quotes or braces. The characters that this + recognizes need to be the same as the contents of + rl_completer_quote_characters. */ + +#define CQ_RETURN(x) do { no_longjmp_on_fatal_error = 0; return (x); } while (0) + +int +char_is_quoted (string, eindex) + char *string; + int eindex; +{ + int i, pass_next, c; + size_t slen; + DECLARE_MBSTATE; + + slen = strlen (string); + no_longjmp_on_fatal_error = 1; + i = pass_next = 0; + while (i <= eindex) + { + c = string[i]; + + if (pass_next) + { + pass_next = 0; + if (i >= eindex) /* XXX was if (i >= eindex - 1) */ + CQ_RETURN(1); + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '\\') + { + pass_next = 1; + i++; + continue; + } + else if (c == '\'' || c == '"') + { + i = (c == '\'') ? skip_single_quoted (string, slen, ++i) + : skip_double_quoted (string, slen, ++i); + if (i > eindex) + CQ_RETURN(1); + /* no increment, the skip_xxx functions go one past end */ + } + else + ADVANCE_CHAR (string, slen, i); + } + + CQ_RETURN(0); +} + +int +unclosed_pair (string, eindex, openstr) + char *string; + int eindex; + char *openstr; +{ + int i, pass_next, openc, olen; + size_t slen; + DECLARE_MBSTATE; + + slen = strlen (string); + olen = strlen (openstr); + i = pass_next = openc = 0; + while (i <= eindex) + { + if (pass_next) + { + pass_next = 0; + if (i >= eindex) /* XXX was if (i >= eindex - 1) */ + return 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (string[i] == '\\') + { + pass_next = 1; + i++; + continue; + } + else if (STREQN (string + i, openstr, olen)) + { + openc = 1 - openc; + i += olen; + } + else if (string[i] == '\'' || string[i] == '"') + { + i = (string[i] == '\'') ? skip_single_quoted (string, slen, i) + : skip_double_quoted (string, slen, i); + if (i > eindex) + return 0; + } + else + ADVANCE_CHAR (string, slen, i); + } + return (openc); +} + +/* Skip characters in STRING until we find a character in DELIMS, and return + the index of that character. START is the index into string at which we + begin. This is similar in spirit to strpbrk, but it returns an index into + STRING and takes a starting index. This little piece of code knows quite + a lot of shell syntax. It's very similar to skip_double_quoted and other + functions of that ilk. */ +int +skip_to_delim (string, start, delims) + char *string; + int start; + char *delims; +{ + int i, pass_next, backq, si, c; + size_t slen; + char *temp; + DECLARE_MBSTATE; + + slen = strlen (string + start) + start; + no_longjmp_on_fatal_error = 1; + i = start; + pass_next = backq = 0; + while (c = string[i]) + { + if (pass_next) + { + pass_next = 0; + if (c == 0) + CQ_RETURN(i); + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '\\') + { + pass_next = 1; + i++; + continue; + } + else if (backq) + { + if (c == '`') + backq = 0; + ADVANCE_CHAR (string, slen, i); + continue; + } + else if (c == '`') + { + backq = 1; + i++; + continue; + } + else if (c == '\'' || c == '"') + { + i = (c == '\'') ? skip_single_quoted (string, slen, ++i) + : skip_double_quoted (string, slen, ++i); + /* no increment, the skip functions increment past the closing quote. */ + } + else if (c == '$' && (string[i+1] == LPAREN || string[i+1] == LBRACE)) + { + si = i + 2; + if (string[si] == '\0') + CQ_RETURN(si); + + if (string[i+1] == LPAREN) + temp = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); /* ) */ + else + temp = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC); + i = si; + if (string[i] == '\0') /* don't increment i past EOS in loop */ + break; + i++; + continue; + } + else if (member (c, delims)) + break; + else + ADVANCE_CHAR (string, slen, i); + } + + CQ_RETURN(i); +} + +/* Split STRING (length SLEN) at DELIMS, and return a WORD_LIST with the + individual words. If DELIMS is NULL, the current value of $IFS is used + to split the string, and the function follows the shell field splitting + rules. SENTINEL is an index to look for. NWP, if non-NULL, + gets the number of words in the returned list. CWP, if non-NULL, gets + the index of the word containing SENTINEL. Non-whitespace chars in + DELIMS delimit separate fields. */ +WORD_LIST * +split_at_delims (string, slen, delims, sentinel, nwp, cwp) + char *string; + int slen; + char *delims; + int sentinel; + int *nwp, *cwp; +{ + int ts, te, i, nw, cw, ifs_split; + char *token, *d, *d2; + WORD_LIST *ret, *tl; + + if (string == 0 || *string == '\0') + { + if (nwp) + *nwp = 0; + if (cwp) + *cwp = 0; + return ((WORD_LIST *)NULL); + } + + d = (delims == 0) ? ifs_value : delims; + ifs_split = delims == 0; + + /* Make d2 the non-whitespace characters in delims */ + d2 = 0; + if (delims) + { + d2 = (char *)xmalloc (strlen (delims) + 1); + for (i = ts = 0; delims[i]; i++) + { + if (whitespace(delims[i]) == 0) + d2[ts++] = delims[i]; + } + d2[ts] = '\0'; + } + + ret = (WORD_LIST *)NULL; + + /* Remove sequences of whitspace characters at the start of the string, as + long as those characters are delimiters. */ + for (i = 0; member (string[i], d) && spctabnl (string[i]); i++) + ; + if (string[i] == '\0') + return (ret); + + ts = i; + nw = 0; + cw = -1; + while (1) + { + te = skip_to_delim (string, ts, d); + + /* If we have a non-whitespace delimiter character, use it to make a + separate field. This is just about what $IFS splitting does and + is closer to the behavior of the shell parser. */ + if (ts == te && d2 && member (string[ts], d2)) + { + te = ts + 1; + /* If we're using IFS splitting, the non-whitespace delimiter char + and any additional IFS whitespace delimits a field. */ + if (ifs_split) + while (member (string[te], d) && spctabnl (string[te])) + te++; + else + while (member (string[te], d2)) + te++; + } + + token = substring (string, ts, te); + + ret = add_string_to_list (token, ret); + free (token); + nw++; + + if (sentinel >= ts && sentinel <= te) + cw = nw; + + /* If the cursor is at whitespace just before word start, set the + sentinel word to the current word. */ + if (cwp && cw == -1 && sentinel == ts-1) + cw = nw; + + /* If the cursor is at whitespace between two words, make a new, empty + word, add it before (well, after, since the list is in reverse order) + the word we just added, and set the current word to that one. */ + if (cwp && cw == -1 && sentinel < ts) + { + tl = make_word_list (make_word (""), ret->next); + ret->next = tl; + cw = nw; + nw++; + } + + if (string[te] == 0) + break; + + i = te; + while (member (string[i], d) && (ifs_split || spctabnl(string[i]))) + i++; + + if (string[i]) + ts = i; + else + break; + } + + /* Special case for SENTINEL at the end of STRING. If we haven't found + the word containing SENTINEL yet, and the index we're looking for is at + the end of STRING, add an additional null argument and set the current + word pointer to that. */ + if (cwp && cw == -1 && sentinel >= slen) + { + if (whitespace (string[sentinel - 1])) + { + token = ""; + ret = add_string_to_list (token, ret); + nw++; + } + cw = nw; + } + + if (nwp) + *nwp = nw; + if (cwp) + *cwp = cw; + + return (REVERSE_LIST (ret, WORD_LIST *)); +} +#endif /* READLINE */ + +#if 0 +/* UNUSED */ +/* Extract the name of the variable to bind to from the assignment string. */ +char * +assignment_name (string) + char *string; +{ + int offset; + char *temp; + + offset = assignment (string, 0); + if (offset == 0) + return (char *)NULL; + temp = substring (string, 0, offset); + return (temp); +} +#endif + +/* **************************************************************** */ +/* */ +/* Functions to convert strings to WORD_LISTs and vice versa */ +/* */ +/* **************************************************************** */ + +/* Return a single string of all the words in LIST. SEP is the separator + to put between individual elements of LIST in the output string. */ +char * +string_list_internal (list, sep) + WORD_LIST *list; + char *sep; +{ + register WORD_LIST *t; + char *result, *r; + int word_len, sep_len, result_size; + + if (list == 0) + return ((char *)NULL); + + /* Short-circuit quickly if we don't need to separate anything. */ + if (list->next == 0) + return (savestring (list->word->word)); + + /* This is nearly always called with either sep[0] == 0 or sep[1] == 0. */ + sep_len = STRLEN (sep); + result_size = 0; + + for (t = list; t; t = t->next) + { + if (t != list) + result_size += sep_len; + result_size += strlen (t->word->word); + } + + r = result = (char *)xmalloc (result_size + 1); + + for (t = list; t; t = t->next) + { + if (t != list && sep_len) + { + if (sep_len > 1) + { + FASTCOPY (sep, r, sep_len); + r += sep_len; + } + else + *r++ = sep[0]; + } + + word_len = strlen (t->word->word); + FASTCOPY (t->word->word, r, word_len); + r += word_len; + } + + *r = '\0'; + return (result); +} + +/* Return a single string of all the words present in LIST, separating + each word with a space. */ +char * +string_list (list) + WORD_LIST *list; +{ + return (string_list_internal (list, " ")); +} + +/* Return a single string of all the words present in LIST, obeying the + quoting rules for "$*", to wit: (P1003.2, draft 11, 3.5.2) "If the + expansion [of $*] appears within a double quoted string, it expands + to a single field with the value of each parameter separated by the + first character of the IFS variable, or by a <space> if IFS is unset." */ +char * +string_list_dollar_star (list) + WORD_LIST *list; +{ + char sep[2]; + + sep[0] = ifs_firstc; + sep[1] = '\0'; + + return (string_list_internal (list, sep)); +} + +/* Turn $@ into a string. If (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + is non-zero, the $@ appears within double quotes, and we should quote + the list before converting it into a string. If IFS is unset, and the + word is not quoted, we just need to quote CTLESC and CTLNUL characters + in the words in the list, because the default value of $IFS is + <space><tab><newline>, IFS characters in the words in the list should + also be split. If IFS is null, and the word is not quoted, we need + to quote the words in the list to preserve the positional parameters + exactly. */ +char * +string_list_dollar_at (list, quoted) + WORD_LIST *list; + int quoted; +{ + char *ifs, sep[2]; + WORD_LIST *tlist; + + /* XXX this could just be ifs = ifs_value; */ + ifs = ifs_var ? value_cell (ifs_var) : (char *)0; + + sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs; + sep[1] = '\0'; + + tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0)) + ? quote_list (list) + : list_quote_escapes (list); + return (string_list_internal (tlist, sep)); +} + +/* Return the list of words present in STRING. Separate the string into + words at any of the characters found in SEPARATORS. If QUOTED is + non-zero then word in the list will have its quoted flag set, otherwise + the quoted flag is left as make_word () deemed fit. + + This obeys the P1003.2 word splitting semantics. If `separators' is + exactly <space><tab><newline>, then the splitting algorithm is that of + the Bourne shell, which treats any sequence of characters from `separators' + as a delimiter. If IFS is unset, which results in `separators' being set + to "", no splitting occurs. If separators has some other value, the + following rules are applied (`IFS white space' means zero or more + occurrences of <space>, <tab>, or <newline>, as long as those characters + are in `separators'): + + 1) IFS white space is ignored at the start and the end of the + string. + 2) Each occurrence of a character in `separators' that is not + IFS white space, along with any adjacent occurrences of + IFS white space delimits a field. + 3) Any nonzero-length sequence of IFS white space delimits a field. + */ + +/* BEWARE! list_string strips null arguments. Don't call it twice and + expect to have "" preserved! */ + +/* This performs word splitting and quoted null character removal on + STRING. */ +#define issep(c) \ + (((separators)[0]) ? ((separators)[1] ? isifs(c) \ + : (c) == (separators)[0]) \ + : 0) + +WORD_LIST * +list_string (string, separators, quoted) + register char *string, *separators; + int quoted; +{ + WORD_LIST *result; + WORD_DESC *t; + char *current_word, *s; + int sindex, sh_style_split, whitesep; + + if (!string || !*string) + return ((WORD_LIST *)NULL); + + sh_style_split = separators && separators[0] == ' ' && + separators[1] == '\t' && + separators[2] == '\n' && + separators[3] == '\0'; + + /* Remove sequences of whitespace at the beginning of STRING, as + long as those characters appear in IFS. Do not do this if + STRING is quoted or if there are no separator characters. */ + if (!quoted || !separators || !*separators) + { + for (s = string; *s && spctabnl (*s) && issep (*s); s++); + + if (!*s) + return ((WORD_LIST *)NULL); + + string = s; + } + + /* OK, now STRING points to a word that does not begin with white space. + The splitting algorithm is: + extract a word, stopping at a separator + skip sequences of spc, tab, or nl as long as they are separators + This obeys the field splitting rules in Posix.2. */ + for (result = (WORD_LIST *)NULL, sindex = 0; string[sindex]; ) + { + current_word = string_extract_verbatim (string, &sindex, separators); + if (current_word == 0) + break; + + /* If we have a quoted empty string, add a quoted null argument. We + want to preserve the quoted null character iff this is a quoted + empty string; otherwise the quoted null characters are removed + below. */ + if (QUOTED_NULL (current_word)) + { + t = make_bare_word (""); + t->flags |= W_QUOTED; + free (t->word); + t->word = make_quoted_char ('\0'); + result = make_word_list (t, result); + } + else if (current_word[0] != '\0') + { + /* If we have something, then add it regardless. However, + perform quoted null character removal on the current word. */ + remove_quoted_nulls (current_word); + result = add_string_to_list (current_word, result); + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + result->word->flags |= W_QUOTED; + } + + /* If we're not doing sequences of separators in the traditional + Bourne shell style, then add a quoted null argument. */ + else if (!sh_style_split && !spctabnl (string[sindex])) + { + t = make_bare_word (""); + t->flags |= W_QUOTED; + free (t->word); + t->word = make_quoted_char ('\0'); + result = make_word_list (t, result); + } + + free (current_word); + + /* Note whether or not the separator is IFS whitespace, used later. */ + whitesep = string[sindex] && spctabnl (string[sindex]); + + /* Move past the current separator character. */ + if (string[sindex]) + sindex++; + + /* Now skip sequences of space, tab, or newline characters if they are + in the list of separators. */ + while (string[sindex] && spctabnl (string[sindex]) && issep (string[sindex])) + sindex++; + + /* If the first separator was IFS whitespace and the current character + is a non-whitespace IFS character, it should be part of the current + field delimiter, not a separate delimiter that would result in an + empty field. Look at POSIX.2, 3.6.5, (3)(b). */ + if (string[sindex] && whitesep && issep (string[sindex]) && !spctabnl (string[sindex])) + sindex++; + } + return (REVERSE_LIST (result, WORD_LIST *)); +} + +/* Parse a single word from STRING, using SEPARATORS to separate fields. + ENDPTR is set to the first character after the word. This is used by + the `read' builtin. This is never called with SEPARATORS != $IFS; + it should be simplified. + + XXX - this function is very similar to list_string; they should be + combined - XXX */ +char * +get_word_from_string (stringp, separators, endptr) + char **stringp, *separators, **endptr; +{ + register char *s; + char *current_word; + int sindex, sh_style_split, whitesep; + + if (!stringp || !*stringp || !**stringp) + return ((char *)NULL); + + s = *stringp; + + sh_style_split = separators && separators[0] == ' ' && + separators[1] == '\t' && + separators[2] == '\n' && + separators[3] == '\0'; + + /* Remove sequences of whitespace at the beginning of STRING, as + long as those characters appear in IFS. */ + if (sh_style_split || !separators || !*separators) + { + for (; *s && spctabnl (*s) && isifs (*s); s++); + + /* If the string is nothing but whitespace, update it and return. */ + if (!*s) + { + *stringp = s; + if (endptr) + *endptr = s; + return ((char *)NULL); + } + } + + /* OK, S points to a word that does not begin with white space. + Now extract a word, stopping at a separator, save a pointer to + the first character after the word, then skip sequences of spc, + tab, or nl as long as they are separators. + + This obeys the field splitting rules in Posix.2. */ + sindex = 0; + current_word = string_extract_verbatim (s, &sindex, separators); + + /* Set ENDPTR to the first character after the end of the word. */ + if (endptr) + *endptr = s + sindex; + + /* Note whether or not the separator is IFS whitespace, used later. */ + whitesep = s[sindex] && spctabnl (s[sindex]); + + /* Move past the current separator character. */ + if (s[sindex]) + sindex++; + + /* Now skip sequences of space, tab, or newline characters if they are + in the list of separators. */ + while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) + sindex++; + + /* If the first separator was IFS whitespace and the current character is + a non-whitespace IFS character, it should be part of the current field + delimiter, not a separate delimiter that would result in an empty field. + Look at POSIX.2, 3.6.5, (3)(b). */ + if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex])) + sindex++; + + /* Update STRING to point to the next field. */ + *stringp = s + sindex; + return (current_word); +} + +/* Remove IFS white space at the end of STRING. Start at the end + of the string and walk backwards until the beginning of the string + or we find a character that's not IFS white space and not CTLESC. + Only let CTLESC escape a white space character if SAW_ESCAPE is + non-zero. */ +char * +strip_trailing_ifs_whitespace (string, separators, saw_escape) + char *string, *separators; + int saw_escape; +{ + char *s; + + s = string + STRLEN (string) - 1; + while (s > string && ((spctabnl (*s) && isifs (*s)) || + (saw_escape && *s == CTLESC && spctabnl (s[1])))) + s--; + *++s = '\0'; + return string; +} + +#if 0 +/* UNUSED */ +/* Split STRING into words at whitespace. Obeys shell-style quoting with + backslashes, single and double quotes. */ +WORD_LIST * +list_string_with_quotes (string) + char *string; +{ + WORD_LIST *list; + char *token, *s; + size_t s_len; + int c, i, tokstart, len; + + for (s = string; s && *s && spctabnl (*s); s++) + ; + if (s == 0 || *s == 0) + return ((WORD_LIST *)NULL); + + s_len = strlen (s); + tokstart = i = 0; + list = (WORD_LIST *)NULL; + while (1) + { + c = s[i]; + if (c == '\\') + { + i++; + if (s[i]) + i++; + } + else if (c == '\'') + i = skip_single_quoted (s, s_len, ++i); + else if (c == '"') + i = skip_double_quoted (s, s_len, ++i); + else if (c == 0 || spctabnl (c)) + { + /* We have found the end of a token. Make a word out of it and + add it to the word list. */ + token = substring (s, tokstart, i); + list = add_string_to_list (token, list); + free (token); + while (spctabnl (s[i])) + i++; + if (s[i]) + tokstart = i; + else + break; + } + else + i++; /* normal character */ + } + return (REVERSE_LIST (list, WORD_LIST *)); +} +#endif + +/********************************************************/ +/* */ +/* Functions to perform assignment statements */ +/* */ +/********************************************************/ + +/* Given STRING, an assignment string, get the value of the right side + of the `=', and bind it to the left side. If EXPAND is true, then + perform parameter expansion, command substitution, and arithmetic + expansion on the right-hand side. Perform tilde expansion in any + case. Do not perform word splitting on the result of expansion. */ +static int +do_assignment_internal (string, expand) + const char *string; + int expand; +{ + int offset; + char *name, *value; + SHELL_VAR *entry; +#if defined (ARRAY_VARS) + char *t; + int ni; +#endif + int assign_list = 0; + + offset = assignment (string, 0); + name = savestring (string); + value = (char *)NULL; + + if (name[offset] == '=') + { + char *temp; + + name[offset] = 0; + temp = name + offset + 1; + +#if defined (ARRAY_VARS) + if (expand && temp[0] == LPAREN && xstrchr (temp, RPAREN)) + { + assign_list = ni = 1; + value = extract_delimited_string (temp, &ni, "(", (char *)NULL, ")", 0); + } + else +#endif + + /* Perform tilde expansion. */ + if (expand && temp[0]) + { + temp = (xstrchr (temp, '~') && unquoted_member ('~', temp)) + ? bash_tilde_expand (temp, 1) + : savestring (temp); + + value = expand_string_if_necessary (temp, 0, expand_string_unsplit); + free (temp); + } + else + value = savestring (temp); + } + + if (value == 0) + { + value = (char *)xmalloc (1); + value[0] = '\0'; + } + + if (echo_command_at_execute) + xtrace_print_assignment (name, value, assign_list, 1); + +#define ASSIGN_RETURN(r) do { FREE (value); free (name); return (r); } while (0) + +#if defined (ARRAY_VARS) + if (t = xstrchr (name, '[')) /*]*/ + { + if (assign_list) + { + report_error (_("%s: cannot assign list to array member"), name); + ASSIGN_RETURN (0); + } + entry = assign_array_element (name, value); + if (entry == 0) + ASSIGN_RETURN (0); + } + else if (assign_list) + entry = assign_array_from_string (name, value); + else +#endif /* ARRAY_VARS */ + entry = bind_variable (name, value); + + stupidly_hack_special_variables (name); + + if (entry) + VUNSETATTR (entry, att_invisible); + + /* Return 1 if the assignment seems to have been performed correctly. */ + ASSIGN_RETURN (entry ? ((readonly_p (entry) == 0) && noassign_p (entry) == 0) : 0); +} + +/* Perform the assignment statement in STRING, and expand the + right side by doing command and parameter expansion. */ +int +do_assignment (string) + const char *string; +{ + return do_assignment_internal (string, 1); +} + +/* Given STRING, an assignment string, get the value of the right side + of the `=', and bind it to the left side. Do not do command and + parameter substitution on the right hand side. */ +int +do_assignment_no_expand (string) + const char *string; +{ + return do_assignment_internal (string, 0); +} + +/*************************************************** + * * + * Functions to manage the positional parameters * + * * + ***************************************************/ + +/* Return the word list that corresponds to `$*'. */ +WORD_LIST * +list_rest_of_args () +{ + register WORD_LIST *list, *args; + int i; + + /* Break out of the loop as soon as one of the dollar variables is null. */ + for (i = 1, list = (WORD_LIST *)NULL; i < 10 && dollar_vars[i]; i++) + list = make_word_list (make_bare_word (dollar_vars[i]), list); + + for (args = rest_of_args; args; args = args->next) + list = make_word_list (make_bare_word (args->word->word), list); + + return (REVERSE_LIST (list, WORD_LIST *)); +} + +int +number_of_args () +{ + register WORD_LIST *list; + int n; + + for (n = 0; n < 9 && dollar_vars[n+1]; n++) + ; + for (list = rest_of_args; list; list = list->next) + n++; + return n; +} + +/* Return the value of a positional parameter. This handles values > 10. */ +char * +get_dollar_var_value (ind) + intmax_t ind; +{ + char *temp; + WORD_LIST *p; + + if (ind < 10) + temp = dollar_vars[ind] ? savestring (dollar_vars[ind]) : (char *)NULL; + else /* We want something like ${11} */ + { + ind -= 10; + for (p = rest_of_args; p && ind--; p = p->next) + ; + temp = p ? savestring (p->word->word) : (char *)NULL; + } + return (temp); +} + +/* Make a single large string out of the dollar digit variables, + and the rest_of_args. If DOLLAR_STAR is 1, then obey the special + case of "$*" with respect to IFS. */ +char * +string_rest_of_args (dollar_star) + int dollar_star; +{ + register WORD_LIST *list; + char *string; + + list = list_rest_of_args (); + string = dollar_star ? string_list_dollar_star (list) : string_list (list); + dispose_words (list); + return (string); +} + +/* Return a string containing the positional parameters from START to + END, inclusive. If STRING[0] == '*', we obey the rules for $*, + which only makes a difference if QUOTED is non-zero. If QUOTED includes + Q_HERE_DOCUMENT or Q_DOUBLE_QUOTES, this returns a quoted list, otherwise + no quoting chars are added. */ +static char * +pos_params (string, start, end, quoted) + char *string; + int start, end, quoted; +{ + WORD_LIST *save, *params, *h, *t; + char *ret; + int i; + + /* see if we can short-circuit. if start == end, we want 0 parameters. */ + if (start == end) + return ((char *)NULL); + + save = params = list_rest_of_args (); + if (save == 0) + return ((char *)NULL); + + for (i = 1; params && i < start; i++) + params = params->next; + if (params == 0) + return ((char *)NULL); + for (h = t = params; params && i < end; i++) + { + t = params; + params = params->next; + } + + t->next = (WORD_LIST *)NULL; + if (string[0] == '*') +#if 0 + ret = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (quote_list (h)) : string_list (h); +#else + { + if (quoted & Q_DOUBLE_QUOTES) + ret = string_list_dollar_star (quote_list (h)); + else if (quoted & Q_HERE_DOCUMENT) + ret = string_list (quote_list (h)); + else + ret = string_list (h); + } +#endif + else + ret = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (h) : h); + if (t != params) + t->next = params; + + dispose_words (save); + return (ret); +} + +/******************************************************************/ +/* */ +/* Functions to expand strings to strings or WORD_LISTs */ +/* */ +/******************************************************************/ + +#if defined (PROCESS_SUBSTITUTION) +#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC) +#else +#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC) +#endif + +/* If there are any characters in STRING that require full expansion, + then call FUNC to expand STRING; otherwise just perform quote + removal if necessary. This returns a new string. */ +static char * +expand_string_if_necessary (string, quoted, func) + char *string; + int quoted; + EXPFUNC *func; +{ + WORD_LIST *list; + size_t slen; + int i, saw_quote; + char *ret; + DECLARE_MBSTATE; + + slen = strlen (string); + i = saw_quote = 0; + while (string[i]) + { + if (EXP_CHAR (string[i])) + break; + else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"') + saw_quote = 1; + ADVANCE_CHAR (string, slen, i); + } + + if (string[i]) + { + list = (*func) (string, quoted); + if (list) + { + ret = string_list (list); + dispose_words (list); + } + else + ret = (char *)NULL; + } + else if (saw_quote && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0)) + ret = string_quote_removal (string, quoted); + else + ret = savestring (string); + + return ret; +} + +static inline char * +expand_string_to_string_internal (string, quoted, func) + char *string; + int quoted; + EXPFUNC *func; +{ + WORD_LIST *list; + char *ret; + + if (string == 0 || *string == '\0') + return ((char *)NULL); + + list = (*func) (string, quoted); + if (list) + { + ret = string_list (list); + dispose_words (list); + } + else + ret = (char *)NULL; + + return (ret); +} + +char * +expand_string_to_string (string, quoted) + char *string; + int quoted; +{ + return (expand_string_to_string_internal (string, quoted, expand_string)); +} + +char * +expand_string_unsplit_to_string (string, quoted) + char *string; + int quoted; +{ + return (expand_string_to_string_internal (string, quoted, expand_string_unsplit)); +} + +#if defined (COND_COMMAND) +/* Just remove backslashes in STRING. Returns a new string. */ +char * +remove_backslashes (string) + char *string; +{ + char *r, *ret, *s; + + r = ret = (char *)xmalloc (strlen (string) + 1); + for (s = string; s && *s; ) + { + if (*s == '\\') + s++; + if (*s == 0) + break; + *r++ = *s++; + } + *r = '\0'; + return ret; +} + +/* This needs better error handling. */ +/* Expand W for use as an argument to a unary or binary operator in a + [[...]] expression. If SPECIAL is nonzero, this is the rhs argument + to the != or == operator, and should be treated as a pattern. In + this case, we quote the string specially for the globbing code. The + caller is responsible for removing the backslashes if the unquoted + words is needed later. */ +char * +cond_expand_word (w, special) + WORD_DESC *w; + int special; +{ + char *r, *p; + WORD_LIST *l; + + if (w->word == 0 || w->word[0] == '\0') + return ((char *)NULL); + + if (xstrchr (w->word, '~') && unquoted_member ('~', w->word)) + { + p = bash_tilde_expand (w->word, 0); + free (w->word); + w->word = p; + } + + l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); + if (l) + { + if (special == 0) + { + dequote_list (l); + r = string_list (l); + } + else + { + p = string_list (l); + r = quote_string_for_globbing (p, QGLOB_CVTNULL); + free (p); + } + dispose_words (l); + } + else + r = (char *)NULL; + + return r; +} +#endif + +/* Call expand_word_internal to expand W and handle error returns. + A convenience function for functions that don't want to handle + any errors or free any memory before aborting. */ +static WORD_LIST * +call_expand_word_internal (w, q, i, c, e) + WORD_DESC *w; + int q, i, *c, *e; +{ + WORD_LIST *result; + + result = expand_word_internal (w, q, i, c, e); + if (result == &expand_word_error || result == &expand_word_fatal) + { + /* By convention, each time this error is returned, w->word has + already been freed (it sometimes may not be in the fatal case, + but that doesn't result in a memory leak because we're going + to exit in most cases). */ + w->word = (char *)NULL; + last_command_exit_value = EXECUTION_FAILURE; + exp_jump_to_top_level ((result == &expand_word_error) ? DISCARD : FORCE_EOF); + /* NOTREACHED */ + } + else + return (result); +} + +/* Perform parameter expansion, command substitution, and arithmetic + expansion on STRING, as if it were a word. Leave the result quoted. */ +static WORD_LIST * +expand_string_internal (string, quoted) + char *string; + int quoted; +{ + WORD_DESC td; + WORD_LIST *tresult; + + if (string == 0 || *string == 0) + return ((WORD_LIST *)NULL); + + td.flags = 0; + td.word = savestring (string); + + tresult = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + + FREE (td.word); + return (tresult); +} + +/* Expand STRING by performing parameter expansion, command substitution, + and arithmetic expansion. Dequote the resulting WORD_LIST before + returning it, but do not perform word splitting. The call to + remove_quoted_nulls () is in here because word splitting normally + takes care of quote removal. */ +WORD_LIST * +expand_string_unsplit (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *value; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + expand_no_split_dollar_star = 1; + value = expand_string_internal (string, quoted); + expand_no_split_dollar_star = 0; + + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + + +/* Expand one of the PS? prompt strings. This is a sort of combination of + expand_string_unsplit and expand_string_internal, but returns the + passed string when an error occurs. Might want to trap other calls + to jump_to_top_level here so we don't endlessly loop. */ +WORD_LIST * +expand_prompt_string (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *value; + WORD_DESC td; + + if (string == 0 || *string == 0) + return ((WORD_LIST *)NULL); + + td.flags = 0; + td.word = savestring (string); + + no_longjmp_on_fatal_error = 1; + value = expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL); + no_longjmp_on_fatal_error = 0; + + if (value == &expand_word_error || value == &expand_word_fatal) + { + value = make_word_list (make_bare_word (string), (WORD_LIST *)NULL); + return value; + } + FREE (td.word); + if (value) + { + if (value->word) + remove_quoted_nulls (value->word->word); + dequote_list (value); + } + return (value); +} + +/* Expand STRING just as if you were expanding a word, but do not dequote + the resultant WORD_LIST. This is called only from within this file, + and is used to correctly preserve quoted characters when expanding + things like ${1+"$@"}. This does parameter expansion, command + substitution, arithmetic expansion, and word splitting. */ +static WORD_LIST * +expand_string_leave_quoted (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *tlist; + WORD_LIST *tresult; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + tlist = expand_string_internal (string, quoted); + + if (tlist) + { + tresult = word_list_split (tlist); + dispose_words (tlist); + return (tresult); + } + return ((WORD_LIST *)NULL); +} + +/* This does not perform word splitting or dequote the WORD_LIST + it returns. */ +static WORD_LIST * +expand_string_for_rhs (string, quoted, dollar_at_p, has_dollar_at) + char *string; + int quoted, *dollar_at_p, *has_dollar_at; +{ + WORD_DESC td; + WORD_LIST *tresult; + + if (string == 0 || *string == '\0') + return (WORD_LIST *)NULL; + + td.flags = 0; + td.word = string; + tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, has_dollar_at); + return (tresult); +} + +/* Expand STRING just as if you were expanding a word. This also returns + a list of words. Note that filename globbing is *NOT* done for word + or string expansion, just when the shell is expanding a command. This + does parameter expansion, command substitution, arithmetic expansion, + and word splitting. Dequote the resultant WORD_LIST before returning. */ +WORD_LIST * +expand_string (string, quoted) + char *string; + int quoted; +{ + WORD_LIST *result; + + if (string == 0 || *string == '\0') + return ((WORD_LIST *)NULL); + + result = expand_string_leave_quoted (string, quoted); + return (result ? dequote_list (result) : result); +} + +/*************************************************** + * * + * Functions to handle quoting chars * + * * + ***************************************************/ + +/* Conventions: + + A string with s[0] == CTLNUL && s[1] == 0 is a quoted null string. + The parser passes CTLNUL as CTLESC CTLNUL. */ + +/* Quote escape characters in string s, but no other characters. This is + used to protect CTLESC and CTLNUL in variable values from the rest of + the word expansion process after the variable is expanded. */ +char * +quote_escapes (string) + char *string; +{ + register char *s, *t; + size_t slen; + char *result, *send; + DECLARE_MBSTATE; + + slen = strlen (string); + send = string + slen; + + t = result = (char *)xmalloc ((slen * 2) + 1); + s = string; + + while (*s) + { + if (*s == CTLESC || *s == CTLNUL) + *t++ = CTLESC; + COPY_CHAR_P (t, s, send); + } + *t = '\0'; + return (result); +} + +static WORD_LIST * +list_quote_escapes (list) + WORD_LIST *list; +{ + register WORD_LIST *w; + char *t; + + for (w = list; w; w = w->next) + { + t = w->word->word; + w->word->word = quote_escapes (t); + free (t); + } + return list; +} + +/* Inverse of quote_escapes; remove CTLESC protecting CTLESC or CTLNUL. + + The parser passes us CTLESC as CTLESC CTLESC and CTLNUL as CTLESC CTLNUL. + This is necessary to make unquoted CTLESC and CTLNUL characters in the + data stream pass through properly. + + We need to remove doubled CTLESC characters inside quoted strings before + quoting the entire string, so we do not double the number of CTLESC + characters. + + Also used by parts of the pattern substitution code. */ +static char * +dequote_escapes (string) + char *string; +{ + register char *s, *t; + size_t slen; + char *result, *send; + DECLARE_MBSTATE; + + if (string == 0) + return string; + + slen = strlen (string); + send = string + slen; + + t = result = (char *)xmalloc (slen + 1); + s = string; + + if (strchr (string, CTLESC) == 0) + return (strcpy (result, s)); + + while (*s) + { + if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL)) + { + s++; + if (*s == '\0') + break; + } + COPY_CHAR_P (t, s, send); + } + *t = '\0'; + return result; +} + +/* Return a new string with the quoted representation of character C. */ +static char * +make_quoted_char (c) + int c; +{ + char *temp; + + temp = (char *)xmalloc (3); + if (c == 0) + { + temp[0] = CTLNUL; + temp[1] = '\0'; + } + else + { + temp[0] = CTLESC; + temp[1] = c; + temp[2] = '\0'; + } + return (temp); +} + +/* Quote STRING. Return a new string. */ +char * +quote_string (string) + char *string; +{ + register char *t; + size_t slen; + char *result, *send; + + if (*string == 0) + { + result = (char *)xmalloc (2); + result[0] = CTLNUL; + result[1] = '\0'; + } + else + { + DECLARE_MBSTATE; + + slen = strlen (string); + send = string + slen; + + result = (char *)xmalloc ((slen * 2) + 1); + + for (t = result; string < send; ) + { + *t++ = CTLESC; + COPY_CHAR_P (t, string, send); + } + *t = '\0'; + } + return (result); +} + +/* De-quoted quoted characters in STRING. */ +char * +dequote_string (string) + char *string; +{ + register char *s, *t; + size_t slen; + char *result, *send; + DECLARE_MBSTATE; + + slen = strlen (string); + + t = result = (char *)xmalloc (slen + 1); + + if (QUOTED_NULL (string)) + { + result[0] = '\0'; + return (result); + } + + /* If no character in the string can be quoted, don't bother examining + each character. Just return a copy of the string passed to us. */ + if (strchr (string, CTLESC) == NULL) + return (strcpy (result, string)); + + send = string + slen; + s = string; + while (*s) + { + if (*s == CTLESC) + { + s++; + if (*s == '\0') + break; + } + COPY_CHAR_P (t, s, send); + } + + *t = '\0'; + return (result); +} + +/* Quote the entire WORD_LIST list. */ +static WORD_LIST * +quote_list (list) + WORD_LIST *list; +{ + register WORD_LIST *w; + char *t; + + for (w = list; w; w = w->next) + { + t = w->word->word; + w->word->word = quote_string (t); + free (t); + w->word->flags |= W_QUOTED; + } + return list; +} + +static WORD_LIST * +dequote_list (list) + WORD_LIST *list; +{ + register char *s; + register WORD_LIST *tlist; + + for (tlist = list; tlist; tlist = tlist->next) + { + s = dequote_string (tlist->word->word); + free (tlist->word->word); + tlist->word->word = s; + } + return list; +} + +/* Remove CTLESC protecting a CTLESC or CTLNUL in place. Return the passed + string. */ +static char * +remove_quoted_escapes (string) + char *string; +{ + char *t; + + if (string) + { + t = dequote_escapes (string); + strcpy (string, t); + free (t); + } + + return (string); +} + +/* Perform quoted null character removal on STRING. We don't allow any + quoted null characters in the middle or at the ends of strings because + of how expand_word_internal works. remove_quoted_nulls () turns + STRING into an empty string iff it only consists of a quoted null, + and removes all unquoted CTLNUL characters. */ +static char * +remove_quoted_nulls (string) + char *string; +{ + register size_t slen; + register int i, j, prev_i; + DECLARE_MBSTATE; + + if (strchr (string, CTLNUL) == 0) /* XXX */ + return string; /* XXX */ + + slen = strlen (string); + i = j = 0; + + while (i < slen) + { + if (string[i] == CTLESC) + { + /* Old code had j++, but we cannot assume that i == j at this + point -- what if a CTLNUL has already been removed from the + string? We don't want to drop the CTLESC or recopy characters + that we've already copied down. */ + i++; string[j++] = CTLESC; + if (i == slen) + break; + } + else if (string[i] == CTLNUL) + i++; + + prev_i = i; + ADVANCE_CHAR (string, slen, i); + if (j < prev_i) + { + do string[j++] = string[prev_i++]; while (prev_i < i); + } + else + j = i; + } + string[j] = '\0'; + + return (string); +} + +/* Perform quoted null character removal on each element of LIST. + This modifies LIST. */ +void +word_list_remove_quoted_nulls (list) + WORD_LIST *list; +{ + register WORD_LIST *t; + + for (t = list; t; t = t->next) + remove_quoted_nulls (t->word->word); +} + +/* **************************************************************** */ +/* */ +/* Functions for Matching and Removing Patterns */ +/* */ +/* **************************************************************** */ + +#if defined (HANDLE_MULTIBYTE) +#if 0 /* Currently unused */ +static unsigned char * +mb_getcharlens (string, len) + char *string; + int len; +{ + int i, offset, last; + unsigned char *ret; + char *p; + DECLARE_MBSTATE; + + i = offset = 0; + last = 0; + ret = (unsigned char *)xmalloc (len); + memset (ret, 0, len); + while (string[last]) + { + ADVANCE_CHAR (string, len, offset); + ret[last] = offset - last; + last = offset; + } + return ret; +} +#endif +#endif + +/* Remove the portion of PARAM matched by PATTERN according to OP, where OP + can have one of 4 values: + RP_LONG_LEFT remove longest matching portion at start of PARAM + RP_SHORT_LEFT remove shortest matching portion at start of PARAM + RP_LONG_RIGHT remove longest matching portion at end of PARAM + RP_SHORT_RIGHT remove shortest matching portion at end of PARAM +*/ + +#define RP_LONG_LEFT 1 +#define RP_SHORT_LEFT 2 +#define RP_LONG_RIGHT 3 +#define RP_SHORT_RIGHT 4 + +static char * +remove_upattern (param, pattern, op) + char *param, *pattern; + int op; +{ + register int len; + register char *end; + register char *p, *ret, c; + + len = STRLEN (param); + end = param + len; + + switch (op) + { + case RP_LONG_LEFT: /* remove longest match at start */ + for (p = end; p >= param; p--) + { + c = *p; *p = '\0'; + if (strmatch (pattern, param, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + *p = c; + return (savestring (p)); + } + *p = c; + + } + break; + + case RP_SHORT_LEFT: /* remove shortest match at start */ + for (p = param; p <= end; p++) + { + c = *p; *p = '\0'; + if (strmatch (pattern, param, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + *p = c; + return (savestring (p)); + } + *p = c; + } + break; + + case RP_LONG_RIGHT: /* remove longest match at end */ + for (p = param; p <= end; p++) + { + if (strmatch (pattern, p, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + c = *p; *p = '\0'; + ret = savestring (param); + *p = c; + return (ret); + } + } + break; + + case RP_SHORT_RIGHT: /* remove shortest match at end */ + for (p = end; p >= param; p--) + { + if (strmatch (pattern, p, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + c = *p; *p = '\0'; + ret = savestring (param); + *p = c; + return (ret); + } + } + break; + } + + return (savestring (param)); /* no match, return original string */ +} + +#if defined (HANDLE_MULTIBYTE) + +#if !defined (HAVE_WCSDUP) +static wchar_t * +wcsdup (ws) + wchar_t *ws; +{ + wchar_t *ret; + size_t len; + + len = wcslen (ws); + ret = xmalloc ((len + 1) * sizeof (wchar_t)); + if (ret == 0) + return ret; + return (wcscpy (ret, ws)); +} +#endif /* !HAVE_WCSDUP */ + +static wchar_t * +remove_wpattern (wparam, wstrlen, wpattern, op) + wchar_t *wparam; + size_t wstrlen; + wchar_t *wpattern; + int op; +{ + wchar_t wc; + int n, n1; + wchar_t *ret; + + switch (op) + { + case RP_LONG_LEFT: /* remove longest match at start */ + for (n = wstrlen; n >= 0; n--) + { + wc = wparam[n]; wparam[n] = L'\0'; + if (wcsmatch (wpattern, wparam, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wparam[n] = wc; + return (wcsdup (wparam + n)); + } + wparam[n] = wc; + } + break; + + case RP_SHORT_LEFT: /* remove shortest match at start */ + for (n = 0; n <= wstrlen; n++) + { + wc = wparam[n]; wparam[n] = L'\0'; + if (wcsmatch (wpattern, wparam, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wparam[n] = wc; + return (wcsdup (wparam + n)); + } + wparam[n] = wc; + } + break; + + case RP_LONG_RIGHT: /* remove longest match at end */ + for (n = 0; n <= wstrlen; n++) + { + if (wcsmatch (wpattern, wparam + n, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wc = wparam[n]; wparam[n] = L'\0'; + ret = wcsdup (wparam); + wparam[n] = wc; + return (ret); + } + } + break; + + case RP_SHORT_RIGHT: /* remove shortest match at end */ + for (n = wstrlen; n >= 0; n--) + { + if (wcsmatch (wpattern, wparam + n, FNMATCH_EXTFLAG) != FNM_NOMATCH) + { + wc = wparam[n]; wparam[n] = L'\0'; + ret = wcsdup (wparam); + wparam[n] = wc; + return (ret); + } + } + break; + } + + return (wcsdup (wparam)); /* no match, return original string */ +} +#endif /* HANDLE_MULTIBYTE */ + +static char * +remove_pattern (param, pattern, op) + char *param, *pattern; + int op; +{ + if (param == NULL) + return (param); + if (*param == '\0' || pattern == NULL || *pattern == '\0') /* minor optimization */ + return (savestring (param)); + +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1) + { + wchar_t *ret, *oret; + size_t n; + wchar_t *wparam, *wpattern; + mbstate_t ps; + char *xret; + + n = xdupmbstowcs (&wpattern, NULL, pattern); + if (n == (size_t)-1) + return (remove_upattern (param, pattern, op)); + n = xdupmbstowcs (&wparam, NULL, param); + if (n == (size_t)-1) + { + free (wpattern); + return (remove_upattern (param, pattern, op)); + } + oret = ret = remove_wpattern (wparam, n, wpattern, op); + + free (wparam); + free (wpattern); + + n = strlen (param); + xret = xmalloc (n + 1); + memset (&ps, '\0', sizeof (mbstate_t)); + n = wcsrtombs (xret, (const wchar_t **)&ret, n, &ps); + xret[n] = '\0'; /* just to make sure */ + free (oret); + return xret; + } + else +#endif + return (remove_upattern (param, pattern, op)); +} + +/* Return 1 of the first character of STRING could match the first + character of pattern PAT. Used to avoid n2 calls to strmatch(). */ +static int +match_pattern_char (pat, string) + char *pat, *string; +{ + char c; + + if (*string == 0) + return (0); + + switch (c = *pat++) + { + default: + return (*string == c); + case '\\': + return (*string == *pat); + case '?': + return (*pat == LPAREN ? 1 : (*string != '\0')); + case '*': + return (1); + case '+': + case '!': + case '@': + return (*pat == LPAREN ? 1 : (*string == c)); + case '[': + return (*string != '\0'); + } +} + +/* Match PAT anywhere in STRING and return the match boundaries. + This returns 1 in case of a successful match, 0 otherwise. SP + and EP are pointers into the string where the match begins and + ends, respectively. MTYPE controls what kind of match is attempted. + MATCH_BEG and MATCH_END anchor the match at the beginning and end + of the string, respectively. The longest match is returned. */ +static int +match_upattern (string, pat, mtype, sp, ep) + char *string, *pat; + int mtype; + char **sp, **ep; +{ + int c, len; + register char *p, *p1; + char *end; + + len = STRLEN (string); + end = string + len; + + switch (mtype) + { + case MATCH_ANY: + for (p = string; p <= end; p++) + { + if (match_pattern_char (pat, p)) + { + for (p1 = end; p1 >= p; p1--) + { + c = *p1; *p1 = '\0'; + if (strmatch (pat, p, FNMATCH_EXTFLAG) == 0) + { + *p1 = c; + *sp = p; + *ep = p1; + return 1; + } + *p1 = c; + } + } + } + + return (0); + + case MATCH_BEG: + if (match_pattern_char (pat, string) == 0) + return (0); + + for (p = end; p >= string; p--) + { + c = *p; *p = '\0'; + if (strmatch (pat, string, FNMATCH_EXTFLAG) == 0) + { + *p = c; + *sp = string; + *ep = p; + return 1; + } + *p = c; + } + + return (0); + + case MATCH_END: + for (p = string; p <= end; p++) + { + if (strmatch (pat, p, FNMATCH_EXTFLAG) == 0) + { + *sp = p; + *ep = end; + return 1; + } + + } + + return (0); + } + + return (0); +} + +#if defined (HANDLE_MULTIBYTE) +/* Return 1 of the first character of WSTRING could match the first + character of pattern WPAT. Wide character version. */ +static int +match_pattern_wchar (wpat, wstring) + wchar_t *wpat, *wstring; +{ + wchar_t wc; + + if (*wstring == 0) + return (0); + + switch (wc = *wpat++) + { + default: + return (*wstring == wc); + case L'\\': + return (*wstring == *wpat); + case L'?': + return (*wpat == LPAREN ? 1 : (*wstring != L'\0')); + case L'*': + return (1); + case L'+': + case L'!': + case L'@': + return (*wpat == LPAREN ? 1 : (*wstring == wc)); + case L'[': + return (*wstring != L'\0'); + } +} + +/* Match WPAT anywhere in WSTRING and return the match boundaries. + This returns 1 in case of a successful match, 0 otherwise. Wide + character version. */ +static int +match_wpattern (wstring, indices, wstrlen, wpat, mtype, sp, ep) + wchar_t *wstring; + char **indices; + size_t wstrlen; + wchar_t *wpat; + int mtype; + char **sp, **ep; +{ + wchar_t wc; + int len; +#if 0 + size_t n, n1; /* Apple's gcc seems to miscompile this badly */ +#else + int n, n1; +#endif + + switch (mtype) + { + case MATCH_ANY: + for (n = 0; n <= wstrlen; n++) + { + if (match_pattern_wchar (wpat, wstring + n)) + { + for (n1 = wstrlen; n1 >= n; n1--) + { + wc = wstring[n1]; wstring[n1] = L'\0'; + if (wcsmatch (wpat, wstring + n, FNMATCH_EXTFLAG) == 0) + { + wstring[n1] = wc; + *sp = indices[n]; + *ep = indices[n1]; + return 1; + } + wstring[n1] = wc; + } + } + } + + return (0); + + case MATCH_BEG: + if (match_pattern_wchar (wpat, wstring) == 0) + return (0); + + for (n = wstrlen; n >= 0; n--) + { + wc = wstring[n]; wstring[n] = L'\0'; + if (wcsmatch (wpat, wstring, FNMATCH_EXTFLAG) == 0) + { + wstring[n] = wc; + *sp = indices[0]; + *ep = indices[n]; + return 1; + } + wstring[n] = wc; + } + + return (0); + + case MATCH_END: + for (n = 0; n <= wstrlen; n++) + { + if (wcsmatch (wpat, wstring + n, FNMATCH_EXTFLAG) == 0) + { + *sp = indices[n]; + *ep = indices[wstrlen]; + return 1; + } + } + + return (0); + } + + return (0); +} +#endif /* HANDLE_MULTIBYTE */ + +static int +match_pattern (string, pat, mtype, sp, ep) + char *string, *pat; + int mtype; + char **sp, **ep; +{ +#if defined (HANDLE_MULTIBYTE) + int ret; + size_t n; + wchar_t *wstring, *wpat; + char **indices; +#endif + + if (string == 0 || *string == 0 || pat == 0 || *pat == 0) + return (0); + +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1) + { + n = xdupmbstowcs (&wpat, NULL, pat); + if (n == (size_t)-1) + return (match_upattern (string, pat, mtype, sp, ep)); + n = xdupmbstowcs (&wstring, &indices, string); + if (n == (size_t)-1) + { + free (wpat); + return (match_upattern (string, pat, mtype, sp, ep)); + } + ret = match_wpattern (wstring, indices, n, wpat, mtype, sp, ep); + + free (wpat); + free (wstring); + free (indices); + + return (ret); + } + else +#endif + return (match_upattern (string, pat, mtype, sp, ep)); +} + +static int +getpatspec (c, value) + int c; + char *value; +{ + if (c == '#') + return ((*value == '#') ? RP_LONG_LEFT : RP_SHORT_LEFT); + else /* c == '%' */ + return ((*value == '%') ? RP_LONG_RIGHT : RP_SHORT_RIGHT); +} + +/* Posix.2 says that the WORD should be run through tilde expansion, + parameter expansion, command substitution and arithmetic expansion. + This leaves the result quoted, so quote_string_for_globbing () has + to be called to fix it up for strmatch (). If QUOTED is non-zero, + it means that the entire expression was enclosed in double quotes. + This means that quoting characters in the pattern do not make any + special pattern characters quoted. For example, the `*' in the + following retains its special meaning: "${foo#'*'}". */ +static char * +getpattern (value, quoted, expandpat) + char *value; + int quoted, expandpat; +{ + char *pat, *tword; + WORD_LIST *l; + int i; + + tword = xstrchr (value, '~') ? bash_tilde_expand (value, 0) : savestring (value); + + /* There is a problem here: how to handle single or double quotes in the + pattern string when the whole expression is between double quotes? + POSIX.2 says that enclosing double quotes do not cause the pattern to + be quoted, but does that leave us a problem with @ and array[@] and their + expansions inside a pattern? */ +#if 0 + if (expandpat && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *tword) + { + i = 0; + pat = string_extract_double_quoted (tword, &i, 1); + free (tword); + tword = pat; + } +#endif + + /* expand_string_for_rhs () leaves WORD quoted and does not perform + word splitting. */ + l = *tword ? expand_string_for_rhs (tword, + (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? Q_PATQUOTE : quoted, + (int *)NULL, (int *)NULL) + : (WORD_LIST *)0; + free (tword); + pat = string_list (l); + dispose_words (l); + if (pat) + { + tword = quote_string_for_globbing (pat, QGLOB_CVTNULL); + free (pat); + pat = tword; + } + return (pat); +} + +#if 0 +/* Handle removing a pattern from a string as a result of ${name%[%]value} + or ${name#[#]value}. */ +static char * +variable_remove_pattern (value, pattern, patspec, quoted) + char *value, *pattern; + int patspec, quoted; +{ + char *tword; + + tword = remove_pattern (value, pattern, patspec); + + return (tword); +} +#endif + +static char * +list_remove_pattern (list, pattern, patspec, itype, quoted) + WORD_LIST *list; + char *pattern; + int patspec, itype, quoted; +{ + WORD_LIST *new, *l; + WORD_DESC *w; + char *tword; + + for (new = (WORD_LIST *)NULL, l = list; l; l = l->next) + { + tword = remove_pattern (l->word->word, pattern, patspec); + w = make_bare_word (tword); + FREE (tword); + new = make_word_list (w, new); + } + + l = REVERSE_LIST (new, WORD_LIST *); + if (itype == '*') +#if 0 + tword = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (l) : string_list (l); +#else + tword = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (l) : string_list (l); +#endif + else + tword = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (l) : l); + + dispose_words (l); + return (tword); +} + +static char * +parameter_list_remove_pattern (itype, pattern, patspec, quoted) + int itype; + char *pattern; + int patspec, quoted; +{ + char *ret; + WORD_LIST *list; + + list = list_rest_of_args (); + if (list == 0) + return ((char *)NULL); + ret = list_remove_pattern (list, pattern, patspec, itype, quoted); + dispose_words (list); + return (ret); +} + +#if defined (ARRAY_VARS) +static char * +array_remove_pattern (a, pattern, patspec, varname, quoted) + ARRAY *a; + char *pattern; + int patspec; + char *varname; /* so we can figure out how it's indexed */ + int quoted; +{ + int itype; + char *ret; + WORD_LIST *list; + SHELL_VAR *v; + + /* compute itype from varname here */ + v = array_variable_part (varname, &ret, 0); + itype = ret[0]; + + list = array_to_word_list (a); + if (list == 0) + return ((char *)NULL); + ret = list_remove_pattern (list, pattern, patspec, itype, quoted); + dispose_words (list); + + return ret; +} +#endif /* ARRAY_VARS */ + +static char * +parameter_brace_remove_pattern (varname, value, patstr, rtype, quoted) + char *varname, *value, *patstr; + int rtype, quoted; +{ + int vtype, patspec, starsub; + char *temp1, *val, *pattern; + SHELL_VAR *v; + + if (value == 0) + return ((char *)NULL); + + this_command_name = varname; + + vtype = get_var_and_type (varname, value, quoted, &v, &val); + if (vtype == -1) + return ((char *)NULL); + + starsub = vtype & VT_STARSUB; + vtype &= ~VT_STARSUB; + + patspec = getpatspec (rtype, patstr); + if (patspec == RP_LONG_LEFT || patspec == RP_LONG_RIGHT) + patstr++; + + pattern = getpattern (patstr, quoted, 1); + + temp1 = (char *)NULL; /* shut up gcc */ + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: + temp1 = remove_pattern (val, pattern, patspec); + if (vtype == VT_VARIABLE) + FREE (val); + if (temp1) + { + val = quote_escapes (temp1); + free (temp1); + temp1 = val; + } + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + temp1 = array_remove_pattern (array_cell (v), pattern, patspec, varname, quoted); + if (temp1 && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0)) + { + val = quote_escapes (temp1); + free (temp1); + temp1 = val; + } + break; +#endif + case VT_POSPARMS: + temp1 = parameter_list_remove_pattern (varname[0], pattern, patspec, quoted); + if (temp1 && ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) == 0)) + { + val = quote_escapes (temp1); + free (temp1); + temp1 = val; + } + break; + } + + FREE (pattern); + return temp1; +} + +/******************************************* + * * + * Functions to expand WORD_DESCs * + * * + *******************************************/ + +/* Expand WORD, performing word splitting on the result. This does + parameter expansion, command substitution, arithmetic expansion, + word splitting, and quote removal. */ + +WORD_LIST * +expand_word (word, quoted) + WORD_DESC *word; + int quoted; +{ + WORD_LIST *result, *tresult; + + tresult = call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL); + result = word_list_split (tresult); + dispose_words (tresult); + return (result ? dequote_list (result) : result); +} + +/* Expand WORD, but do not perform word splitting on the result. This + does parameter expansion, command substitution, arithmetic expansion, + and quote removal. */ +WORD_LIST * +expand_word_unsplit (word, quoted) + WORD_DESC *word; + int quoted; +{ + WORD_LIST *result; + + expand_no_split_dollar_star = 1; + result = call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL); + expand_no_split_dollar_star = 0; + + return (result ? dequote_list (result) : result); +} + +/* Perform shell expansions on WORD, but do not perform word splitting or + quote removal on the result. */ +WORD_LIST * +expand_word_leave_quoted (word, quoted) + WORD_DESC *word; + int quoted; +{ + return (call_expand_word_internal (word, quoted, 0, (int *)NULL, (int *)NULL)); +} + +#if defined (PROCESS_SUBSTITUTION) + +/*****************************************************************/ +/* */ +/* Hacking Process Substitution */ +/* */ +/*****************************************************************/ + +#if !defined (HAVE_DEV_FD) +/* Named pipes must be removed explicitly with `unlink'. This keeps a list + of FIFOs the shell has open. unlink_fifo_list will walk the list and + unlink all of them. add_fifo_list adds the name of an open FIFO to the + list. NFIFO is a count of the number of FIFOs in the list. */ +#define FIFO_INCR 20 + +struct temp_fifo { + char *file; + pid_t proc; +}; + +static struct temp_fifo *fifo_list = (struct temp_fifo *)NULL; +static int nfifo; +static int fifo_list_size; + +static void +add_fifo_list (pathname) + char *pathname; +{ + if (nfifo >= fifo_list_size - 1) + { + fifo_list_size += FIFO_INCR; + fifo_list = (struct temp_fifo *)xrealloc (fifo_list, + fifo_list_size * sizeof (struct temp_fifo)); + } + + fifo_list[nfifo].file = savestring (pathname); + nfifo++; +} + +void +unlink_fifo_list () +{ + int saved, i, j; + + if (nfifo == 0) + return; + + for (i = saved = 0; i < nfifo; i++) + { + if ((fifo_list[i].proc == -1) || (kill(fifo_list[i].proc, 0) == -1)) + { + unlink (fifo_list[i].file); + free (fifo_list[i].file); + fifo_list[i].file = (char *)NULL; + fifo_list[i].proc = -1; + } + else + saved++; + } + + /* If we didn't remove some of the FIFOs, compact the list. */ + if (saved) + { + for (i = j = 0; i < nfifo; i++) + if (fifo_list[i].file) + { + fifo_list[j].file = fifo_list[i].file; + fifo_list[j].proc = fifo_list[i].proc; + j++; + } + nfifo = j; + } + else + nfifo = 0; +} + +static char * +make_named_pipe () +{ + char *tname; + + tname = sh_mktmpname ("sh-np", MT_USERANDOM); + if (mkfifo (tname, 0600) < 0) + { + free (tname); + return ((char *)NULL); + } + + add_fifo_list (tname); + return (tname); +} + +#else /* HAVE_DEV_FD */ + +/* DEV_FD_LIST is a bitmap of file descriptors attached to pipes the shell + has open to children. NFDS is a count of the number of bits currently + set in DEV_FD_LIST. TOTFDS is a count of the highest possible number + of open files. */ +static char *dev_fd_list = (char *)NULL; +static int nfds; +static int totfds; /* The highest possible number of open files. */ + +static void +add_fifo_list (fd) + int fd; +{ + if (!dev_fd_list || fd >= totfds) + { + int ofds; + + ofds = totfds; + totfds = getdtablesize (); + if (totfds < 0 || totfds > 256) + totfds = 256; + if (fd > totfds) + totfds = fd + 2; + + dev_fd_list = (char *)xrealloc (dev_fd_list, totfds); + memset (dev_fd_list + ofds, '\0', totfds - ofds); + } + + dev_fd_list[fd] = 1; + nfds++; +} + +void +unlink_fifo_list () +{ + register int i; + + if (nfds == 0) + return; + + for (i = 0; nfds && i < totfds; i++) + if (dev_fd_list[i]) + { + close (i); + dev_fd_list[i] = 0; + nfds--; + } + + nfds = 0; +} + +#if defined (NOTDEF) +print_dev_fd_list () +{ + register int i; + + fprintf (stderr, "pid %ld: dev_fd_list:", (long)getpid ()); + fflush (stderr); + + for (i = 0; i < totfds; i++) + { + if (dev_fd_list[i]) + fprintf (stderr, " %d", i); + } + fprintf (stderr, "\n"); +} +#endif /* NOTDEF */ + +static char * +make_dev_fd_filename (fd) + int fd; +{ + char *ret, intbuf[INT_STRLEN_BOUND (int) + 1], *p; + + ret = (char *)xmalloc (sizeof (DEV_FD_PREFIX) + 4); + + strcpy (ret, DEV_FD_PREFIX); + p = inttostr (fd, intbuf, sizeof (intbuf)); + strcpy (ret + sizeof (DEV_FD_PREFIX) - 1, p); + + add_fifo_list (fd); + return (ret); +} + +#endif /* HAVE_DEV_FD */ + +/* Return a filename that will open a connection to the process defined by + executing STRING. HAVE_DEV_FD, if defined, means open a pipe and return + a filename in /dev/fd corresponding to a descriptor that is one of the + ends of the pipe. If not defined, we use named pipes on systems that have + them. Systems without /dev/fd and named pipes are out of luck. + + OPEN_FOR_READ_IN_CHILD, if 1, means open the named pipe for reading or + use the read end of the pipe and dup that file descriptor to fd 0 in + the child. If OPEN_FOR_READ_IN_CHILD is 0, we open the named pipe for + writing or use the write end of the pipe in the child, and dup that + file descriptor to fd 1 in the child. The parent does the opposite. */ + +static char * +process_substitute (string, open_for_read_in_child) + char *string; + int open_for_read_in_child; +{ + char *pathname; + int fd, result; + pid_t old_pid, pid; +#if defined (HAVE_DEV_FD) + int parent_pipe_fd, child_pipe_fd; + int fildes[2]; +#endif /* HAVE_DEV_FD */ +#if defined (JOB_CONTROL) + pid_t old_pipeline_pgrp; +#endif + + if (!string || !*string || wordexp_only) + return ((char *)NULL); + +#if !defined (HAVE_DEV_FD) + pathname = make_named_pipe (); +#else /* HAVE_DEV_FD */ + if (pipe (fildes) < 0) + { + sys_error (_("cannot make pipe for process substitution")); + return ((char *)NULL); + } + /* If OPEN_FOR_READ_IN_CHILD == 1, we want to use the write end of + the pipe in the parent, otherwise the read end. */ + parent_pipe_fd = fildes[open_for_read_in_child]; + child_pipe_fd = fildes[1 - open_for_read_in_child]; + /* Move the parent end of the pipe to some high file descriptor, to + avoid clashes with FDs used by the script. */ + parent_pipe_fd = move_to_high_fd (parent_pipe_fd, 1, 64); + + pathname = make_dev_fd_filename (parent_pipe_fd); +#endif /* HAVE_DEV_FD */ + + if (!pathname) + { + sys_error (_("cannot make pipe for process substitution")); + return ((char *)NULL); + } + + old_pid = last_made_pid; + +#if defined (JOB_CONTROL) + old_pipeline_pgrp = pipeline_pgrp; + pipeline_pgrp = shell_pgrp; + save_pipeline (1); +#endif /* JOB_CONTROL */ + + pid = make_child ((char *)NULL, 1); + if (pid == 0) + { + reset_terminating_signals (); /* XXX */ + free_pushed_string_input (); + /* Cancel traps, in trap.c. */ + restore_original_signals (); + setup_async_signals (); + subshell_environment |= SUBSHELL_COMSUB; + } + +#if defined (JOB_CONTROL) + set_sigchld_handler (); + stop_making_children (); + pipeline_pgrp = old_pipeline_pgrp; +#endif /* JOB_CONTROL */ + + if (pid < 0) + { + sys_error (_("cannot make child for process substitution")); + free (pathname); +#if defined (HAVE_DEV_FD) + close (parent_pipe_fd); + close (child_pipe_fd); +#endif /* HAVE_DEV_FD */ + return ((char *)NULL); + } + + if (pid > 0) + { +#if defined (JOB_CONTROL) + restore_pipeline (1); +#endif + +#if !defined (HAVE_DEV_FD) + fifo_list[nfifo-1].proc = pid; +#endif + + last_made_pid = old_pid; + +#if defined (JOB_CONTROL) && defined (PGRP_PIPE) + close_pgrp_pipe (); +#endif /* JOB_CONTROL && PGRP_PIPE */ + +#if defined (HAVE_DEV_FD) + close (child_pipe_fd); +#endif /* HAVE_DEV_FD */ + + return (pathname); + } + + set_sigint_handler (); + +#if defined (JOB_CONTROL) + set_job_control (0); +#endif /* JOB_CONTROL */ + +#if !defined (HAVE_DEV_FD) + /* Open the named pipe in the child. */ + fd = open (pathname, open_for_read_in_child ? O_RDONLY|O_NONBLOCK : O_WRONLY); + if (fd < 0) + { + /* Two separate strings for ease of translation. */ + if (open_for_read_in_child) + sys_error (_("cannot open named pipe %s for reading"), pathname); + else + sys_error (_("cannot open named pipe %s for writing"), pathname); + + exit (127); + } + if (open_for_read_in_child) + { + if (sh_unset_nodelay_mode (fd) < 0) + { + sys_error (_("cannout reset nodelay mode for fd %d"), fd); + exit (127); + } + } +#else /* HAVE_DEV_FD */ + fd = child_pipe_fd; +#endif /* HAVE_DEV_FD */ + + if (dup2 (fd, open_for_read_in_child ? 0 : 1) < 0) + { + sys_error (_("cannot duplicate named pipe %s as fd %d"), pathname, + open_for_read_in_child ? 0 : 1); + exit (127); + } + + if (fd != (open_for_read_in_child ? 0 : 1)) + close (fd); + + /* Need to close any files that this process has open to pipes inherited + from its parent. */ + if (current_fds_to_close) + { + close_fd_bitmap (current_fds_to_close); + current_fds_to_close = (struct fd_bitmap *)NULL; + } + +#if defined (HAVE_DEV_FD) + /* Make sure we close the parent's end of the pipe and clear the slot + in the fd list so it is not closed later, if reallocated by, for + instance, pipe(2). */ + close (parent_pipe_fd); + dev_fd_list[parent_pipe_fd] = 0; +#endif /* HAVE_DEV_FD */ + + result = parse_and_execute (string, "process substitution", (SEVAL_NONINT|SEVAL_NOHIST)); + +#if !defined (HAVE_DEV_FD) + /* Make sure we close the named pipe in the child before we exit. */ + close (open_for_read_in_child ? 0 : 1); +#endif /* !HAVE_DEV_FD */ + + exit (result); + /*NOTREACHED*/ +} +#endif /* PROCESS_SUBSTITUTION */ + +/***********************************/ +/* */ +/* Command Substitution */ +/* */ +/***********************************/ + +static char * +read_comsub (fd, quoted) + int fd, quoted; +{ + char *istring, buf[128], *bufp; + int istring_index, istring_size, c; + ssize_t bufn; + + istring = (char *)NULL; + istring_index = istring_size = bufn = 0; + +#ifdef __CYGWIN__ + setmode (fd, O_TEXT); /* we don't want CR/LF, we want Unix-style */ +#endif + + /* Read the output of the command through the pipe. */ + while (1) + { + if (fd < 0) + break; + if (--bufn <= 0) + { + bufn = zread (fd, buf, sizeof (buf)); + if (bufn <= 0) + break; + bufp = buf; + } + c = *bufp++; + + if (c == 0) + { +#if 0 + internal_warning ("read_comsub: ignored null byte in input"); +#endif + continue; + } + + /* Add the character to ISTRING, possibly after resizing it. */ + RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE); + + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL) + istring[istring_index++] = CTLESC; + + istring[istring_index++] = c; + +#if 0 +#if defined (__CYGWIN__) + if (c == '\n' && istring_index > 1 && istring[istring_index - 2] == '\r') + { + istring_index--; + istring[istring_index - 1] = '\n'; + } +#endif +#endif + } + + if (istring) + istring[istring_index] = '\0'; + + /* If we read no output, just return now and save ourselves some + trouble. */ + if (istring_index == 0) + { + FREE (istring); + return (char *)NULL; + } + + /* Strip trailing newlines from the output of the command. */ + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + { + while (istring_index > 0) + { + if (istring[istring_index - 1] == '\n') + { + --istring_index; + + /* If the newline was quoted, remove the quoting char. */ + if (istring[istring_index - 1] == CTLESC) + --istring_index; + } + else + break; + } + istring[istring_index] = '\0'; + } + else + strip_trailing (istring, istring_index - 1, 1); + + return istring; +} + +/* Perform command substitution on STRING. This returns a string, + possibly quoted. */ +char * +command_substitute (string, quoted) + char *string; + int quoted; +{ + pid_t pid, old_pid, old_pipeline_pgrp; + char *istring; + int result, fildes[2], function_value, pflags, rc; + + istring = (char *)NULL; + + /* Don't fork () if there is no need to. In the case of no command to + run, just return NULL. */ + if (!string || !*string || (string[0] == '\n' && !string[1])) + return ((char *)NULL); + + if (wordexp_only && read_but_dont_execute) + { + last_command_exit_value = 125; + jump_to_top_level (EXITPROG); + } + + /* We're making the assumption here that the command substitution will + eventually run a command from the file system. Since we'll run + maybe_make_export_env in this subshell before executing that command, + the parent shell and any other shells it starts will have to remake + the environment. If we make it before we fork, other shells won't + have to. Don't bother if we have any temporary variable assignments, + though, because the export environment will be remade after this + command completes anyway, but do it if all the words to be expanded + are variable assignments. */ + if (subst_assign_varlist == 0 || garglist == 0) + maybe_make_export_env (); /* XXX */ + + /* Flags to pass to parse_and_execute() */ + pflags = interactive ? SEVAL_RESETLINE : 0; + + /* Pipe the output of executing STRING into the current shell. */ + if (pipe (fildes) < 0) + { + sys_error (_("cannot make pipe for command substitution")); + goto error_exit; + } + + old_pid = last_made_pid; +#if defined (JOB_CONTROL) + old_pipeline_pgrp = pipeline_pgrp; + /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline. */ + if ((subshell_environment & SUBSHELL_PIPE) == 0) + pipeline_pgrp = shell_pgrp; + cleanup_the_pipeline (); +#endif + + pid = make_child ((char *)NULL, 0); + if (pid == 0) + /* Reset the signal handlers in the child, but don't free the + trap strings. */ + reset_signal_handlers (); + +#if defined (JOB_CONTROL) + set_sigchld_handler (); + stop_making_children (); + pipeline_pgrp = old_pipeline_pgrp; +#else + stop_making_children (); +#endif /* JOB_CONTROL */ + + if (pid < 0) + { + sys_error (_("cannot make child for command substitution")); + error_exit: + + FREE (istring); + close (fildes[0]); + close (fildes[1]); + return ((char *)NULL); + } + + if (pid == 0) + { + set_sigint_handler (); /* XXX */ + + free_pushed_string_input (); + + if (dup2 (fildes[1], 1) < 0) + { + sys_error (_("command_substitute: cannot duplicate pipe as fd 1")); + exit (EXECUTION_FAILURE); + } + + /* If standard output is closed in the parent shell + (such as after `exec >&-'), file descriptor 1 will be + the lowest available file descriptor, and end up in + fildes[0]. This can happen for stdin and stderr as well, + but stdout is more important -- it will cause no output + to be generated from this command. */ + if ((fildes[1] != fileno (stdin)) && + (fildes[1] != fileno (stdout)) && + (fildes[1] != fileno (stderr))) + close (fildes[1]); + + if ((fildes[0] != fileno (stdin)) && + (fildes[0] != fileno (stdout)) && + (fildes[0] != fileno (stderr))) + close (fildes[0]); + + /* The currently executing shell is not interactive. */ + interactive = 0; + + /* This is a subshell environment. */ + subshell_environment |= SUBSHELL_COMSUB; + + /* When not in POSIX mode, command substitution does not inherit + the -e flag. */ + if (posixly_correct == 0) + exit_immediately_on_error = 0; + + remove_quoted_escapes (string); + + startup_state = 2; /* see if we can avoid a fork */ + /* Give command substitution a place to jump back to on failure, + so we don't go back up to main (). */ + result = setjmp (top_level); + + /* If we're running a command substitution inside a shell function, + trap `return' so we don't return from the function in the subshell + and go off to never-never land. */ + if (result == 0 && return_catch_flag) + function_value = setjmp (return_catch); + else + function_value = 0; + + if (result == ERREXIT) + rc = last_command_exit_value; + else if (result == EXITPROG) + rc = last_command_exit_value; + else if (result) + rc = EXECUTION_FAILURE; + else if (function_value) + rc = return_catch_value; + else + { + subshell_level++; + rc = parse_and_execute (string, "command substitution", pflags|SEVAL_NOHIST); + subshell_level--; + } + + last_command_exit_value = rc; + rc = run_exit_trap (); + exit (rc); + } + else + { +#if defined (JOB_CONTROL) && defined (PGRP_PIPE) + close_pgrp_pipe (); +#endif /* JOB_CONTROL && PGRP_PIPE */ + + close (fildes[1]); + + istring = read_comsub (fildes[0], quoted); + + close (fildes[0]); + + current_command_subst_pid = pid; + last_command_exit_value = wait_for (pid); + last_command_subst_pid = pid; + last_made_pid = old_pid; + +#if defined (JOB_CONTROL) + /* If last_command_exit_value > 128, then the substituted command + was terminated by a signal. If that signal was SIGINT, then send + SIGINT to ourselves. This will break out of loops, for instance. */ + if (last_command_exit_value == (128 + SIGINT) && last_command_exit_signal == SIGINT) + kill (getpid (), SIGINT); + + /* wait_for gives the terminal back to shell_pgrp. If some other + process group should have it, give it away to that group here. + pipeline_pgrp is non-zero only while we are constructing a + pipline, so what we are concerned about is whether or not that + pipeline was started in the background. A pipeline started in + the background should never get the tty back here. */ +#if 0 + if (interactive && pipeline_pgrp != (pid_t)0 && pipeline_pgrp != last_asynchronous_pid) +#else + if (interactive && pipeline_pgrp != (pid_t)0 && (subshell_environment & SUBSHELL_ASYNC) == 0) +#endif + give_terminal_to (pipeline_pgrp, 0); +#endif /* JOB_CONTROL */ + + return (istring); + } +} + +/******************************************************** + * * + * Utility functions for parameter expansion * + * * + ********************************************************/ + +#if defined (ARRAY_VARS) + +static arrayind_t +array_length_reference (s) + char *s; +{ + int len; + arrayind_t ind; + char *t, c; + ARRAY *array; + SHELL_VAR *var; + + var = array_variable_part (s, &t, &len); + + /* If unbound variables should generate an error, report one and return + failure. */ + if ((var == 0 || array_p (var) == 0) && unbound_vars_is_error) + { + c = *--t; + *t = '\0'; + err_unboundvar (s); + *t = c; + return (-1); + } + else if (var == 0) + return 0; + + /* We support a couple of expansions for variables that are not arrays. + We'll return the length of the value for v[0], and 1 for v[@] or + v[*]. Return 0 for everything else. */ + + array = array_p (var) ? array_cell (var) : (ARRAY *)NULL; + + if (ALL_ELEMENT_SUB (t[0]) && t[1] == ']') + return (array_p (var) ? array_num_elements (array) : 1); + + ind = array_expand_index (t, len); + if (ind < 0) + { + err_badarraysub (t); + return (-1); + } + + if (array_p (var)) + t = array_reference (array, ind); + else + t = (ind == 0) ? value_cell (var) : (char *)NULL; + + len = STRLEN (t); + return (len); +} +#endif /* ARRAY_VARS */ + +static int +valid_brace_expansion_word (name, var_is_special) + char *name; + int var_is_special; +{ + if (DIGIT (*name) && all_digits (name)) + return 1; + else if (var_is_special) + return 1; +#if defined (ARRAY_VARS) + else if (valid_array_reference (name)) + return 1; +#endif /* ARRAY_VARS */ + else if (legal_identifier (name)) + return 1; + else + return 0; +} + +static int +chk_atstar (name, quoted, quoted_dollar_atp, contains_dollar_at) + char *name; + int quoted; + int *quoted_dollar_atp, *contains_dollar_at; +{ + char *temp1; + + if (name == 0) + { + if (quoted_dollar_atp) + *quoted_dollar_atp = 0; + if (contains_dollar_at) + *contains_dollar_at = 0; + return 0; + } + + /* check for $@ and $* */ + if (name[0] == '@' && name[1] == 0) + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } + else if (name[0] == '*' && name[1] == '\0' && quoted == 0) + { + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } + + /* Now check for ${array[@]} and ${array[*]} */ +#if defined (ARRAY_VARS) + else if (valid_array_reference (name)) + { + temp1 = xstrchr (name, '['); + if (temp1 && temp1[1] == '@' && temp1[2] == ']') + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } /* [ */ + /* ${array[*]}, when unquoted, should be treated like ${array[@]}, + which should result in separate words even when IFS is unset. */ + if (temp1 && temp1[1] == '*' && temp1[2] == ']' && quoted == 0) + { + if (contains_dollar_at) + *contains_dollar_at = 1; + return 1; + } + } +#endif + return 0; +} + +/* Parameter expand NAME, and return a new string which is the expansion, + or NULL if there was no expansion. + VAR_IS_SPECIAL is non-zero if NAME is one of the special variables in + the shell, e.g., "@", "$", "*", etc. QUOTED, if non-zero, means that + NAME was found inside of a double-quoted expression. */ +static char * +parameter_brace_expand_word (name, var_is_special, quoted) + char *name; + int var_is_special, quoted; +{ + char *temp, *tt; + intmax_t arg_index; + SHELL_VAR *var; + int atype; + + /* Handle multiple digit arguments, as in ${11}. */ + + if (legal_number (name, &arg_index)) + { + tt = get_dollar_var_value (arg_index); + if (tt) + temp = (*tt && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + ? quote_string (tt) + : quote_escapes (tt); + else + temp = (char *)NULL; + FREE (tt); + } + else if (var_is_special) /* ${@} */ + { + int sindex; + tt = (char *)xmalloc (2 + strlen (name)); + tt[sindex = 0] = '$'; + strcpy (tt + 1, name); + + temp = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL, + (int *)NULL, (int *)NULL, 0); + free (tt); + } +#if defined (ARRAY_VARS) + else if (valid_array_reference (name)) + { + temp = array_value (name, quoted, &atype); + if (atype == 0 && temp) + temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + ? quote_string (temp) + : quote_escapes (temp); + } +#endif + else if (var = find_variable (name)) + { + if (var_isset (var) && invisible_p (var) == 0) + { +#if defined (ARRAY_VARS) + temp = array_p (var) ? array_reference (array_cell (var), 0) : value_cell (var); +#else + temp = value_cell (var); +#endif + + if (temp) + temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) + ? quote_string (temp) + : quote_escapes (temp); + } + else + temp = (char *)NULL; + } + else + temp = (char *)NULL; + + return (temp); +} + +/* Expand an indirect reference to a variable: ${!NAME} expands to the + value of the variable whose name is the value of NAME. */ +static char * +parameter_brace_expand_indir (name, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at) + char *name; + int var_is_special, quoted; + int *quoted_dollar_atp, *contains_dollar_at; +{ + char *temp, *t; + + t = parameter_brace_expand_word (name, var_is_special, quoted); + /* Have to dequote here if necessary */ + if (t) + { + temp = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + ? dequote_string (t) + : dequote_escapes (t); + free (t); + t = temp; + } + chk_atstar (t, quoted, quoted_dollar_atp, contains_dollar_at); + if (t == 0) + return (t); + temp = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted); + free (t); + return temp; +} + +/* Expand the right side of a parameter expansion of the form ${NAMEcVALUE}, + depending on the value of C, the separating character. C can be one of + "-", "+", or "=". QUOTED is true if the entire brace expression occurs + between double quotes. */ +static char * +parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat) + char *name, *value; + int c, quoted, *qdollaratp, *hasdollarat; +{ + WORD_LIST *l; + char *t, *t1, *temp; + int hasdol; + + /* XXX - Should we tilde expand in an assignment context if C is `='? */ + if (*value == '~') + temp = bash_tilde_expand (value, 0); + else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) + temp = bash_tilde_expand (value, 1); + else + temp = savestring (value); + + /* If the entire expression is between double quotes, we want to treat + the value as a double-quoted string, with the exception that we strip + embedded unescaped double quotes. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *temp) + { + hasdol = 0; + t = string_extract_double_quoted (temp, &hasdol, 1); + free (temp); + temp = t; + } + + hasdol = 0; + /* XXX was 0 not quoted */ + l = *temp ? expand_string_for_rhs (temp, quoted, &hasdol, (int *)NULL) + : (WORD_LIST *)0; + if (hasdollarat) + *hasdollarat = hasdol || (l && l->next); + free (temp); + if (l) + { + /* The expansion of TEMP returned something. We need to treat things + slightly differently if HASDOL is non-zero. If we have "$@", the + individual words have already been quoted. We need to turn them + into a string with the words separated by the first character of + $IFS without any additional quoting, so string_list_dollar_at won't + do the right thing. We use string_list_dollar_star instead. */ + temp = (hasdol || l->next) ? string_list_dollar_star (l) : string_list (l); + + /* If l->next is not null, we know that TEMP contained "$@", since that + is the only expansion that creates more than one word. */ + if (qdollaratp && ((hasdol && quoted) || l->next)) + *qdollaratp = 1; + dispose_words (l); + } + else if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && hasdol) + { + /* The brace expansion occurred between double quotes and there was + a $@ in TEMP. It does not matter if the $@ is quoted, as long as + it does not expand to anything. In this case, we want to return + a quoted empty string. */ + temp = (char *)xmalloc (2); + temp[0] = CTLNUL; + temp[1] = '\0'; + } + else + temp = (char *)NULL; + + if (c == '-' || c == '+') + return (temp); + + /* c == '=' */ + t = temp ? savestring (temp) : savestring (""); + t1 = dequote_string (t); + free (t); +#if defined (ARRAY_VARS) + if (valid_array_reference (name)) + assign_array_element (name, t1); + else +#endif /* ARRAY_VARS */ + bind_variable (name, t1); + free (t1); + return (temp); +} + +/* Deal with the right hand side of a ${name:?value} expansion in the case + that NAME is null or not set. If VALUE is non-null it is expanded and + used as the error message to print, otherwise a standard message is + printed. */ +static void +parameter_brace_expand_error (name, value) + char *name, *value; +{ + WORD_LIST *l; + char *temp; + + if (value && *value) + { + if (*value == '~') + temp = bash_tilde_expand (value, 0); + else if (xstrchr (value, '~') && unquoted_substring ("=~", value)) + temp = bash_tilde_expand (value, 1); + else + temp = savestring (value); + + l = expand_string (temp, 0); + FREE (temp); + temp = string_list (l); + report_error ("%s: %s", name, temp ? temp : ""); /* XXX was value not "" */ + FREE (temp); + dispose_words (l); + } + else + report_error (_("%s: parameter null or not set"), name); + + /* Free the data we have allocated during this expansion, since we + are about to longjmp out. */ + free (name); + FREE (value); +} + +/* Return 1 if NAME is something for which parameter_brace_expand_length is + OK to do. */ +static int +valid_length_expression (name) + char *name; +{ + return (name[1] == '\0' || /* ${#} */ + ((sh_syntaxtab[(unsigned char) name[1]] & CSPECVAR) && name[2] == '\0') || /* special param */ + (DIGIT (name[1]) && all_digits (name + 1)) || /* ${#11} */ +#if defined (ARRAY_VARS) + valid_array_reference (name + 1) || /* ${#a[7]} */ +#endif + legal_identifier (name + 1)); /* ${#PS1} */ +} + +/* Handle the parameter brace expansion that requires us to return the + length of a parameter. */ +static intmax_t +parameter_brace_expand_length (name) + char *name; +{ + char *t, *newname; + intmax_t number, arg_index; + WORD_LIST *list; +#if defined (ARRAY_VARS) + SHELL_VAR *var; +#endif + + if (name[1] == '\0') /* ${#} */ + number = number_of_args (); + else if ((name[1] == '@' || name[1] == '*') && name[2] == '\0') /* ${#@}, ${#*} */ + number = number_of_args (); + else if ((sh_syntaxtab[(unsigned char) name[1]] & CSPECVAR) && name[2] == '\0') + { + /* Take the lengths of some of the shell's special parameters. */ + switch (name[1]) + { + case '-': + t = which_set_flags (); + break; + case '?': + t = itos (last_command_exit_value); + break; + case '$': + t = itos (dollar_dollar_pid); + break; + case '!': + if (last_asynchronous_pid == NO_PID) + t = (char *)NULL; + else + t = itos (last_asynchronous_pid); + break; + case '#': + t = itos (number_of_args ()); + break; + } + number = STRLEN (t); + FREE (t); + } +#if defined (ARRAY_VARS) + else if (valid_array_reference (name + 1)) + number = array_length_reference (name + 1); +#endif /* ARRAY_VARS */ + else + { + number = 0; + + if (legal_number (name + 1, &arg_index)) /* ${#1} */ + { + t = get_dollar_var_value (arg_index); + number = STRLEN (t); + FREE (t); + } +#if defined (ARRAY_VARS) + else if ((var = find_variable (name + 1)) && array_p (var)) + { + t = array_reference (array_cell (var), 0); + number = STRLEN (t); + } +#endif + else /* ${#PS1} */ + { + newname = savestring (name); + newname[0] = '$'; + list = expand_string (newname, Q_DOUBLE_QUOTES); + t = list ? string_list (list) : (char *)NULL; + free (newname); + if (list) + dispose_words (list); + + number = STRLEN (t); + FREE (t); + } + } + + return (number); +} + +/* Skip characters in SUBSTR until DELIM. SUBSTR is an arithmetic expression, + so we do some ad-hoc parsing of an arithmetic expression to find + the first DELIM, instead of using strchr(3). Two rules: + 1. If the substring contains a `(', read until closing `)'. + 2. If the substring contains a `?', read past one `:' for each `?'. +*/ + +static char * +skiparith (substr, delim) + char *substr; + int delim; +{ + size_t sublen; + int skipcol, pcount, i; + DECLARE_MBSTATE; + + sublen = strlen (substr); + i = skipcol = pcount = 0; + while (substr[i]) + { + /* Balance parens */ + if (substr[i] == LPAREN) + { + pcount++; + i++; + continue; + } + if (substr[i] == RPAREN && pcount) + { + pcount--; + i++; + continue; + } + if (pcount) + { + ADVANCE_CHAR (substr, sublen, i); + continue; + } + + /* Skip one `:' for each `?' */ + if (substr[i] == ':' && skipcol) + { + skipcol--; + i++; + continue; + } + if (substr[i] == delim) + break; + if (substr[i] == '?') + { + skipcol++; + i++; + continue; + } + ADVANCE_CHAR (substr, sublen, i); + } + + return (substr + i); +} + +/* Verify and limit the start and end of the desired substring. If + VTYPE == 0, a regular shell variable is being used; if it is 1, + then the positional parameters are being used; if it is 2, then + VALUE is really a pointer to an array variable that should be used. + Return value is 1 if both values were OK, 0 if there was a problem + with an invalid expression, or -1 if the values were out of range. */ +static int +verify_substring_values (value, substr, vtype, e1p, e2p) + char *value, *substr; + int vtype; + intmax_t *e1p, *e2p; +{ + char *t, *temp1, *temp2; + arrayind_t len; + int expok; +#if defined (ARRAY_VARS) + ARRAY *a; +#endif + + /* duplicate behavior of strchr(3) */ + t = skiparith (substr, ':'); + if (*t && *t == ':') + *t = '\0'; + else + t = (char *)0; + + temp1 = expand_string_if_necessary (substr, Q_DOUBLE_QUOTES, expand_string); + *e1p = evalexp (temp1, &expok); + free (temp1); + if (expok == 0) + return (0); + + len = -1; /* paranoia */ + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: + len = strlen (value); + break; + case VT_POSPARMS: + len = number_of_args () + 1; + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + a = (ARRAY *)value; + /* For arrays, the first value deals with array indices. */ + len = array_max_index (a); /* arrays index from 0 to n - 1 */ + break; +#endif + } + + if (len == -1) /* paranoia */ + return -1; + + if (*e1p < 0) /* negative offsets count from end */ + *e1p += len; + + if (*e1p >= len || *e1p < 0) + return (-1); + +#if defined (ARRAY_VARS) + /* For arrays, the second offset deals with the number of elements. */ + if (vtype == VT_ARRAYVAR) + len = array_num_elements (a); +#endif + + if (t) + { + t++; + temp2 = savestring (t); + temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string); + free (temp2); + t[-1] = ':'; + *e2p = evalexp (temp1, &expok); + free (temp1); + if (expok == 0) + return (0); + if (*e2p < 0) + { + internal_error (_("%s: substring expression < 0"), t); + return (0); + } +#if defined (ARRAY_VARS) + /* In order to deal with sparse arrays, push the intelligence about how + to deal with the number of elements desired down to the array- + specific functions. */ + if (vtype != VT_ARRAYVAR) +#endif + { + *e2p += *e1p; /* want E2 chars starting at E1 */ + if (*e2p > len) + *e2p = len; + } + } + else + *e2p = len; + + return (1); +} + +/* Return the type of variable specified by VARNAME (simple variable, + positional param, or array variable). Also return the value specified + by VARNAME (value of a variable or a reference to an array element). + If this returns VT_VARIABLE, the caller assumes that CTLESC and CTLNUL + characters in the value are quoted with CTLESC and takes appropriate + steps. For convenience, *VALP is set to the dequoted VALUE. */ +static int +get_var_and_type (varname, value, quoted, varp, valp) + char *varname, *value; + int quoted; + SHELL_VAR **varp; + char **valp; +{ + int vtype; + char *temp; +#if defined (ARRAY_VARS) + SHELL_VAR *v; +#endif + + /* This sets vtype to VT_VARIABLE or VT_POSPARMS */ + vtype = (varname[0] == '@' || varname[0] == '*') && varname[1] == '\0'; + if (vtype == VT_POSPARMS && varname[0] == '*') + vtype |= VT_STARSUB; + *varp = (SHELL_VAR *)NULL; + +#if defined (ARRAY_VARS) + if (valid_array_reference (varname)) + { + v = array_variable_part (varname, &temp, (int *)0); + if (v && array_p (v)) + { /* [ */ + if (ALL_ELEMENT_SUB (temp[0]) && temp[1] == ']') + { + vtype = VT_ARRAYVAR; + if (temp[0] == '*') + vtype |= VT_STARSUB; + *valp = (char *)array_cell (v); + } + else + { + vtype = VT_ARRAYMEMBER; + *valp = array_value (varname, 1, (int *)NULL); + } + *varp = v; + } + else + return -1; + } + else if ((v = find_variable (varname)) && array_p (v)) + { + vtype = VT_ARRAYMEMBER; + *varp = v; + *valp = array_reference (array_cell (v), 0); + } + else +#endif +#if 1 + { + if (value && vtype == VT_VARIABLE) + { + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + *valp = dequote_string (value); + else + *valp = dequote_escapes (value); + } + else + *valp = value; + } +#else + *valp = (value && vtype == VT_VARIABLE) ? dequote_escapes (value) : value; +#endif + + return vtype; +} + +/******************************************************/ +/* */ +/* Functions to extract substrings of variable values */ +/* */ +/******************************************************/ + +#if defined (HANDLE_MULTIBYTE) +/* Character-oriented rather than strictly byte-oriented substrings. S and + E, rather being strict indices into STRING, indicate character (possibly + multibyte character) positions that require calculation. + Used by the ${param:offset[:length]} expansion. */ +static char * +mb_substring (string, s, e) + char *string; + int s, e; +{ + char *tt; + int start, stop, i, slen; + DECLARE_MBSTATE; + + start = 0; + slen = STRLEN (string); + + i = s; + while (string[start] && i--) + ADVANCE_CHAR (string, slen, start); + stop = start; + i = e - s; + while (string[stop] && i--) + ADVANCE_CHAR (string, slen, stop); + tt = substring (string, start, stop); + return tt; +} +#endif + +/* Process a variable substring expansion: ${name:e1[:e2]}. If VARNAME + is `@', use the positional parameters; otherwise, use the value of + VARNAME. If VARNAME is an array variable, use the array elements. */ + +static char * +parameter_brace_substring (varname, value, substr, quoted) + char *varname, *value, *substr; + int quoted; +{ + intmax_t e1, e2; + int vtype, r, starsub; + char *temp, *val, *tt; + SHELL_VAR *v; + + if (value == 0) + return ((char *)NULL); + + this_command_name = varname; + + vtype = get_var_and_type (varname, value, quoted, &v, &val); + if (vtype == -1) + return ((char *)NULL); + + starsub = vtype & VT_STARSUB; + vtype &= ~VT_STARSUB; + + r = verify_substring_values (val, substr, vtype, &e1, &e2); + if (r <= 0) + return ((r == 0) ? &expand_param_error : (char *)NULL); + + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: +#if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1) + tt = mb_substring (val, e1, e2); + else +#endif + tt = substring (val, e1, e2); + + if (vtype == VT_VARIABLE) + FREE (val); + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) + temp = quote_string (tt); + else + temp = tt ? quote_escapes (tt) : (char *)NULL; + FREE (tt); + break; + case VT_POSPARMS: + tt = pos_params (varname, e1, e2, quoted); + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) + { + temp = tt ? quote_escapes (tt) : (char *)NULL; + FREE (tt); + } + else + temp = tt; + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + /* We want E2 to be the number of elements desired (arrays can be sparse, + so verify_substring_values just returns the numbers specified and we + rely on array_subrange to understand how to deal with them). */ + tt = array_subrange (array_cell (v), e1, e2, starsub, quoted); + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0) + { + temp = tt ? quote_escapes (tt) : (char *)NULL; + FREE (tt); + } + else + temp = tt; + break; +#endif + default: + temp = (char *)NULL; + } + + return temp; +} + +/****************************************************************/ +/* */ +/* Functions to perform pattern substitution on variable values */ +/* */ +/****************************************************************/ + +char * +pat_subst (string, pat, rep, mflags) + char *string, *pat, *rep; + int mflags; +{ + char *ret, *s, *e, *str; + int rsize, rptr, l, replen, mtype; + + mtype = mflags & MATCH_TYPEMASK; + + /* Special cases: + * 1. A null pattern with mtype == MATCH_BEG means to prefix STRING + * with REP and return the result. + * 2. A null pattern with mtype == MATCH_END means to append REP to + * STRING and return the result. + */ + if ((pat == 0 || *pat == 0) && (mtype == MATCH_BEG || mtype == MATCH_END)) + { + replen = STRLEN (rep); + l = strlen (string); + ret = (char *)xmalloc (replen + l + 2); + if (replen == 0) + strcpy (ret, string); + else if (mtype == MATCH_BEG) + { + strcpy (ret, rep); + strcpy (ret + replen, string); + } + else + { + strcpy (ret, string); + strcpy (ret + l, rep); + } + return (ret); + } + + ret = (char *)xmalloc (rsize = 64); + ret[0] = '\0'; + + for (replen = STRLEN (rep), rptr = 0, str = string;;) + { + if (match_pattern (str, pat, mtype, &s, &e) == 0) + break; + l = s - str; + RESIZE_MALLOCED_BUFFER (ret, rptr, (l + replen), rsize, 64); + + /* OK, now copy the leading unmatched portion of the string (from + str to s) to ret starting at rptr (the current offset). Then copy + the replacement string at ret + rptr + (s - str). Increment + rptr (if necessary) and str and go on. */ + if (l) + { + strncpy (ret + rptr, str, l); + rptr += l; + } + if (replen) + { + strncpy (ret + rptr, rep, replen); + rptr += replen; + } + str = e; /* e == end of match */ + + if (((mflags & MATCH_GLOBREP) == 0) || mtype != MATCH_ANY) + break; + + if (s == e) + e++, str++; /* avoid infinite recursion on zero-length match */ + } + + /* Now copy the unmatched portion of the input string */ + if (*str) + { + RESIZE_MALLOCED_BUFFER (ret, rptr, STRLEN(str) + 1, rsize, 64); + strcpy (ret + rptr, str); + } + else + ret[rptr] = '\0'; + + return ret; +} + +/* Do pattern match and replacement on the positional parameters. */ +static char * +pos_params_pat_subst (string, pat, rep, mflags) + char *string, *pat, *rep; + int mflags; +{ + WORD_LIST *save, *params; + WORD_DESC *w; + char *ret, *tt; + + save = params = list_rest_of_args (); + if (save == 0) + return ((char *)NULL); + + for ( ; params; params = params->next) + { + ret = pat_subst (params->word->word, pat, rep, mflags); + w = make_bare_word (ret); + dispose_word (params->word); + params->word = w; + FREE (ret); + } + + if ((mflags & (MATCH_QUOTED|MATCH_STARSUB)) == (MATCH_QUOTED|MATCH_STARSUB)) + ret = string_list_dollar_star (quote_list (save)); + else + ret = string_list ((mflags & MATCH_QUOTED) ? quote_list (save) : save); + dispose_words (save); + + return (ret); +} + +/* Perform pattern substitution on VALUE, which is the expansion of + VARNAME. PATSUB is an expression supplying the pattern to match + and the string to substitute. QUOTED is a flags word containing + the type of quoting currently in effect. */ +static char * +parameter_brace_patsub (varname, value, patsub, quoted) + char *varname, *value, *patsub; + int quoted; +{ + int vtype, mflags, starsub; + char *val, *temp, *pat, *rep, *p, *lpatsub, *tt; + SHELL_VAR *v; + + if (value == 0) + return ((char *)NULL); + + this_command_name = varname; + + vtype = get_var_and_type (varname, value, quoted, &v, &val); + if (vtype == -1) + return ((char *)NULL); + + starsub = vtype & VT_STARSUB; + vtype &= ~VT_STARSUB; + + mflags = 0; + if (*patsub == '/') + { + mflags |= MATCH_GLOBREP; + patsub++; + } + + /* Malloc this because expand_string_if_necessary or one of the expansion + functions in its call chain may free it on a substitution error. */ + lpatsub = savestring (patsub); + + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + mflags |= MATCH_QUOTED; + + if (starsub) + mflags |= MATCH_STARSUB; + + if (rep = quoted_strchr (lpatsub, '/', ST_BACKSL)) + *rep++ = '\0'; + else + rep = (char *)NULL; + + if (rep && *rep == '\0') + rep = (char *)NULL; + +#if 0 + /* Expand PAT and REP for command, variable and parameter, arithmetic, + and process substitution. Also perform quote removal. Do not + perform word splitting or filename generation. */ + pat = expand_string_if_necessary (lpatsub, (quoted & ~Q_DOUBLE_QUOTES), expand_string_unsplit); +#else + /* Perform the same expansions on the pattern as performed by the + pattern removal expansions. */ + pat = getpattern (lpatsub, quoted, 1); +#endif + + if (rep) + { + if ((mflags & MATCH_QUOTED) == 0) + rep = expand_string_if_necessary (rep, quoted, expand_string_unsplit); + else + rep = expand_string_to_string_internal (rep, quoted, expand_string_unsplit); + } + + p = pat; + if (pat && pat[0] == '#') + { + mflags |= MATCH_BEG; + p++; + } + else if (pat && pat[0] == '%') + { + mflags |= MATCH_END; + p++; + } + else + mflags |= MATCH_ANY; + + /* OK, we now want to substitute REP for PAT in VAL. If + flags & MATCH_GLOBREP is non-zero, the substitution is done + everywhere, otherwise only the first occurrence of PAT is + replaced. The pattern matching code doesn't understand + CTLESC quoting CTLESC and CTLNUL so we use the dequoted variable + values passed in (VT_VARIABLE) so the pattern substitution + code works right. We need to requote special chars after + we're done for VT_VARIABLE and VT_ARRAYMEMBER, and for the + other cases if QUOTED == 0, since the posparams and arrays + indexed by * or @ do special things when QUOTED != 0. */ + + switch (vtype) + { + case VT_VARIABLE: + case VT_ARRAYMEMBER: + temp = pat_subst (val, p, rep, mflags); + if (vtype == VT_VARIABLE) + FREE (val); + if (temp) + { + tt = quote_escapes (temp); + free (temp); + temp = tt; + } + break; + case VT_POSPARMS: + temp = pos_params_pat_subst (val, p, rep, mflags); + if (temp && (mflags & MATCH_QUOTED) == 0) + { + tt = quote_escapes (temp); + free (temp); + temp = tt; + } + break; +#if defined (ARRAY_VARS) + case VT_ARRAYVAR: + temp = array_patsub (array_cell (v), p, rep, mflags); + if (temp && (mflags & MATCH_QUOTED) == 0) + { + tt = quote_escapes (temp); + free (temp); + temp = tt; + } + break; +#endif + } + + FREE (pat); + FREE (rep); + free (lpatsub); + + return temp; +} + +/****************************************************************/ +/* */ +/* Functions to perform parameter expansion on a string */ +/* */ +/****************************************************************/ + +/* ${[#][!]name[[:]#[#]%[%]-=?+[word][:e1[:e2]]]} */ +static char * +parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_dollar_at) + char *string; + int *indexp, quoted, *quoted_dollar_atp, *contains_dollar_at; +{ + int check_nullness, var_is_set, var_is_null, var_is_special; + int want_substring, want_indir, want_patsub; + char *name, *value, *temp, *temp1; + int t_index, sindex, c; + intmax_t number; + + value = (char *)NULL; + var_is_set = var_is_null = var_is_special = check_nullness = 0; + want_substring = want_indir = want_patsub = 0; + + sindex = *indexp; + t_index = ++sindex; + name = string_extract (string, &t_index, "#%:-=?+/}", EX_VARNAME); + + /* If the name really consists of a special variable, then make sure + that we have the entire name. We don't allow indirect references + to special variables except `#', `?', `@' and `*'. */ + if ((sindex == t_index && + (string[t_index] == '-' || + string[t_index] == '?' || + string[t_index] == '#')) || + (sindex == t_index - 1 && string[sindex] == '!' && + (string[t_index] == '#' || + string[t_index] == '?' || + string[t_index] == '@' || + string[t_index] == '*'))) + { + t_index++; + free (name); + temp1 = string_extract (string, &t_index, "#%:-=?+/}", 0); + name = (char *)xmalloc (3 + (strlen (temp1))); + *name = string[sindex]; + if (string[sindex] == '!') + { + /* indirect reference of $#, $?, $@, or $* */ + name[1] = string[sindex + 1]; + strcpy (name + 2, temp1); + } + else + strcpy (name + 1, temp1); + free (temp1); + } + sindex = t_index; + + /* Find out what character ended the variable name. Then + do the appropriate thing. */ + if (c = string[sindex]) + sindex++; + + /* If c is followed by one of the valid parameter expansion + characters, move past it as normal. If not, assume that + a substring specification is being given, and do not move + past it. */ + if (c == ':' && VALID_PARAM_EXPAND_CHAR (string[sindex])) + { + check_nullness++; + if (c = string[sindex]) + sindex++; + } + else if (c == ':' && string[sindex] != RBRACE) + want_substring = 1; + else if (c == '/' && string[sindex] != RBRACE) + want_patsub = 1; + + /* Catch the valid and invalid brace expressions that made it through the + tests above. */ + /* ${#-} is a valid expansion and means to take the length of $-. + Similarly for ${#?} and ${##}... */ + if (name[0] == '#' && name[1] == '\0' && check_nullness == 0 && + VALID_SPECIAL_LENGTH_PARAM (c) && string[sindex] == RBRACE) + { + name = (char *)xrealloc (name, 3); + name[1] = c; + name[2] = '\0'; + c = string[sindex++]; + } + + /* ...but ${#%}, ${#:}, ${#=}, ${#+}, and ${#/} are errors. */ + if (name[0] == '#' && name[1] == '\0' && check_nullness == 0 && + member (c, "%:=+/") && string[sindex] == RBRACE) + { + temp = (char *)NULL; + goto bad_substitution; + } + + /* Indirect expansion begins with a `!'. A valid indirect expansion is + either a variable name, one of the positional parameters or a special + variable that expands to one of the positional parameters. */ + want_indir = *name == '!' && + (legal_variable_starter ((unsigned char)name[1]) || DIGIT (name[1]) + || VALID_INDIR_PARAM (name[1])); + + /* Determine the value of this variable. */ + + /* Check for special variables, directly referenced. */ + if (SPECIAL_VAR (name, want_indir)) + var_is_special++; + + /* Check for special expansion things, like the length of a parameter */ + if (*name == '#' && name[1]) + { + /* If we are not pointing at the character just after the + closing brace, then we haven't gotten all of the name. + Since it begins with a special character, this is a bad + substitution. Also check NAME for validity before trying + to go on. */ + if (string[sindex - 1] != RBRACE || (valid_length_expression (name) == 0)) + { + temp = (char *)NULL; + goto bad_substitution; + } + + number = parameter_brace_expand_length (name); + free (name); + + *indexp = sindex; + return ((number < 0) ? &expand_param_error : itos (number)); + } + + /* ${@} is identical to $@. */ + if (name[0] == '@' && name[1] == '\0') + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + + if (contains_dollar_at) + *contains_dollar_at = 1; + } + + /* Process ${!PREFIX*} expansion. */ + if (want_indir && string[sindex - 1] == RBRACE && + (string[sindex - 2] == '*' || string[sindex - 2] == '@') && + legal_variable_starter ((unsigned char) name[1])) + { + char **x; + WORD_LIST *xlist; + + temp1 = savestring (name + 1); + number = strlen (temp1); + temp1[number - 1] = '\0'; + x = all_variables_matching_prefix (temp1); + xlist = strvec_to_word_list (x, 0, 0); + if (string[sindex - 2] == '*') + temp = string_list_dollar_star (xlist); + else + { + temp = string_list_dollar_at (xlist, quoted); + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + } + free (x); + free (xlist); + free (temp1); + *indexp = sindex; + return (temp); + } + +#if defined (ARRAY_VARS) + /* Process ${!ARRAY[@]} and ${!ARRAY[*]} expansion. */ /* [ */ + if (want_indir && string[sindex - 1] == RBRACE && + string[sindex - 2] == ']' && valid_array_reference (name+1)) + { + char *x, *x1; + + temp1 = savestring (name + 1); + x = array_variable_name (temp1, &x1, (int *)0); /* [ */ + FREE (x); + if (ALL_ELEMENT_SUB (x1[0]) && x1[1] == ']') + { + temp = array_keys (temp1, quoted); + if (x1[0] == '@') + { + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + } + + free (temp1); + *indexp = sindex; + return (temp); + } + + free (temp1); + } +#endif /* ARRAY_VARS */ + + /* Make sure that NAME is valid before trying to go on. */ + if (valid_brace_expansion_word (want_indir ? name + 1 : name, + var_is_special) == 0) + { + temp = (char *)NULL; + goto bad_substitution; + } + + if (want_indir) + temp = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); + else + temp = parameter_brace_expand_word (name, var_is_special, quoted); + +#if defined (ARRAY_VARS) + if (valid_array_reference (name)) + chk_atstar (name, quoted, quoted_dollar_atp, contains_dollar_at); +#endif + + var_is_set = temp != (char *)0; + var_is_null = check_nullness && (var_is_set == 0 || *temp == 0); + + /* Get the rest of the stuff inside the braces. */ + if (c && c != RBRACE) + { + /* Extract the contents of the ${ ... } expansion + according to the Posix.2 rules. */ + value = extract_dollar_brace_string (string, &sindex, quoted, 0); + if (string[sindex] == RBRACE) + sindex++; + else + goto bad_substitution; + } + else + value = (char *)NULL; + + *indexp = sindex; + + /* If this is a substring spec, process it and add the result. */ + if (want_substring) + { + temp1 = parameter_brace_substring (name, temp, value, quoted); + FREE (name); + FREE (value); + FREE (temp); + return (temp1); + } + else if (want_patsub) + { + temp1 = parameter_brace_patsub (name, temp, value, quoted); + FREE (name); + FREE (value); + FREE (temp); + return (temp1); + } + + /* Do the right thing based on which character ended the variable name. */ + switch (c) + { + default: + case '\0': + bad_substitution: + report_error (_("%s: bad substitution"), string ? string : "??"); + FREE (value); + FREE (temp); + free (name); + return &expand_param_error; + + case RBRACE: + if (var_is_set == 0 && unbound_vars_is_error) + { + err_unboundvar (name); + FREE (value); + FREE (temp); + free (name); + last_command_exit_value = EXECUTION_FAILURE; + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } + break; + + case '#': /* ${param#[#]pattern} */ + case '%': /* ${param%[%]pattern} */ + if (value == 0 || *value == '\0' || temp == 0 || *temp == '\0') + { + FREE (value); + break; + } + temp1 = parameter_brace_remove_pattern (name, temp, value, c, quoted); + free (temp); + free (value); + temp = temp1; + break; + + case '-': + case '=': + case '?': + case '+': + if (var_is_set && var_is_null == 0) + { + /* If the operator is `+', we don't want the value of the named + variable for anything, just the value of the right hand side. */ + + if (c == '+') + { + /* XXX -- if we're double-quoted and the named variable is "$@", + we want to turn off any special handling of "$@" -- + we're not using it, so whatever is on the rhs applies. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 0; + if (contains_dollar_at) + *contains_dollar_at = 0; + + FREE (temp); + if (value) + { + temp = parameter_brace_expand_rhs (name, value, c, + quoted, + quoted_dollar_atp, + contains_dollar_at); + free (value); + } + else + temp = (char *)NULL; + } + else + { + FREE (value); + } + /* Otherwise do nothing; just use the value in TEMP. */ + } + else /* VAR not set or VAR is NULL. */ + { + FREE (temp); + temp = (char *)NULL; + if (c == '=' && var_is_special) + { + report_error (_("$%s: cannot assign in this way"), name); + free (name); + free (value); + return &expand_param_error; + } + else if (c == '?') + { + parameter_brace_expand_error (name, value); + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } + else if (c != '+') + { + /* XXX -- if we're double-quoted and the named variable is "$@", + we want to turn off any special handling of "$@" -- + we're not using it, so whatever is on the rhs applies. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && quoted_dollar_atp) + *quoted_dollar_atp = 0; + if (contains_dollar_at) + *contains_dollar_at = 0; + + temp = parameter_brace_expand_rhs (name, value, c, quoted, + quoted_dollar_atp, + contains_dollar_at); + } + free (value); + } + + break; + } + free (name); + return (temp); +} + +/* Expand a single ${xxx} expansion. The braces are optional. When + the braces are used, parameter_brace_expand() does the work, + possibly calling param_expand recursively. */ +static char * +param_expand (string, sindex, quoted, expanded_something, + contains_dollar_at, quoted_dollar_at_p, had_quoted_null_p, + pflags) + char *string; + int *sindex, quoted, *expanded_something, *contains_dollar_at; + int *quoted_dollar_at_p, *had_quoted_null_p, pflags; +{ + char *temp, *temp1, uerror[3]; + int zindex, t_index, expok; + unsigned char c; + intmax_t number; + SHELL_VAR *var; + WORD_LIST *list; + + zindex = *sindex; + c = string[++zindex]; + + temp = (char *)NULL; + + /* Do simple cases first. Switch on what follows '$'. */ + switch (c) + { + /* $0 .. $9? */ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + temp1 = dollar_vars[TODIGIT (c)]; + if (unbound_vars_is_error && temp1 == (char *)NULL) + { + uerror[0] = '$'; + uerror[1] = c; + uerror[2] = '\0'; + err_unboundvar (uerror); + last_command_exit_value = EXECUTION_FAILURE; + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } +#if 1 + if (temp1) + temp = (*temp1 && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + ? quote_string (temp1) + : quote_escapes (temp1); + else + temp = (char *)NULL; +#else + temp = temp1 ? quote_escapes (temp1) : (char *)NULL; +#endif + break; + + /* $$ -- pid of the invoking shell. */ + case '$': + temp = itos (dollar_dollar_pid); + break; + + /* $# -- number of positional parameters. */ + case '#': + temp = itos (number_of_args ()); + break; + + /* $? -- return value of the last synchronous command. */ + case '?': + temp = itos (last_command_exit_value); + break; + + /* $- -- flags supplied to the shell on invocation or by `set'. */ + case '-': + temp = which_set_flags (); + break; + + /* $! -- Pid of the last asynchronous command. */ + case '!': + /* If no asynchronous pids have been created, expand to nothing. + If `set -u' has been executed, and no async processes have + been created, this is an expansion error. */ + if (last_asynchronous_pid == NO_PID) + { + if (expanded_something) + *expanded_something = 0; + temp = (char *)NULL; + if (unbound_vars_is_error) + { + uerror[0] = '$'; + uerror[1] = c; + uerror[2] = '\0'; + err_unboundvar (uerror); + last_command_exit_value = EXECUTION_FAILURE; + return (interactive_shell ? &expand_param_error : &expand_param_fatal); + } + } + else + temp = itos (last_asynchronous_pid); + break; + + /* The only difference between this and $@ is when the arg is quoted. */ + case '*': /* `$*' */ + list = list_rest_of_args (); + + /* If there are no command-line arguments, this should just + disappear if there are other characters in the expansion, + even if it's quoted. */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && list == 0) + temp = (char *)NULL; + else if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + { + /* If we have "$*" we want to make a string of the positional + parameters, separated by the first character of $IFS, and + quote the whole string, including the separators. If IFS + is unset, the parameters are separated by ' '; if $IFS is + null, the parameters are concatenated. */ +#if 0 + temp = string_list_dollar_star (list); +#else + temp = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (list) : string_list (list); +#endif + temp1 = quote_string (temp); + free (temp); + temp = temp1; + } + else + { + /* If the $* is not quoted it is identical to $@ */ + temp = string_list_dollar_at (list, quoted); + if (expand_no_split_dollar_star == 0 && contains_dollar_at) + *contains_dollar_at = 1; + } + + dispose_words (list); + break; + + /* When we have "$@" what we want is "$1" "$2" "$3" ... This + means that we have to turn quoting off after we split into + the individually quoted arguments so that the final split + on the first character of $IFS is still done. */ + case '@': /* `$@' */ + list = list_rest_of_args (); + + /* We want to flag the fact that we saw this. We can't turn + off quoting entirely, because other characters in the + string might need it (consider "\"$@\""), but we need some + way to signal that the final split on the first character + of $IFS should be done, even though QUOTED is 1. */ + if (quoted_dollar_at_p && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + *quoted_dollar_at_p = 1; + if (contains_dollar_at) + *contains_dollar_at = 1; + + /* We want to separate the positional parameters with the first + character of $IFS in case $IFS is something other than a space. + We also want to make sure that splitting is done no matter what -- + according to POSIX.2, this expands to a list of the positional + parameters no matter what IFS is set to. */ + temp = string_list_dollar_at (list, quoted); + + dispose_words (list); + break; + + case LBRACE: + temp = parameter_brace_expand (string, &zindex, quoted, + quoted_dollar_at_p, + contains_dollar_at); + if (temp == &expand_param_error || temp == &expand_param_fatal) + return (temp); + + /* XXX */ + /* Quoted nulls should be removed if there is anything else + in the string. */ + /* Note that we saw the quoted null so we can add one back at + the end of this function if there are no other characters + in the string, discard TEMP, and go on. The exception to + this is when we have "${@}" and $1 is '', since $@ needs + special handling. */ + if (temp && QUOTED_NULL (temp)) + { + if (had_quoted_null_p) + *had_quoted_null_p = 1; + if (*quoted_dollar_at_p == 0) + { + free (temp); + temp = (char *)NULL; + } + + } + + goto return0; + + /* Do command or arithmetic substitution. */ + case LPAREN: + /* We have to extract the contents of this paren substitution. */ + t_index = zindex + 1; + temp = extract_command_subst (string, &t_index); + zindex = t_index; + + /* For Posix.2-style `$(( ))' arithmetic substitution, + extract the expression and pass it to the evaluator. */ + if (temp && *temp == LPAREN) + { + char *temp2; + temp1 = temp + 1; + temp2 = savestring (temp1); + t_index = strlen (temp2) - 1; + + if (temp2[t_index] != RPAREN) + { + free (temp2); + goto comsub; + } + + /* Cut off ending `)' */ + temp2[t_index] = '\0'; + + /* Expand variables found inside the expression. */ + temp1 = expand_string_if_necessary (temp2, Q_DOUBLE_QUOTES, expand_string); + free (temp2); + +arithsub: + /* No error messages. */ + this_command_name = (char *)NULL; + number = evalexp (temp1, &expok); + free (temp); + free (temp1); + if (expok == 0) + { + if (interactive_shell == 0 && posixly_correct) + { + last_command_exit_value = EXECUTION_FAILURE; + return (&expand_param_fatal); + } + else + return (&expand_param_error); + } + temp = itos (number); + break; + } + +comsub: + if (pflags & PF_NOCOMSUB) + /* we need zindex+1 because string[zindex] == RPAREN */ + temp1 = substring (string, *sindex, zindex+1); + else + temp1 = command_substitute (temp, quoted); + FREE (temp); + temp = temp1; + break; + + /* Do POSIX.2d9-style arithmetic substitution. This will probably go + away in a future bash release. */ + case '[': + /* Extract the contents of this arithmetic substitution. */ + t_index = zindex + 1; + temp = extract_arithmetic_subst (string, &t_index); + zindex = t_index; + + /* Do initial variable expansion. */ + temp1 = expand_string_if_necessary (temp, Q_DOUBLE_QUOTES, expand_string); + + goto arithsub; + + default: + /* Find the variable in VARIABLE_LIST. */ + temp = (char *)NULL; + + for (t_index = zindex; (c = string[zindex]) && legal_variable_char (c); zindex++) + ; + temp1 = (zindex > t_index) ? substring (string, t_index, zindex) : (char *)NULL; + + /* If this isn't a variable name, then just output the `$'. */ + if (temp1 == 0 || *temp1 == '\0') + { + FREE (temp1); + temp = (char *)xmalloc (2); + temp[0] = '$'; + temp[1] = '\0'; + if (expanded_something) + *expanded_something = 0; + goto return0; + } + + /* If the variable exists, return its value cell. */ + var = find_variable (temp1); + + if (var && invisible_p (var) == 0 && var_isset (var)) + { +#if defined (ARRAY_VARS) + if (array_p (var)) + { + temp = array_reference (array_cell (var), 0); + if (temp) + temp = (*temp && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + ? quote_string (temp) + : quote_escapes (temp); + else if (unbound_vars_is_error) + goto unbound_variable; + } + else +#endif + { + temp = value_cell (var); + + temp = (*temp && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) + ? quote_string (temp) + : quote_escapes (temp); + } + + free (temp1); + + goto return0; + } + + temp = (char *)NULL; + +unbound_variable: + if (unbound_vars_is_error) + err_unboundvar (temp1); + else + { + free (temp1); + goto return0; + } + + free (temp1); + last_command_exit_value = EXECUTION_FAILURE; + return ((unbound_vars_is_error && interactive_shell == 0) + ? &expand_param_fatal + : &expand_param_error); + } + + if (string[zindex]) + zindex++; + +return0: + *sindex = zindex; + return (temp); +} + +/* Make a word list which is the result of parameter and variable + expansion, command substitution, arithmetic substitution, and + quote removal of WORD. Return a pointer to a WORD_LIST which is + the result of the expansion. If WORD contains a null word, the + word list returned is also null. + + QUOTED contains flag values defined in shell.h. + + ISEXP is used to tell expand_word_internal that the word should be + treated as the result of an expansion. This has implications for + how IFS characters in the word are treated. + + CONTAINS_DOLLAR_AT and EXPANDED_SOMETHING are return values; when non-null + they point to an integer value which receives information about expansion. + CONTAINS_DOLLAR_AT gets non-zero if WORD contained "$@", else zero. + EXPANDED_SOMETHING get non-zero if WORD contained any parameter expansions, + else zero. + + This only does word splitting in the case of $@ expansion. In that + case, we split on ' '. */ + +/* Values for the local variable quoted_state. */ +#define UNQUOTED 0 +#define PARTIALLY_QUOTED 1 +#define WHOLLY_QUOTED 2 + +static WORD_LIST * +expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_something) + WORD_DESC *word; + int quoted, isexp; + int *contains_dollar_at; + int *expanded_something; +{ + WORD_LIST *list; + WORD_DESC *tword; + + /* The intermediate string that we build while expanding. */ + char *istring; + + /* The current size of the above object. */ + int istring_size; + + /* Index into ISTRING. */ + int istring_index; + + /* Temporary string storage. */ + char *temp, *temp1; + + /* The text of WORD. */ + register char *string; + + /* The size of STRING. */ + size_t string_size; + + /* The index into STRING. */ + int sindex; + + /* This gets 1 if we see a $@ while quoted. */ + int quoted_dollar_at; + + /* One of UNQUOTED, PARTIALLY_QUOTED, or WHOLLY_QUOTED, depending on + whether WORD contains no quoting characters, a partially quoted + string (e.g., "xx"ab), or is fully quoted (e.g., "xxab"). */ + int quoted_state; + + int had_quoted_null; + int has_dollar_at; + int tflag; + + register unsigned char c; /* Current character. */ + int t_index; /* For calls to string_extract_xxx. */ + + char twochars[2]; + + DECLARE_MBSTATE; + + istring = (char *)xmalloc (istring_size = DEFAULT_INITIAL_ARRAY_SIZE); + istring[istring_index = 0] = '\0'; + quoted_dollar_at = had_quoted_null = has_dollar_at = 0; + quoted_state = UNQUOTED; + + string = word->word; + if (string == 0) + goto finished_with_string; + string_size = strlen (string); + + if (contains_dollar_at) + *contains_dollar_at = 0; + + /* Begin the expansion. */ + + for (sindex = 0; ;) + { + c = string[sindex]; + + /* Case on toplevel character. */ + switch (c) + { + case '\0': + goto finished_with_string; + + case CTLESC: + sindex++; +#if HANDLE_MULTIBYTE + if (MB_CUR_MAX > 1 && string[sindex]) + { + SADD_MBQCHAR_BODY(temp, string, sindex, string_size); + } + else +#endif + { + temp = (char *)xmalloc (3); + temp[0] = CTLESC; + temp[1] = c = string[sindex]; + temp[2] = '\0'; + } + +dollar_add_string: + if (string[sindex]) + sindex++; + +add_string: + if (temp) + { + istring = sub_append_string (temp, istring, &istring_index, &istring_size); + temp = (char *)0; + } + + break; + +#if defined (PROCESS_SUBSTITUTION) + /* Process substitution. */ + case '<': + case '>': + { + if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || posixly_correct) + { + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + else + t_index = sindex + 1; /* skip past both '<' and LPAREN */ + + temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/ + sindex = t_index; + + /* If the process substitution specification is `<()', we want to + open the pipe for writing in the child and produce output; if + it is `>()', we want to open the pipe for reading in the child + and consume input. */ + temp = temp1 ? process_substitute (temp1, (c == '>')) : (char *)0; + + FREE (temp1); + + goto dollar_add_string; + } +#endif /* PROCESS_SUBSTITUTION */ + + case '$': + if (expanded_something) + *expanded_something = 1; + + has_dollar_at = 0; + temp = param_expand (string, &sindex, quoted, expanded_something, + &has_dollar_at, "ed_dollar_at, + &had_quoted_null, + (word->flags & W_NOCOMSUB) ? PF_NOCOMSUB : 0); + + if (temp == &expand_param_error || temp == &expand_param_fatal) + { + free (string); + free (istring); + return ((temp == &expand_param_error) ? &expand_word_error + : &expand_word_fatal); + } + if (contains_dollar_at && has_dollar_at) + *contains_dollar_at = 1; + goto add_string; + break; + + case '`': /* Backquoted command substitution. */ + { + t_index = sindex++; + + if (expanded_something) + *expanded_something = 1; + + temp = string_extract (string, &sindex, "`", 0); + if (word->flags & W_NOCOMSUB) + /* sindex + 1 because string[sindex] == '`' */ + temp1 = substring (string, t_index, sindex + 1); + else + { + de_backslash (temp); + temp1 = command_substitute (temp, quoted); + } + FREE (temp); + temp = temp1; + goto dollar_add_string; + } + + case '\\': + if (string[sindex + 1] == '\n') + { + sindex += 2; + continue; + } + + c = string[++sindex]; + + if (quoted & Q_HERE_DOCUMENT) + tflag = CBSHDOC; + else if (quoted & Q_DOUBLE_QUOTES) + tflag = CBSDQUOTE; + else + tflag = 0; + + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && ((sh_syntaxtab[c] & tflag) == 0)) + { + SCOPY_CHAR_I (twochars, '\\', c, string, sindex, string_size); + } + else if (c == 0) + { + c = CTLNUL; + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + else + { + SCOPY_CHAR_I (twochars, CTLESC, c, string, sindex, string_size); + } + + sindex++; +add_twochars: + /* BEFORE jumping here, we need to increment sindex if appropriate */ + RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, + DEFAULT_ARRAY_SIZE); + istring[istring_index++] = twochars[0]; + istring[istring_index++] = twochars[1]; + istring[istring_index] = '\0'; + + break; + + case '"': +#if 0 + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) +#else + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) +#endif + goto add_character; + + t_index = ++sindex; + temp = string_extract_double_quoted (string, &sindex, 0); + + /* If the quotes surrounded the entire string, then the + whole word was quoted. */ + quoted_state = (t_index == 1 && string[sindex] == '\0') + ? WHOLLY_QUOTED + : PARTIALLY_QUOTED; + + if (temp && *temp) + { + tword = make_word (temp); /* XXX */ + free (temp); + temp = (char *)NULL; + + has_dollar_at = 0; + list = expand_word_internal (tword, Q_DOUBLE_QUOTES, 0, &has_dollar_at, (int *)NULL); + + if (list == &expand_word_error || list == &expand_word_fatal) + { + free (istring); + free (string); + /* expand_word_internal has already freed temp_word->word + for us because of the way it prints error messages. */ + tword->word = (char *)NULL; + dispose_word (tword); + return list; + } + + dispose_word (tword); + + /* "$@" (a double-quoted dollar-at) expands into nothing, + not even a NULL word, when there are no positional + parameters. */ + if (list == 0 && has_dollar_at) + { + quoted_dollar_at++; + break; + } + + /* If we get "$@", we know we have expanded something, so we + need to remember it for the final split on $IFS. This is + a special case; it's the only case where a quoted string + can expand into more than one word. It's going to come back + from the above call to expand_word_internal as a list with + a single word, in which all characters are quoted and + separated by blanks. What we want to do is to turn it back + into a list for the next piece of code. */ + if (list) + dequote_list (list); + + if (has_dollar_at) + { + quoted_dollar_at++; + if (contains_dollar_at) + *contains_dollar_at = 1; + if (expanded_something) + *expanded_something = 1; + } + } + else + { + /* What we have is "". This is a minor optimization. */ + FREE (temp); + list = (WORD_LIST *)NULL; + } + + /* The code above *might* return a list (consider the case of "$@", + where it returns "$1", "$2", etc.). We can't throw away the + rest of the list, and we have to make sure each word gets added + as quoted. We test on tresult->next: if it is non-NULL, we + quote the whole list, save it to a string with string_list, and + add that string. We don't need to quote the results of this + (and it would be wrong, since that would quote the separators + as well), so we go directly to add_string. */ + if (list) + { + if (list->next) + { + /* Testing quoted_dollar_at makes sure that "$@" is + split correctly when $IFS does not contain a space. */ + temp = quoted_dollar_at + ? string_list_dollar_at (list, Q_DOUBLE_QUOTES) + : string_list (quote_list (list)); + dispose_words (list); + goto add_string; + } + else + { + temp = savestring (list->word->word); + dispose_words (list); +#if 1 + /* If the string is not a quoted null string, we want + to remove any embedded unquoted CTLNUL characters. + We do not want to turn quoted null strings back into + the empty string, though. We do this because we + want to remove any quoted nulls from expansions that + contain other characters. For example, if we have + x"$*"y or "x$*y" and there are no positional parameters, + the $* should expand into nothing. */ + /* HOWEVER, this fails if the string contains a literal + CTLNUL or CTLNUL is contained in the (non-null) expansion + of some variable. I'm not sure what to do about this + yet. There has to be some way to indicate the difference + between the two. An auxiliary data structure might be + necessary. */ + if (QUOTED_NULL (temp) == 0) + remove_quoted_nulls (temp); /* XXX */ +#endif + } + } + else + temp = (char *)NULL; + + /* We do not want to add quoted nulls to strings that are only + partially quoted; we can throw them away. */ + if (temp == 0 && quoted_state == PARTIALLY_QUOTED) + continue; + + add_quoted_string: + + if (temp) + { + temp1 = temp; + temp = quote_string (temp); + free (temp1); + goto add_string; + } + else + { + /* Add NULL arg. */ + c = CTLNUL; + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + + /* break; */ + + case '\'': +#if 0 + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE)) +#else + if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) +#endif + goto add_character; + + t_index = ++sindex; + temp = string_extract_single_quoted (string, &sindex); + + /* If the entire STRING was surrounded by single quotes, + then the string is wholly quoted. */ + quoted_state = (t_index == 1 && string[sindex] == '\0') + ? WHOLLY_QUOTED + : PARTIALLY_QUOTED; + + /* If all we had was '', it is a null expansion. */ + if (*temp == '\0') + { + free (temp); + temp = (char *)NULL; + } + else + remove_quoted_escapes (temp); /* ??? */ + + /* We do not want to add quoted nulls to strings that are only + partially quoted; such nulls are discarded. */ + if (temp == 0 && (quoted_state == PARTIALLY_QUOTED)) + continue; + + /* If we have a quoted null expansion, add a quoted NULL to istring. */ + if (temp == 0) + { + c = CTLNUL; + sindex--; /* add_character: label increments sindex */ + goto add_character; + } + else + goto add_quoted_string; + + /* break; */ + + default: + /* This is the fix for " $@ " */ + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (isexp == 0 && isifs (c))) + { + if (string[sindex]) /* from old goto dollar_add_string */ + sindex++; + if (c == 0) + { + c = CTLNUL; + goto add_character; + } + else + { +#if HANDLE_MULTIBYTE + if (MB_CUR_MAX > 1) + sindex--; + + if (MB_CUR_MAX > 1) + { + SADD_MBQCHAR_BODY(temp, string, sindex, string_size); + } + else +#endif + { + twochars[0] = CTLESC; + twochars[1] = c; + goto add_twochars; + } + } + } + + SADD_MBCHAR (temp, string, sindex, string_size); + + add_character: + RESIZE_MALLOCED_BUFFER (istring, istring_index, 1, istring_size, + DEFAULT_ARRAY_SIZE); + istring[istring_index++] = c; + istring[istring_index] = '\0'; + + /* Next character. */ + sindex++; + } + } + +finished_with_string: + /* OK, we're ready to return. If we have a quoted string, and + quoted_dollar_at is not set, we do no splitting at all; otherwise + we split on ' '. The routines that call this will handle what to + do if nothing has been expanded. */ + + /* Partially and wholly quoted strings which expand to the empty + string are retained as an empty arguments. Unquoted strings + which expand to the empty string are discarded. The single + exception is the case of expanding "$@" when there are no + positional parameters. In that case, we discard the expansion. */ + + /* Because of how the code that handles "" and '' in partially + quoted strings works, we need to make ISTRING into a QUOTED_NULL + if we saw quoting characters, but the expansion was empty. + "" and '' are tossed away before we get to this point when + processing partially quoted strings. This makes "" and $xxx"" + equivalent when xxx is unset. We also look to see whether we + saw a quoted null from a ${} expansion and add one back if we + need to. */ + + /* If we expand to nothing and there were no single or double quotes + in the word, we throw it away. Otherwise, we return a NULL word. + The single exception is for $@ surrounded by double quotes when + there are no positional parameters. In that case, we also throw + the word away. */ + + if (*istring == '\0') + { + if (quoted_dollar_at == 0 && (had_quoted_null || quoted_state == PARTIALLY_QUOTED)) + { + istring[0] = CTLNUL; + istring[1] = '\0'; + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + tword->flags |= W_QUOTED; + } + /* According to sh, ksh, and Posix.2, if a word expands into nothing + and a double-quoted "$@" appears anywhere in it, then the entire + word is removed. */ + else if (quoted_state == UNQUOTED || quoted_dollar_at) + list = (WORD_LIST *)NULL; +#if 0 + else + { + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + tword->flags |= W_QUOTED; + } +#else + else + list = (WORD_LIST *)NULL; +#endif + } + else if (word->flags & W_NOSPLIT) + { + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if (word->flags & W_ASSIGNMENT) + tword->flags |= W_ASSIGNMENT; /* XXX */ + if (word->flags & W_NOGLOB) + tword->flags |= W_NOGLOB; /* XXX */ + if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) + tword->flags |= W_QUOTED; + } + else + { + char *ifs_chars; + + ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL; + + /* If we have $@, we need to split the results no matter what. If + IFS is unset or NULL, string_list_dollar_at has separated the + positional parameters with a space, so we split on space (we have + set ifs_chars to " \t\n" above if ifs is unset). If IFS is set, + string_list_dollar_at has separated the positional parameters + with the first character of $IFS, so we split on $IFS. */ + if (has_dollar_at && ifs_chars) + list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); + else + { + tword = make_bare_word (istring); + list = make_word_list (tword, (WORD_LIST *)NULL); + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED)) + tword->flags |= W_QUOTED; + if (word->flags & W_ASSIGNMENT) + tword->flags |= W_ASSIGNMENT; + if (word->flags & W_NOGLOB) + tword->flags |= W_NOGLOB; + } + } + + free (istring); + return (list); +} + +/* **************************************************************** */ +/* */ +/* Functions for Quote Removal */ +/* */ +/* **************************************************************** */ + +/* Perform quote removal on STRING. If QUOTED > 0, assume we are obeying the + backslash quoting rules for within double quotes or a here document. */ +char * +string_quote_removal (string, quoted) + char *string; + int quoted; +{ + size_t slen; + char *r, *result_string, *temp, *send; + int sindex, tindex, dquote; + unsigned char c; + DECLARE_MBSTATE; + + /* The result can be no longer than the original string. */ + slen = strlen (string); + send = string + slen; + + r = result_string = (char *)xmalloc (slen + 1); + + for (dquote = sindex = 0; c = string[sindex];) + { + switch (c) + { + case '\\': + c = string[++sindex]; + if (((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || dquote) && (sh_syntaxtab[c] & CBSDQUOTE) == 0) + *r++ = '\\'; + /* FALLTHROUGH */ + + default: + SCOPY_CHAR_M (r, string, send, sindex); + break; + + case '\'': + if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || dquote) + { + *r++ = c; + sindex++; + break; + } + tindex = sindex + 1; + temp = string_extract_single_quoted (string, &tindex); + if (temp) + { + strcpy (r, temp); + r += strlen (r); + free (temp); + } + sindex = tindex; + break; + + case '"': + dquote = 1 - dquote; + sindex++; + break; + } + } + *r = '\0'; + return (result_string); +} + +#if 0 +/* UNUSED */ +/* Perform quote removal on word WORD. This allocates and returns a new + WORD_DESC *. */ +WORD_DESC * +word_quote_removal (word, quoted) + WORD_DESC *word; + int quoted; +{ + WORD_DESC *w; + char *t; + + t = string_quote_removal (word->word, quoted); + w = make_bare_word (t); + free (t); + return (w); +} + +/* Perform quote removal on all words in LIST. If QUOTED is non-zero, + the members of the list are treated as if they are surrounded by + double quotes. Return a new list, or NULL if LIST is NULL. */ +WORD_LIST * +word_list_quote_removal (list, quoted) + WORD_LIST *list; + int quoted; +{ + WORD_LIST *result, *t, *tresult; + + for (t = list, result = (WORD_LIST *)NULL; t; t = t->next) + { + tresult = make_word_list (word_quote_removal (t->word, quoted), (WORD_LIST *)NULL); + result = (WORD_LIST *) list_append (result, tresult); + } + return (result); +} +#endif + +/******************************************* + * * + * Functions to perform word splitting * + * * + *******************************************/ + +void +setifs (v) + SHELL_VAR *v; +{ + char *t; + unsigned char uc; + + ifs_var = v; + ifs_value = v ? value_cell (v) : " \t\n"; + + /* Should really merge ifs_cmap with sh_syntaxtab. */ + memset (ifs_cmap, '\0', sizeof (ifs_cmap)); + for (t = ifs_value ; t && *t; t++) + { + uc = *t; + ifs_cmap[uc] = 1; + } + + ifs_firstc = ifs_value ? *ifs_value : 0; +} + +char * +getifs () +{ + return ifs_value; +} + +/* This splits a single word into a WORD LIST on $IFS, but only if the word + is not quoted. list_string () performs quote removal for us, even if we + don't do any splitting. */ +WORD_LIST * +word_split (w, ifs_chars) + WORD_DESC *w; + char *ifs_chars; +{ + WORD_LIST *result; + + if (w) + { + char *xifs; + + xifs = ((w->flags & W_QUOTED) || ifs_chars == 0) ? "" : ifs_chars; + result = list_string (w->word, xifs, w->flags & W_QUOTED); + } + else + result = (WORD_LIST *)NULL; + + return (result); +} + +/* Perform word splitting on LIST and return the RESULT. It is possible + to return (WORD_LIST *)NULL. */ +static WORD_LIST * +word_list_split (list) + WORD_LIST *list; +{ + WORD_LIST *result, *t, *tresult; + + for (t = list, result = (WORD_LIST *)NULL; t; t = t->next) + { + tresult = word_split (t->word, ifs_value); + result = (WORD_LIST *) list_append (result, tresult); + } + return (result); +} + +/************************************************** + * * + * Functions to expand an entire WORD_LIST * + * * + **************************************************/ + +/* Do any word-expansion-specific cleanup and jump to top_level */ +static void +exp_jump_to_top_level (v) + int v; +{ + /* Cleanup code goes here. */ + expand_no_split_dollar_star = 0; /* XXX */ + expanding_redir = 0; + + jump_to_top_level (v); +} + +/* Put NLIST (which is a WORD_LIST * of only one element) at the front of + ELIST, and set ELIST to the new list. */ +#define PREPEND_LIST(nlist, elist) \ + do { nlist->next = elist; elist = nlist; } while (0) + +/* Separate out any initial variable assignments from TLIST. If set -k has + been executed, remove all assignment statements from TLIST. Initial + variable assignments and other environment assignments are placed + on SUBST_ASSIGN_VARLIST. */ +static WORD_LIST * +separate_out_assignments (tlist) + WORD_LIST *tlist; +{ + register WORD_LIST *vp, *lp; + + if (!tlist) + return ((WORD_LIST *)NULL); + + if (subst_assign_varlist) + dispose_words (subst_assign_varlist); /* Clean up after previous error */ + + subst_assign_varlist = (WORD_LIST *)NULL; + vp = lp = tlist; + + /* Separate out variable assignments at the start of the command. + Loop invariant: vp->next == lp + Loop postcondition: + lp = list of words left after assignment statements skipped + tlist = original list of words + */ + while (lp && (lp->word->flags & W_ASSIGNMENT)) + { + vp = lp; + lp = lp->next; + } + + /* If lp != tlist, we have some initial assignment statements. + We make SUBST_ASSIGN_VARLIST point to the list of assignment + words and TLIST point to the remaining words. */ + if (lp != tlist) + { + subst_assign_varlist = tlist; + /* ASSERT(vp->next == lp); */ + vp->next = (WORD_LIST *)NULL; /* terminate variable list */ + tlist = lp; /* remainder of word list */ + } + + /* vp == end of variable list */ + /* tlist == remainder of original word list without variable assignments */ + if (!tlist) + /* All the words in tlist were assignment statements */ + return ((WORD_LIST *)NULL); + + /* ASSERT(tlist != NULL); */ + /* ASSERT((tlist->word->flags & W_ASSIGNMENT) == 0); */ + + /* If the -k option is in effect, we need to go through the remaining + words, separate out the assignment words, and place them on + SUBST_ASSIGN_VARLIST. */ + if (place_keywords_in_env) + { + WORD_LIST *tp; /* tp == running pointer into tlist */ + + tp = tlist; + lp = tlist->next; + + /* Loop Invariant: tp->next == lp */ + /* Loop postcondition: tlist == word list without assignment statements */ + while (lp) + { + if (lp->word->flags & W_ASSIGNMENT) + { + /* Found an assignment statement, add this word to end of + subst_assign_varlist (vp). */ + if (!subst_assign_varlist) + subst_assign_varlist = vp = lp; + else + { + vp->next = lp; + vp = lp; + } + + /* Remove the word pointed to by LP from TLIST. */ + tp->next = lp->next; + /* ASSERT(vp == lp); */ + lp->next = (WORD_LIST *)NULL; + lp = tp->next; + } + else + { + tp = lp; + lp = lp->next; + } + } + } + return (tlist); +} + +#define WEXP_VARASSIGN 0x001 +#define WEXP_BRACEEXP 0x002 +#define WEXP_TILDEEXP 0x004 +#define WEXP_PARAMEXP 0x008 +#define WEXP_PATHEXP 0x010 + +/* All of the expansions, including variable assignments at the start of + the list. */ +#define WEXP_ALL (WEXP_VARASSIGN|WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP|WEXP_PATHEXP) + +/* All of the expansions except variable assignments at the start of + the list. */ +#define WEXP_NOVARS (WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP|WEXP_PATHEXP) + +/* All of the `shell expansions': brace expansion, tilde expansion, parameter + expansion, command substitution, arithmetic expansion, word splitting, and + quote removal. */ +#define WEXP_SHELLEXP (WEXP_BRACEEXP|WEXP_TILDEEXP|WEXP_PARAMEXP) + +/* Take the list of words in LIST and do the various substitutions. Return + a new list of words which is the expanded list, and without things like + variable assignments. */ + +WORD_LIST * +expand_words (list) + WORD_LIST *list; +{ + return (expand_word_list_internal (list, WEXP_ALL)); +} + +/* Same as expand_words (), but doesn't hack variable or environment + variables. */ +WORD_LIST * +expand_words_no_vars (list) + WORD_LIST *list; +{ + return (expand_word_list_internal (list, WEXP_NOVARS)); +} + +WORD_LIST * +expand_words_shellexp (list) + WORD_LIST *list; +{ + return (expand_word_list_internal (list, WEXP_SHELLEXP)); +} + +static WORD_LIST * +glob_expand_word_list (tlist, eflags) + WORD_LIST *tlist; + int eflags; +{ + char **glob_array, *temp_string; + register int glob_index; + WORD_LIST *glob_list, *output_list, *disposables, *next; + WORD_DESC *tword; + + output_list = disposables = (WORD_LIST *)NULL; + glob_array = (char **)NULL; + while (tlist) + { + /* For each word, either globbing is attempted or the word is + added to orig_list. If globbing succeeds, the results are + added to orig_list and the word (tlist) is added to the list + of disposable words. If globbing fails and failed glob + expansions are left unchanged (the shell default), the + original word is added to orig_list. If globbing fails and + failed glob expansions are removed, the original word is + added to the list of disposable words. orig_list ends up + in reverse order and requires a call to REVERSE_LIST to + be set right. After all words are examined, the disposable + words are freed. */ + next = tlist->next; + + /* If the word isn't an assignment and contains an unquoted + pattern matching character, then glob it. */ + if ((tlist->word->flags & W_NOGLOB) == 0 && + unquoted_glob_pattern_p (tlist->word->word)) + { + glob_array = shell_glob_filename (tlist->word->word); + + /* Handle error cases. + I don't think we should report errors like "No such file + or directory". However, I would like to report errors + like "Read failed". */ + + if (glob_array == 0 || GLOB_FAILED (glob_array)) + { + glob_array = (char **)xmalloc (sizeof (char *)); + glob_array[0] = (char *)NULL; + } + + /* Dequote the current word in case we have to use it. */ + if (glob_array[0] == NULL) + { + temp_string = dequote_string (tlist->word->word); + free (tlist->word->word); + tlist->word->word = temp_string; + } + + /* Make the array into a word list. */ + glob_list = (WORD_LIST *)NULL; + for (glob_index = 0; glob_array[glob_index]; glob_index++) + { + tword = make_bare_word (glob_array[glob_index]); + tword->flags |= W_GLOBEXP; /* XXX */ + glob_list = make_word_list (tword, glob_list); + } + + if (glob_list) + { + output_list = (WORD_LIST *)list_append (glob_list, output_list); + PREPEND_LIST (tlist, disposables); + } + else if (fail_glob_expansion != 0) + { + report_error (_("no match: %s"), tlist->word->word); + jump_to_top_level (DISCARD); + } + else if (allow_null_glob_expansion == 0) + { + /* Failed glob expressions are left unchanged. */ + PREPEND_LIST (tlist, output_list); + } + else + { + /* Failed glob expressions are removed. */ + PREPEND_LIST (tlist, disposables); + } + } + else + { + /* Dequote the string. */ + temp_string = dequote_string (tlist->word->word); + free (tlist->word->word); + tlist->word->word = temp_string; + PREPEND_LIST (tlist, output_list); + } + + strvec_dispose (glob_array); + glob_array = (char **)NULL; + + tlist = next; + } + + if (disposables) + dispose_words (disposables); + + if (output_list) + output_list = REVERSE_LIST (output_list, WORD_LIST *); + + return (output_list); +} + +#if defined (BRACE_EXPANSION) +static WORD_LIST * +brace_expand_word_list (tlist, eflags) + WORD_LIST *tlist; + int eflags; +{ + register char **expansions; + char *temp_string; + WORD_LIST *disposables, *output_list, *next; + WORD_DESC *w; + int eindex; + + for (disposables = output_list = (WORD_LIST *)NULL; tlist; tlist = next) + { + next = tlist->next; + + /* Only do brace expansion if the word has a brace character. If + not, just add the word list element to BRACES and continue. In + the common case, at least when running shell scripts, this will + degenerate to a bunch of calls to `xstrchr', and then what is + basically a reversal of TLIST into BRACES, which is corrected + by a call to REVERSE_LIST () on BRACES when the end of TLIST + is reached. */ + if (xstrchr (tlist->word->word, LBRACE)) + { + expansions = brace_expand (tlist->word->word); + + for (eindex = 0; temp_string = expansions[eindex]; eindex++) + { + w = make_word (temp_string); + /* If brace expansion didn't change the word, preserve + the flags. We may want to preserve the flags + unconditionally someday -- XXX */ + if (STREQ (temp_string, tlist->word->word)) + w->flags = tlist->word->flags; + output_list = make_word_list (w, output_list); + free (expansions[eindex]); + } + free (expansions); + + /* Add TLIST to the list of words to be freed after brace + expansion has been performed. */ + PREPEND_LIST (tlist, disposables); + } + else + PREPEND_LIST (tlist, output_list); + } + + if (disposables) + dispose_words (disposables); + + if (output_list) + output_list = REVERSE_LIST (output_list, WORD_LIST *); + + return (output_list); +} +#endif + +static WORD_LIST * +shell_expand_word_list (tlist, eflags) + WORD_LIST *tlist; + int eflags; +{ + WORD_LIST *expanded, *orig_list, *new_list, *next, *temp_list; + int expanded_something, has_dollar_at; + char *temp_string; + + /* We do tilde expansion all the time. This is what 1003.2 says. */ + new_list = (WORD_LIST *)NULL; + for (orig_list = tlist; tlist; tlist = next) + { + temp_string = tlist->word->word; + + next = tlist->next; + + /* Posix.2 section 3.6.1 says that tildes following `=' in words + which are not assignment statements are not expanded. If the + shell isn't in posix mode, though, we perform tilde expansion + on `likely candidate' unquoted assignment statements (flags + include W_ASSIGNMENT but not W_QUOTED). A likely candidate + contains an unquoted :~ or =~. Something to think about: we + now have a flag that says to perform tilde expansion on arguments + to `assignment builtins' like declare and export that look like + assignment statements. We now do tilde expansion on such words + even in POSIX mode. */ + if (((tlist->word->flags & (W_ASSIGNMENT|W_QUOTED)) == W_ASSIGNMENT) && + (posixly_correct == 0 || (tlist->word->flags & W_TILDEEXP)) && + (unquoted_substring ("=~", temp_string) || unquoted_substring (":~", temp_string))) + { + tlist->word->word = bash_tilde_expand (temp_string, 1); + free (temp_string); + } + else if (temp_string[0] == '~') + { + tlist->word->word = bash_tilde_expand (temp_string, 0); + free (temp_string); + } + + expanded_something = 0; + expanded = expand_word_internal + (tlist->word, 0, 0, &has_dollar_at, &expanded_something); + + if (expanded == &expand_word_error || expanded == &expand_word_fatal) + { + /* By convention, each time this error is returned, + tlist->word->word has already been freed. */ + tlist->word->word = (char *)NULL; + + /* Dispose our copy of the original list. */ + dispose_words (orig_list); + /* Dispose the new list we're building. */ + dispose_words (new_list); + + last_command_exit_value = EXECUTION_FAILURE; + if (expanded == &expand_word_error) + exp_jump_to_top_level (DISCARD); + else + exp_jump_to_top_level (FORCE_EOF); + } + + /* Don't split words marked W_NOSPLIT. */ + if (expanded_something && (tlist->word->flags & W_NOSPLIT) == 0) + { + temp_list = word_list_split (expanded); + dispose_words (expanded); + } + else + { + /* If no parameter expansion, command substitution, process + substitution, or arithmetic substitution took place, then + do not do word splitting. We still have to remove quoted + null characters from the result. */ + word_list_remove_quoted_nulls (expanded); + temp_list = expanded; + } + + expanded = REVERSE_LIST (temp_list, WORD_LIST *); + new_list = (WORD_LIST *)list_append (expanded, new_list); + } + + if (orig_list) + dispose_words (orig_list); + + if (new_list) + new_list = REVERSE_LIST (new_list, WORD_LIST *); + + return (new_list); +} + +/* The workhorse for expand_words () and expand_words_no_vars (). + First arg is LIST, a WORD_LIST of words. + Second arg EFLAGS is a flags word controlling which expansions are + performed. + + This does all of the substitutions: brace expansion, tilde expansion, + parameter expansion, command substitution, arithmetic expansion, + process substitution, word splitting, and pathname expansion, according + to the bits set in EFLAGS. Words with the W_QUOTED or W_NOSPLIT bits + set, or for which no expansion is done, do not undergo word splitting. + Words with the W_NOGLOB bit set do not undergo pathname expansion. */ +static WORD_LIST * +expand_word_list_internal (list, eflags) + WORD_LIST *list; + int eflags; +{ + WORD_LIST *new_list, *temp_list; + int tint; + + if (list == 0) + return ((WORD_LIST *)NULL); + + garglist = new_list = copy_word_list (list); + if (eflags & WEXP_VARASSIGN) + { + garglist = new_list = separate_out_assignments (new_list); + if (new_list == 0) + { + if (subst_assign_varlist) + { + /* All the words were variable assignments, so they are placed + into the shell's environment. */ + for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next) + { + this_command_name = (char *)NULL; /* no arithmetic errors */ + tint = do_assignment (temp_list->word->word); + /* Variable assignment errors in non-interactive shells + running in Posix.2 mode cause the shell to exit. */ + if (tint == 0) + { + last_command_exit_value = EXECUTION_FAILURE; + if (interactive_shell == 0 && posixly_correct) + exp_jump_to_top_level (FORCE_EOF); + else + exp_jump_to_top_level (DISCARD); + } + } + dispose_words (subst_assign_varlist); + subst_assign_varlist = (WORD_LIST *)NULL; + } + return ((WORD_LIST *)NULL); + } + } + + /* Begin expanding the words that remain. The expansions take place on + things that aren't really variable assignments. */ + +#if defined (BRACE_EXPANSION) + /* Do brace expansion on this word if there are any brace characters + in the string. */ + if ((eflags & WEXP_BRACEEXP) && brace_expansion && new_list) + new_list = brace_expand_word_list (new_list, eflags); +#endif /* BRACE_EXPANSION */ + + /* Perform the `normal' shell expansions: tilde expansion, parameter and + variable substitution, command substitution, arithmetic expansion, + and word splitting. */ + new_list = shell_expand_word_list (new_list, eflags); + + /* Okay, we're almost done. Now let's just do some filename + globbing. */ + if (new_list) + { + if ((eflags & WEXP_PATHEXP) && disallow_filename_globbing == 0) + /* Glob expand the word list unless globbing has been disabled. */ + new_list = glob_expand_word_list (new_list, eflags); + else + /* Dequote the words, because we're not performing globbing. */ + new_list = dequote_list (new_list); + } + + if ((eflags & WEXP_VARASSIGN) && subst_assign_varlist) + { + sh_assign_func_t *assign_func; + + /* If the remainder of the words expand to nothing, Posix.2 requires + that the variable and environment assignments affect the shell's + environment. */ + assign_func = new_list ? assign_in_env : do_assignment; + + for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next) + { + this_command_name = (char *)NULL; + tint = (*assign_func) (temp_list->word->word); + /* Variable assignment errors in non-interactive shells running + in Posix.2 mode cause the shell to exit. */ + if (tint == 0 && assign_func == do_assignment) + { + last_command_exit_value = EXECUTION_FAILURE; + if (interactive_shell == 0 && posixly_correct) + exp_jump_to_top_level (FORCE_EOF); + else + exp_jump_to_top_level (DISCARD); + } + } + + dispose_words (subst_assign_varlist); + subst_assign_varlist = (WORD_LIST *)NULL; + } + +#if 0 + tint = list_length (new_list) + 1; + RESIZE_MALLOCED_BUFFER (glob_argv_flags, 0, tint, glob_argv_flags_size, 16); + for (tint = 0, temp_list = new_list; temp_list; temp_list = temp_list->next) + glob_argv_flags[tint++] = (temp_list->word->flags & W_GLOBEXP) ? '1' : '0'; + glob_argv_flags[tint] = '\0'; +#endif + + return (new_list); +} diff --git a/support/mkconffiles b/support/mkconffiles index ec52614d..ec52614d 100755..100644 --- a/support/mkconffiles +++ b/support/mkconffiles diff --git a/support/mkversion.sh b/support/mkversion.sh index a42eb780..a42eb780 100755..100644 --- a/support/mkversion.sh +++ b/support/mkversion.sh diff --git a/support/rlvers.sh b/support/rlvers.sh index b3de8feb..b3de8feb 100755..100644 --- a/support/rlvers.sh +++ b/support/rlvers.sh diff --git a/tests/? b/tests/? deleted file mode 100644 index 857f13ad..00000000 --- a/tests/? +++ /dev/null @@ -1 +0,0 @@ -$ diff --git a/tests/cprint.right.save1 b/tests/cprint.right.save1 new file mode 100644 index 00000000..6b711b8c --- /dev/null +++ b/tests/cprint.right.save1 @@ -0,0 +1,72 @@ +tf is a function +tf () +{ + echo this is ${0##*/} >/dev/null; + echo a | cat - >/dev/null; + test -f ${0##*/} && echo ${0##*/} is a regular file; + test -d ${0##*/} || echo ${0##*/} is not a directory; + echo a; + echo b; + echo c; + echo background >/dev/null & ( exit 1 ); + echo $?; + { + echo a + }; + i=0; + while (( " i < 3 " )); do + test -r /dev/fd/$i; + i=$(( i + 1 )); + done; + [[ -r /dev/fd/0 && -w /dev/fd/1 ]] || echo oops >/dev/null; + for name in $( echo 1 2 3 ); + do + test -r /dev/fd/$name; + done; + if [[ -r /dev/fd/0 && -w /dev/fd/1 ]]; then + echo ok >/dev/null; + else + if (( " 7 > 40 " )); then + echo oops; + else + echo done; + fi; + fi >/dev/null; + case $PATH in + *$PWD*) + echo \$PWD in \$PATH + ;; + *) + echo \$PWD not in \$PATH + ;; + esac >/dev/null; + while false; do + echo z; + done >/dev/null; + until true; do + echo z; + done >/dev/null; + echo \&\|'()' \{ echo abcde \; \}; + eval fu\%nc'()' \{ echo abcde \; \}; + type fu\%nc +} +tf2 is a function +tf2 () +{ + ( { + time -p echo a | cat - >/dev/null + } ) 2>&1 +} +cprint.tests is a regular file +cprint.tests is not a directory +a +b +c +1 +a +&|() { echo abcde ; } +fu%nc is a function +fu%nc () +{ + echo abcde +} diff --git a/tests/history.tests.save b/tests/history.tests.save new file mode 100644 index 00000000..4a218c30 --- /dev/null +++ b/tests/history.tests.save @@ -0,0 +1,97 @@ +trap 'rm /tmp/newhistory' 0 + +# bad options +history -x +# cannot use -r and -w at the same time +history -r -w /dev/null + +# bad option +fc -v + +# all of these should result in an empty history list +history -c +history -r /dev/null +history -n /dev/null +history -c + +HISTFILE=history.list +HISTCONTROL=ignoreboth +HISTIGNORE='&:history*:fc*' +HISTSIZE=32 + +shopt -s cmdhist +set -o history + +history + +fc -l +fc -nl + +fc -lr +fc -nlr + +history -s "echo line for history" +history + +history -p '!!' + +fc -nl + +HISTFILE=/tmp/newhistory +history -a +echo displaying \$HISTFILE after history -a +cat $HISTFILE + +history +history -w +cat $HISTFILE + +history -s "echo line 2 for history" +history +history -p '!e' +history -p '!!' + +# this should show up as one history entry +for x in one two three +do + : +done +history + +# just a basic test. a full test suite for history expansion should be +# created +set -H +!! +!e + +unset HISTSIZE +unset HISTFILE + +fc -l 4 +fc -l 4 8 + +fc -l 502 +fc -l one=two three=four 502 + +history 4 + +shopt -so history +shopt -s expand_aliases + +alias r="fc -s" + +echo aa ab ac + +r a=x +r x=4 b=8 + +# this had better fail with `no command found' +r cc + +unalias -a +alias + +set +o history + +shopt -q -o history +echo $? diff --git a/tests/misc/regress/log.orig b/tests/misc/regress/log.orig new file mode 100644 index 00000000..c1f1e199 --- /dev/null +++ b/tests/misc/regress/log.orig @@ -0,0 +1,50 @@ +:; ./shx + +sh: +<&$fd ok +nlbq Mon Aug 3 02:45:00 EDT 1992 +bang geoff +quote 712824302 +setbq defmsgid=<1992Aug3.024502.6176@host> +bgwait sleep done... wait 6187 + + +bash: +<&$fd ok +nlbq Mon Aug 3 02:45:09 EDT 1992 +bang geoff +quote 712824311 +setbq defmsgid=<1992Aug3.024512.6212@host> +bgwait sleep done... wait 6223 + + +ash: +<&$fd shx1: 4: Syntax error: Bad fd number +nlbq Mon Aug 3 02:45:19 EDT 1992 +bang geoff +quote getdate: `"now"' not a valid date + +setbq defmsgid=<1992Aug3.` echo 024521 +bgwait sleep done... wait 6241 + + +ksh: +<&$fd ok +nlbq ./shx: 6248 Memory fault - core dumped +bang geoff +quote getdate: `"now"' not a valid date + +setbq defmsgid=<1992Aug3.024530.6257@host> +bgwait no such job: 6265 +wait 6265 +sleep done... + +zsh: +<&$fd ok +nlbq Mon Aug 3 02:45:36 EDT 1992 +bang shx3: event not found: /s/ [4] +quote 712824337 +setbq defmsgid=<..6290@host> +bgwait shx7: unmatched " [9] +sleep done... +:; diff --git a/tests/misc/regress/shx.orig b/tests/misc/regress/shx.orig new file mode 100644 index 00000000..4b3bf2b8 --- /dev/null +++ b/tests/misc/regress/shx.orig @@ -0,0 +1,10 @@ +#! /bin/sh +for cmd in sh bash ash ksh zsh +do + echo + echo $cmd: + for demo in shx? + do + $cmd $demo + done +done diff --git a/tests/run-histexpand.debug b/tests/run-histexpand.debug new file mode 100644 index 00000000..16b325fa --- /dev/null +++ b/tests/run-histexpand.debug @@ -0,0 +1,4 @@ +echo "warning: all of these tests will fail if history has not been compiled" >&2 +echo "warning: into the shell" >&2 +${THIS_SH} +o histexpand ./histexp.tests > /tmp/xx 2>&1 +diff /tmp/xx histexp.right && rm -f /tmp/xx |